王继敏
【摘 要】在Windows和Linux的混合局域网环境中,利用Samba服务方便的实现局域网内的数据共享,从而降低整体系统的构建成本。
【关键词】Samba;数据共享
0 引言
Microsoft Windows以其友好的用户界面在桌面环境中获得了广泛的应用,而Linux以其开放、自由和强大的稳定性和安全性在服务器领域占据着主导。在企业、机关、学校等单位的办公局域网环境中,如果能将Windows和Linux结合起来构建混合局域网,则可以兼顾前者方便易用和后者稳定安全的优点,并可以避免购买昂贵的Windows Server授权,显著降低办公成本。
在这样的混合局域网环境中,大部分的工作站使用Windows操作系统,少量的机器安装Linux以提供各种局域网内的公共服务。各个Windows工作站是无法使用Linux的NFS Server服务的,这些Windows工作站彼此之间使用Microsoft和IBM合作开发的SMB(Server Message Block)协议来进行文件或打印机等设备之间的共享,而Samba就是Linux专为SMB而设计的服务器系统,这样Windows工作站与Linux服务器就可以方便的沟通起来。
1 Samba简介
Samba这套系统是一个名叫Andrew Tridgell的博士生通过逆向工程分析SMB通信协议而开发出来的。软件开发出来以后,Andrew Tridgell为这套系统注册商标,一开始申请用SMBServer作为商标。但是,因为SMB是没有意义的文字,所以无法注册为商标。Andrew Tridgell开始翻开字典,就像给孩子取名字一样苦苦查找,突然发现Samba刚好含有SMB,又是一个热情有劲的拉丁舞的的名称,所以就用Samba这个名字作为了商标。[1]
自从有了Samba,微软对此极为抵触,因为Samba使得Linux的工作站可以无缝的融入到Windows工作组中,影响到了Windows的销售。所以微软一直通过各自方式试图阻挠Samba。直到2007年,微软在欧盟的反垄断案中败诉,然后被强制要求向Samba公开他们的网络控制协议,这件事情之后,微软才开始慢慢学习和Samba接触。在2011年微软甚至还向Samba社区提交了一段补丁代码。Samba 团队的 Chris Hertel 在文章中寫道:“在过去的年月里,收到来自微软的补丁代码是一件无法想象的事情,但是时代已经变了,战争也该结束。对于软件专利我仍然持否定态度,因为它阻止了软件的创新。但是现在,在为建立一个更强大的社区和提高SMB的互操作性的战斗前线上,微软和我们并肩作战。”[2]
2 Samba的安装
此处以RHEL6(Redhat Enterprise Linux 6)为例,介绍Samba的安装过程。
假如还不知道系统内是否已经安装了Samba,可以通过如下命令获知:
# smbd -V
Version 3.6.9-164.el6
如果像上面那样可以顺利的看到版本信息,则表示Samba已经安装好了。否则还需安装Samba相关套件。
在RHEL6中,Samba服务的包组是CIFS file server。CIFS即网络文件共享系统(Common Internet File System),就是通过SMB协议而构成的网络文件系统。可以通行以下命令来安装这个包组:
# yum groupinstall "CIFS file server"
Samba服务主要是由两个服务程序构成:(1)smbd——该守护进程负责验证用户身份,提供文件与打印机的共享服务;(2)nmbd—— 该守护进程提供WINS(Windows Internet Name Service)服务,也就是查询Windows主机名称所对应的IP地址服务3,这相当于SMB局域网上的DNS服务。
3 Samba的配置及运行
在RHEL6下安装好Samba后,主配置文件位置在/etc/samba/smb.conf。整个smb.conf是由多个区段(section)构成的。Samba保留了一些关键字作为特殊区段的名称。其中global关键字定义整体服务器参数;homes关键字定义当SMB客户端连接此主机时,Samba以用户的帐号名称建立一个共享资源,用户可以访问他在Samba主机上的个人目录;printer关键字则定义共享打印机的设置。此处给出一个配置Samba服务器的实例。先看global区段定义。
[global]
workgroup = MSHOME
server string = Samba Server Version %v
netbios name = RH6_Samba_111
;interfaces= lo eth0 192.168.12.2/24 192.168.13.2/24
hosts allow = 127. 192.168.1.
workgroup = MSHOME,将NT域名或者工作组名称设置为MSHOME。在CIFS中,根据主机不同的功能将它们划分到不同的域或者工作组中以方便管理。域与工作组在规模和管理方式上都有所不同:工作组一般不超过20台主机,而域可以管理上千台主机;域需要配置单独的域控制器(Domain Controller),而工作组不需要;域的管理是在Domain Controller上集中管理的,而工作组是在每台主机上单独配置的。
server string = Samba Server Version %v,是一段显示给访问者的描述信息。此处使用了默认设置。endprint
netbios name = RH6_Samba_111,NetBIOS主机名称。这一行把该主机在CIFS中的主机名称设置为”RH6_Samba_111“,如果注释掉该行,会使用hostname作为NetBIOS主机名称。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24,该行指定Samba服务监听在哪些网卡上,注释掉该行表示监听所有网卡(分号表示注释,以下同)。
hosts allow = 127. 192.168.1.,该行定义哪些网段的主机可以访问本Samba服务。此例定义了127网段和192.168.1网段可以访问。
再看homes区段的例子:
[homes]
comment = Home Directories
browseable = no
writable = yes
;valid users = %S
;valid users = MYDOMAIN\%S
当SMB客户端连接到此主机时,Samba会自动以用户帐号名建立一个家目录(Home Directory)。writable = yes表示用户可以在家目录中写入文件。browseable = no表示除了用户自己可以浏览本家目录的资源外,其他用户是不可以浏览的。
最后看public区段的例子:
[public]
;comment = Public Stuff
path = /data
public = yes
;writable = yes
printable = no
;write list = +staff
這里定义了本Samba服务所共享的资源。[public]为该共享资源访问点的名称;path = /data定义了共享资源的位置;public = yes规定了该目录为公开共享,即无需密码即可访问;printable = no定义了该资源不是一个打印机而是磁盘;; writable = yes注释掉该行表示该目录为只读;; write list = +staff,这里可以设定一个组,该组用户可以写入该共享目录。
这里把/data目录作为共享资源,所以我们必须事先建立好这个目录,并设置好目录的权限:
# mkdir -m 755 /data
然后即可通过service smb restart命令开启Samba服务,Windows工作站即可以通过网上邻居访问到Samba的共享资源。
4 结束语
利用Samba服务将Linux系统无缝的融入到Windows办公局域网中,为整个局域网提供数据共享,提高了服务的稳定性并降低了整体办公成本。
【参考文献】
[1]鸟哥.鸟哥的Linux私房菜服务器架设篇[M].第三版.北京:机械工业出版社,2012:461-462.endprint