(同济大学,上海 200092)
基于Samba的Linux与Windows互访研究
林 野
(同济大学,上海 200092)
本文介绍了基于Samba的Linux与Windows互访研究,对Samba的安装与配置进行了探讨,分析了SWAT工具的技术特点,对启动与测试Samba进行了说明。
Samba;Linux;Windows;互访研究
随着因特网的发展,计算机得到大量的普及,而计算机上所搭载的操作系统也取得了长足的进步。在当今市面上,操作系统以Windows和Linux系列居多。作为商业上最成功的操作系统,Windows系列操作系统因其可靠性、安全性和良好的操作性为广大用户所认知并接受。Linux操作系统是成长最快的系统,随着对操作性、易用性的改进,它也逐步得到用户的青睐,与Windows系统的差距逐渐缩小。相较于封闭的Windows系统而言,Linux系统更加开放,它开放源代码的理念也更加受到广大IT工作者的认同。因为开源性能优秀且价格低廉,Linux系统在服务器市场取得了很大的市场份额,并被看作是一个理想的服务器操作系统。由于Windows和Linux在性能上各有千秋,双方市场发展侧重点也不同,因此在企业和公司内部往往存在大量的Windows与Linux系统,而对于Windows与Linux系统的相互访问和信息交换的需求也越来越多。如何将这两种异构操作系统统一管理并实现信息互访是一个非常有意义的研究课题。
操作系统间信息互访技术一直是研究热点,Windows系列操作系统利用 CIFS(Common Internet File System)来实现,即网上邻居。网上邻居将局域网上的其它计算机显示出来并分享给用户。Linux系统通过NFS(Network File System)将其它计算机所分享的目录挂载进来,也可以完成Linux系统之间的相互信息访问。Windows与Linux系统之间的信息互访则相对复杂,虽然利用TCP/IP协议栈中的超文本传输协议HTTP(Hyper Text Transfer Protocol)、文件传输协议FTP (File Transfer Protocol)和 网 络 电传 TELNET (Teletype over the Network)等应用层协议也可以在Linux/Windows系统中构建相应的服务器,向Windows 、Linux系统提供基本的资源共享服务,但目前最流行的异构操作系统共享技术是Samba。利用Samba,Linux 用户就可以进入到 Windows 主机,可以在 Windows主机中创建和使用文件共享;同时,利用 Samba 服务器还可以让 Windows 用户像访问 Windows 主机一样通过网上邻居来访问 Linux 服务器。
Samba是由澳大利亚国立大学计算机科学实验室 Andrew Tridgell开发,其初衷是实现异构操作系统间的文件和打印机共享。随着时间的发展,Samba被越来越多的公司和企业所认同。利用Samba,可以非常便利的将Linux操作系统的文件目录与打印机等设备共享给Windows系统使用,同时也可以在Linux系统下访问Windows系统,进入Windows系统创建文件,备份Windows系统下的资源,共享Windows系统的打印机。
Samba的 核 心 是 SMB(Server Message Block)协议。SMB通信协议是微软和英特尔公司在1987年制定的协议,主要是作为微软Windows系统的通讯协议,用于Windows系统间共享文件、打印机等。而Samba则是通过逆向工程创建的与SMB兼容的软件,使得非Windows操作系统也能使用它。SMB是一种客户端/服务器协议,以请求/响应方式作答,当客户端发出请求后,请求经过网络传送到服务器端,服务器端对这些消息进行解释,然后响应客户端。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、打印机、邮件槽(mailslot)、命名管道(named pipe)等资源。
虽然常被用于局域网环境,但在Internet环境下也可以使用Samba。通过NetBIOS over TCP/IP技术,Samba主机可以与全世界的电脑分享资源。
启动Samba后,两个重要的后台守护进程会被开启:(1)smbd 这个进程主要用来管理Samba主机分享的目录、档案和打印机等,并负责建立会话,对到达局域网上的消息块进行处理。当到达的消息块指定为一个文件,则该共享资源是一个文件;如果是一条打印机发送消息,则访问一台打印机。它主要利用TCP协议来传输数据,可靠安全,开放的端口为139和445。(2)nmbd 这个进程的主要任务是负责管理工作组,并对Samba服务器的NetBIOS名字进行解析,将共享资源列表提供给Windows的网上邻居,使Samba服务器的共享资源能够显示在Windows的网上邻居中。它主要利用UDP协议开启137、138端口来负责服务器名的解析工作。
Samba服务器应用相当广泛,可以依照不同的网域联机方式和不同的用户账号密码管理方式来进行分类。最常见的局域网联机模式有两种:(1) 对等模式(peer to peer),在对等模式下,局域网中的每部计算机地位相等。它们都可以在自己的计算机上管理账号与密码,同时每部计算机都可以独立运作,只是通过网络将所有的计算机连接起来而已。这种架构在小型的局域网中应用的比较多。它的好处是每部计算机都可以独立运行,不受其它计算机的影响,但无法应用在大规模的局域网里,因为在每台计算机上都要存储所有的用户名与密码。(2) 主控模式(domain model),在该模式下,所有的账号与密码都放置在一部主控服务器上面,当用户想要访问任何计算机时,均需要在屏幕上面输入相应的用户名和密码,只有通过主控服务器认证后,才能给予权限访问该计算机。不同的用户具有不同的计算机访问权限。这种架构比较适合大规模的企业架构,当系统管理员要管理员工对计算机的使用权限时,只需要对主控服务器进行修改即可,不需要对网络下的每部计算机都进行改动。对于系统管理员来说,使用这种架构来管理账号资源,他的工作量会减小许多,且网络的可靠性会增加很多。
图1 登录窗口
图2 共享资源
图3 Linux下登录Windows
图4 Windows共享文件目录
图5 Windows系统共享目录详细信息
一般来将,Linux的各个发行版本里都包含Samba软件包。当然,也可以到www.samba.org网站上下载最新的源代码并在本地机器上编译。在Linux上可以使用入如下命令来安装:sudo apt-get install samba。apt-get命令适用于deb包管理式的操作系统,可以自动的从互联网的软件仓库中搜索、安装、升级、卸载软件,非常方便。
Samba安装好后,会在/etc目录下生成一个Samba子目录,而该Samba子目录下也有一个默认的Smb.conf文件。该文件就是Samba的配置文件,Samba的主要配置信息都放在这个文件里。在该配置文件下,有多个不同的配置字段,例 如 [global]、[homes]、[printers]等。[global]字段主要用于配置Samba服务器的全局参数,包括工作组、字符编码的显示、登录文件的设定、是否使用密码等。[homes]字段用于配置Samba服务器上用户自己的共享主目录,当用户登录Samba成功后,Samba服务器就会建立共享资源并将该资源指定到用户的主目录上。[printers]字段则主要用于设定共享打印机时的一些参数。在Smb.conf配置文件中,有一部分配置选项被注释掉了,不会起到任何作用。另外一些配置选项选取默认值时即可让Samba正常工作起来。在对Samba进行配置时,最重要的参数是security。Security可以选择三种设定值,分别为share、user、domain。它们分别代表:
share: 在这种模式下,共享的数据并没有设置密码,任何用户都可以访问它,虽然便捷但极不安全。
user: 这种模式下,使用Samba服务器本身的密码数据库。任何用户访问Samba的共享目录时,Samba服务器都会首先去确认该用户是不是合法用户,以决定是否允许访问。
domain: 这种模式下,使用PDC(主域控制器)来完成认证。如果选择了这个设定值,还需要提供[password server = ip]的设定值。
下面提供一个示例:
[global]
workgroup = WORKGROUP
display charset = UTF-8
unix charset = UTF-8
Security = user
dos charset = cp936
netbios name = sambaok
server string = sambaok test server
hosts allow = 192.168.2.1
log file = /var/log/samba/samba.log
max log size = 50
encrypt passwords = yes
smb password file = /etc/samba/ smbpasswd
load printers = yes
[homes]
comment = Home Directories
browseable = no
writeable = yes
[share]
comment = My Share
path = /home/user/share
public = yes
writable = yes
valid users = aa
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
printable = no
available = yes
browseable = yes
[printers]
comment = All printers
path = /usr/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
配置信息分为四部分:第一部分是全局参数区,这里主要设置了Linux、Windows端的显示字符集,并将Samba服务器的安全模式配置成user模式。第二部分是用户主共享目录设置区,这里将其设置成只有登录用户才能看到自己主目录的模式,增强安全性。并赋予了用户对该共享目录的写权限。第三部分是共享目录的设置,包括目录路径以及写权限等。第四部分完成对打印机共享的设置。
可以使用testparam来测试该配置文件。testparam是Samba套件提供的一个命令工具 ,可以自动对配置文件进行测试。如果配置文件有语法错误,它就会显示出来,如果没有错误,就会列出可装载的服务项。对sam.conf进行任何改动后,最好都使用testparam进行一下测试。
对sam.conf完成配置后,需要为Samba服务器添加用户。因为在这里将Samba的安全模式设置成user,所以Samba用户必须首先是Linux系统用户。在Linux系统下,以root身份登录,使用命令adduser smb添加系统用户。然后使用命令smbpasswd –a smb将该用户添加到Samba服务器中,并设定用户的密码。
SWAT(Samba Web Administration Tool)是Samba的图形化管理工具。不妨通过浏览器利用swat工具来设置Samba。在swat中每一个Samba参数都有相应的帮助文件或解释文件,很容易学习。SWAT工具嵌套在xinetd超级守护进程中,要通过启用xinetd进程来启用swat。因此要先安装xinetd工具包,然后安装swat工具包。
安装好swat工具包后,编辑其配置文件:
将“only_from”设置为0.0.0.0而不是127.0.0.1,这样服务器就可以监听所有的来访IP。将disable设置成no而不是yes,这样swat子进程就可以随xinetd超级守护进程一起启动。swat默认使用tcp901端口。
通过web来配置Samba,默认使用root账号进入。swat的执行程序默认在/ usr/sbin目录下。
因为swat是xinetd的子进程,所以只要启用了xinetd,那么swat也就会伴随xinetd启动。使用命令service xinetd restart。
Swat启动后,就可以通过Web浏览器登入swat配置界面。由于swat的默认端口是901,所以通过Web登入swat的地址是http://192.168.0.1:901。其中该IP地址为Linux服务器的IP地址。在用户登入后,会弹出一个提示框,要求用户输入登陆的用户名和密码。只有登录用户名和密码正确,才能登入swat配置界面。默认的用户是root,密码是登入Linux服务器的密码,这些都可以在swat的配置文件中定义。
进入swat配置界面后,可以看到有8个配置选项,每个选项可以配置不同的功能。HOME主要是Samba的相关程序及文件说明,GLOBALS用于设置Samba的全局参数。SHARES配置Samba服务器的文件共享参数。PRINTER设置Samba服务器的打印机共享参数。WIZARD是Samba配置向导。STATUS用于查看和设置Samba的状态信息。VIEW界面可以查看Samba的文本配置文件,即smb.conf。PASSWORD管理Samba用户的密码设置,可以修改密码,新建删除用户。
Samba的启动非常简单,打开系统的终端窗口,输入/etc/init.d/smbd restart命令,Samba就会被启动。同理,输入/ etc/init.d/smbd stop 命令,Samba就会被停止。Samba启动后,如果运行正常,Linux与Windows就可以互相访问了。
5.1 Windows访问Linux服务器共享资源
在Windows下访问Linux服务器共享资源需要通过Windows系统的网上邻居来实现。Windows系列操作系统的网上邻居的主要功能是通过 SMB 协议来传输文件数据,并且网上邻居具有自己的主机名称解析系统。
首先,进入Windows系统,进入“网上邻居”,找到Linux主机所在的工作组,双击进入该工作组,就会看到该Linux主机。
双击该主机,就会弹出一个如图1所示的登录窗口。在该窗口输入登录用户名与密码。这里使用的登录名与密码是之前在Samba服务器中所添加的。必须与其一致,否则会在登录时提示登录用户名和密码错误。
登录成功后就能看到该Linux主机上的共享主目录与其他的共享资源了。如图2,其中,share为用户登录后的主目录,该目录只有具有访问权限的用户才看的到。
5.2 Linux访问Windows服务器共享资源
想要在Linux下访问Windows服务器上的资源,必须借助几个Samba套件提供的工具:
(1)nmblookup
Nmblookup通过查询广播地址,能够显示一台主机的NetBIOS主机名,通常显示的结果是一个IP地址。因为主机存在虚拟IP地址的关系,有时候也会显示多个IP地址。在一个局域网中,一台主机只能拥有一个NetBIOS主机名,这样,通过nmblookup命令查到IP地址后 ,就可以与其进行连接。Nmblookup命令也可以用来查询所有在局域网中活动的主机IP。
(2)smbclient
Smbclient主要用来显示或者访问共享文件夹。Linux客户端访问Windows服务器上的共享文件主要通过两种方法:1)用mount命令挂载Windows中的共享目录到本地磁盘,命令如下:mount –t smbfs –o username=user,password=pwd //192.169.1.1/share /localdir ;2) 使 用smbclient命令。Smbclient命令由Samba套件提供,用到的主要参数包括-L、-o、-U等。命令是smbclient //serverIP/ share –u name password。需要注意的是最好使用对方服务器IP来进行登录,这样会更加快速。
在Linux下访问Windows服务器上的共享资源时,首先使用nmblookup命令查询Windows主机名所对应的IP地址。查询到IP地址后使用ping命令探测该Windows主机是否与Linux主机网络互通。如果连接超时,通常是防火墙的设置问题,建议最好关闭Linux与Windows端的防火墙。在探测网络为相通后,就可以开始访问。本文使用smbclient命令。输入命令smbclient //192.168.2.103/share–U username后,出现如图3界面,输入密码,就登录了远端Windows系统的共享目录,如图4。在该目录,可以使用ls命令来显示共享目录的所有文件,也可以使用cd命令跳转到其他的共享目录,如图5。
[1] 基于Samba的Windows与Unix互连技术的研究与实现[J].中国地质大学,2009.
TP39 < class="emphasis_bold"> 文献标识码:A
A