引言:
如今的操作系统市场,几乎是Unix与 Windows割据天下。一个侵占了绝对的服务器市场,而另一个却几乎吞噬了整个桌面市场。经常有人抱怨如今的文件系统,网络的异构,使不同的系统之间的访问变得困难,需要引入一门通用的“语言”来解释异构系统之间的通讯。本文主要介绍了Samba for Solaris的使用,实现了UNIX与windows的文件共享和打印共享,你可以在本地的windows系统上的网络邻居来访问Solaris上的文件,打印共享,您甚至还可以影射网络驱动器,这就如同使用本地磁盘一样方便。而且利用Unix的强大的访问控制,你可以对不同的共享目录权限设置,不用担心有人会删除你的文档,而您自己却可以自由操作。
【关键字】 Samba服务器 共享 SMB SWAT 服务进程 异构网络互联
一、前置知识
首先,我们先来介绍下什么是Samba,我们看看Samba组织的目标——Opening Windows To A Wider World。熟悉Linux的用户可能常常在Linux上安装Samba服务来实现与Windows系统的文件共享和打印机共享。他们之间的数据传输使用SMB(Service Message Block)协议.这是一个在传输层之上的协议,所以他可以支持很多不同异构系统的网络互联(比如,Linux,Solaris,Windows等),Samba之所以能够工作,因为SMB协议模仿了Windows内核的文件和打印共享协议。微软已经将SMB改名为公共因特网文件系统(CIFS,Common Internet File System ),并打算把它设计为Internet的标准协议。这在一定程度上是由于它想与最初的基于NetBIOS的SMB保持一定的距离。NetBIOS是Windows 网络的一个伟大的工具,Microsoft使用NetBIOS实现了一个网络文件/打印服务系统,但是为LAN设计的它却注定了不能路由。
Samba执行了SMB/CIFS的一个版本,这个版本在很大程度上与大多数的Windows版本兼容。但是,无论是从Windows连接到Linux还是从Linux连接到Windows机器,Samba系统对于实现文件和打印服务来说总是很稳定的。我们可以通过Windows的网络邻居来轻松访问安装了Samba的UNIX/LINUX服务器。(更多的文档见www.samba.org )
二、Samba在solaris8上的安装与配置
1.系统先要打上较新的EIS,然后到www.sunfreeware.com下载需要的软件包,如下:
libiconv-1.8-sol8-sparc-local.gz
ncurses-5.4-sol8-sparc-local.gz
libgcc-3.3-sol8-sparc-local.gz
readline-5.0-sol8-sparc-local.gz
popt-1.7-sol8-sparc-local.gz
samba-3.0.10-sol8-sparc-local.gz
前面5个软件包在安装samba之前要装上,用以下命令解压并安装samba软件包;
#gunzip samba-3.0.10-sol8-sparc-local.gz
#pkgadd –d samba-3.0.10-sol8-sparc-local
安装完毕后,我们到/usr/local下可以看到安装的软件包samba目录。
2.配置相关文件
samba的配置文件是/usr/local/samba/lib/smb.conf文件,这个文件需要自己创建,安装后是不存在。可以根据您的需要通过配置它相关的参数来实现复杂或简单的访问控制。smb.conf的格式是有多个段,每段由段名开始,一直到下个段名,每个段名放在方括号中间,下面给出个smb.conf文件例子。
#more /usr/local/samba/lib/smb.conf
[global]
workgroup = UEC
netbios name = UEC-server
server string = Samba Server
log file = /usr/local/samba/var/log.%m
security = user
guest account = guest
[gcp docs]
comment = this is shared gcp docs
path = /gcp
guest ok = yes
read only = no
browseable = yes
[john docs]
comment = this is shared john docs
path = /john
guest ok = yes
read only = no
[global]段是全局变量,它设置了工作组,NetBIOS名,安全参数security等参数,除了[global]段外,所有的段都可以看作是一个共享资源,段名是该共享资源的名字,而段里的参数就是共享资源的属性。[gcp docs] 和[john docs]就是共享的目录,它的参数可以设置共享目录路径和访问控制权限等。(详细参数见附录)
三、启动Solaris 8系统的Samba 服务
在安装完软件包后,我们把/usr/local/samba/sbin 下面的3个应用程序,nmbd,smbd,winbindd复制到/usr/local/samba/bin下面去。
samba server服务是 由3个守护进程组成,
nmbd—Netbios名称服务器,该进程使用UDP协议提供Netbios名称服务和浏览支持,处理命名注册和决策请求。该进程应当是被首先启动。
smbd —SMB服务器,使用TCP协议给SMB客户提供文件和打印服务;应当在nmbd进程后立即启动。
Winbindd—当Samba服务器是windows NT 或 ADS域中的成员时,此时当启动该守护进程。
通常在修改了配置文件smb.conf后,我们需要从新启动这3个进程,以便参数的设置起效.
下面配置下到自动启动脚本,我们可以自己写个启动的脚本,加入这3个进程(注意启动的先后顺序),其实samba安装完有个example的启动的脚本,我们只要做些修改就可以了。
#cp /usr/local/samba/doc/samba/examples/svr4-startup/samba.server /etc/init.d/samba.server
#Vi /etc/init.d/samba.server
把默认的两行/opt/samba/bin/smbd -D -s/opt/samba/smb.conf
/opt/samba/bin/nmbd -D -l/opt/samba/log -s/opt/samba/smb.conf
改为三行
/usr/local/samba/sbin/smbd -D -s/usr/local/samba/lib/smb.conf
/usr/local/samba/sbin/nmbd –D -l/var/adm/samba.log -s/usr/local/samba/lib/smb.conf
/usr/local/samba/sbin/winbindd
#cd /etc/rc2.d
# ln -s /etc/init.d/samba.server S99samba.server(把它Link到启动目录里面)
这样Samba服务进程就会随着系统的启动而自动启动了。
四、samba服务系统的管理和配置工具
除此之外,Samba还提供了几个实用的组件(位于/usr/local/samba/bin目录下面):
smbclient, SMB客户程序,用来存取SMB服务器上的共享资源;
testprns 测试服务器上打印机访问的程序;
testparms 测试Samba配置文件的正确性的工具;
smbstatus 这个工具可以列出当前Samba服务器上的连接;
smbtree 这个工具来显示共享目录树形结构。
smbpasswd 这个工具用来设定用户密码;
swat samba的Web管理工具;
这些工具其实都是非常有用的,通过他们我们可以更好的管理配置samba服务器。
下面通过例子做介绍
#cd /usr/local/samba/bin
#testparms
测试参数的设置格式,属性是否正确。
#smbstatus
Samba version 3.0.10
PID Username Group Machine
-------------------------------------------------------------------
2502 root UEC uec-gcp (192.168.1.2)
Service pid machine Connected at
-------------------------------------------------------
IPC$ 2502 uec-gcp Mon Sep 12 13:11:31 2005
John docs 2502 uec-gcp Mon Sep 12 12:59:01 2005
gcp docs 2502 uec-gcp Mon Sep 12 12:58:54 2005
No locked files
#smbpasswd –a username
添加访问的共享资源的用户,一般用户也可以访问SWAT,但只有查看状态的权限。
# smbtree
Password:
WORKGROUP
\\SUN440EN Samba 3.0.10
\\SUN440EN\ADMIN$ IPC Service (Samba 3.0.10)
\\SUN440EN\IPC$ IPC Service (Samba 3.0.10)
\\SUN440EN\john docs
\\SUN440EN\gcp docs
#smbclient -L yourhostname.
显示了samba server 上的共享资源。
Samba服务器是如何利用SMB/CIFS协议模仿Windows的NetBIOS协议的呢?
表4—1,描述了具体的服务和端口使用。
端口 服务描述与使用的进程
137 Used for NetBIOS network browsing (nmbd)
138 Used for NetBIOS name service(nmbd )
139 Used for file and printer sharing and other operations(smbd)
445 Used by Windows 2000/XP when NetBIOS over TCP/IP is disabled
901 Used by SWAT (SWAT管理工具)
表4-1 服务端口描述
五、web页面管理配置工具swat
把swat单独提出来说明,是因为它是GUI的WEB页面管理方式,而且提供了几乎所有的参数配置,状态查看等功能。默认的SWAT进程是没有启动的,我们把它加入inet.d守护进程.
#Vi /etc/services
加一句 swat 901/tcp
#vi /etc/inetd.conf
加一句 swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat
这样后重新启动/usr/sbin/inetd 守护进程,这里的Swat使用了TCP901端口监听,在浏览输入:http://x.x.x.x:901 进入web管理页面。当然我们要在获得权限后才能进去设置。如图5-1:
图5-1 swat管理页面
这个页面管理工具可以配置几乎所有的Samba参数,提高了Samba的使用便捷性和易用性。在首页它还提供了命令和参数的帮助文档手册。
六.从Windows端访问Samba服务器
把Samba配置成为文档服务器以后,就可以从windows的网上邻居访问它了,当然了要配置Client和Server在同个局域网段和工作组,在输入用户和密码我们就可以访问共享的文档和打印机了,同时我们可以把我们需要的个人共享目录配置成为网络驱动器,在网络连接的情况下,如同操纵本地磁盘一样。注意,有时候并不能在网络邻居里面看到Samba服务器,可能Samba的兼容性问题,这时候通过网络邻居搜索计算机也可以访问到Samba服务器。这比通过FTP访问和NFS访问简便的多。我们也可以通过在Windows上建立FTP,WWW服务器而把文件放在Samba服务器上面,这样也解决了SMB协议不能路由的缺点。
七.前景展望:
最新的SOLARIS 9已经集成了SAMBA的软件包,这让Samba的使用越来越容易,同时也看到Solaris与Windows互联的迫切性。Samba系统的真正目的在于帮助简化混合操作系统环境中所存在的挑战。对于大企业来说,在共享文件和共享打印的访问方面存在巨大挑战,而Samba系统的目的在于改变这种现象。而且UNIX可以通过SMB协议加入现有的Windows域。实现更复杂的网络管理。这也在一定程度上提供了UNIX进入桌面市场的机遇。而且Samba支持多种平台的版本,这为异构系统与Windows的兼容提供了解决方案。Samba Server 也可以完全取代 NT/2000 PDC(Primary Domain Controller)成为 NT/2000 主域控制器,当然,Samba 也可以将目录、档案分享给其它 Mac、OS/2 的机器使用,应用层面可以说是相当广阔。Samba 最大的功用除了做 file Server 外,还可以做 WINS Server。Wins Server最大的好处是可在 NT/2000 域内做名称解析。相信有Microsoft的力挺,SMB/CIFS将会在未来的Internet中大放异彩。
附:samba参数参考目录
一.全局参数
1. 基本参数
workgroup
说明:这个参数用来指定samba所要加入的工作组,另外如果在设置了security=domain,则workgroup可以指定域名。例如:
workgroup = UEC
指明工作组为UEC
netbios name
说明:这个参数指定samba的NetBIOS名,可以不设置,samba将会使用机器的DNS名的第一部分,如果你的机器的DNS名是host1.domain,就用host1。
例如:
netbios name = GCP
指定NetBios名为GCP
server string
说明:这个参数指定在浏览列表里的机器描述,和MS WINDOWS 里配置网络时的描述是一样的。可以是任何字符串。也可以不填,samba会用缺省的 samba %v,即samba 尾随它的版本号,不过如果要模仿NT象一点的话,可以填一下。例如:
server string = UEC File Server
2. 安全参数
security
说明:这是个重要的安全配置参数,有4个值,分别是share、user、server和domain,定义了samba的基本安全级,通常是 user
security = user
这是samba的默认配置,这种情况下要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
securtiy = share
这是几乎没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。
security = server
和user安全级类似,但用户名和密码是递交到另外一个SMB服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级,从用户端看来,server和user这两个级别是没什么分别的。
security = domain
这种安全级别要求网络上存在一台NT PDC,samba把用户名和密码递交给NT PDC去验证。
从用户端看来,user级以上的安全级其实是没什么分别的,只是服务器验证的方式不同,但这三种安全级都要求用户在本Linux机器上也要系统帐户。否则是不能访问的。
encrypt passwords
说明:是否对密码进行加密,samba本身可以维护一个密码文件/etc/smbpasswd,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码,samba直接把这个密码和Linux里的/etc/passwd密码文件进行验证。一般samba的应用基本都设定为yes:encrypt passwords = yes。
username map
说明:这个参数可以让你指定一个文件包含来自客户机的用户名与Linux系统用户名之间的映射,文件的格式是每行一个映射,映射的格式是:Linux usename = client username … 。
例如 root = admin adminstrator
这样,当客户机的用户是admin或administrator时,就被转换成root。
这个功能对用户管理很方便,可以让管理员不需要对客户或服务器上的用户帐号大动干戈。
文件名通常用默认的/et/smbusers
password level
说明:这是针对一些SMB客户像Windows for Workgroup、OS/2之类而设的,像WFW这样的系统在发送用户密码的时候,会把密码转换成大写再发送,这样就和samba的密码不一致,这个参数可以设定密码里允许的大写字母个数,这样samba就根据这个数目对接收到的密码进行大小写重组,以重组过的密码尝试验证密码的正确性。这个值越大,组合的次数就越多,验证时间就越长,安全性也越低!
guest account
说明:这个参数指定guest级帐户的用户名,可以是nobody、ftp,guest级别的用户可以不要密码就访问给定的guest服务。
host allow
说明:这个参数指定那些机器可以访问samba,例如:host allow = 192.168.1. 127.
指定192.168.1.0里的所有机器都可以访问。
如果不允许子网里的一台机器访问,可以这样设:host allow = 192.168.1. EXCEPT 192.168.1.33
禁止192.168.1.33访问
host deny
说明:和host allow 相反是指定那些机器不能访问,格式一样。
3.日志记录参数
log file
说明:这个参数指定日志文件的名称,路径一般放在/var/log/samba,可以在文件名后加个宏%m表示对每台访问samba的机器都单独记录一个日志文件。
例如: log file = /var/log/samba/log.%m,
如果host1、host2这台机器访问过samba,就会留下log.host1、log.host2这两个日志文件。
max log size
说明:这个参数指定最大日志文件的大小,以KB为单位。
例如: max log size = 50k
4.协议参数
announce version
说明:指定服务器的宣告版本号,默认是4.2,如果在WINDOWS的网上邻居里查看samba服务器的属性,就可以看见在类型一行里有 Windows NT 4.2 Server 的字样。一般不要去更改它,如果你要让samba模拟NT像一点的话,可以改成4.0。
5. 计算机浏览参数
os level
说明:os level 的值是个整数,决定了nmbd是否有机会成为本地广播区域的工作组里的本地主浏览器,默认值是零,零则意味着nmbd失去浏览选择。如果要nmbd更有机会成为本地主浏览器的话,可以设为65。
preferred master
说明:这个参数指定nmbd是否是工作组里的首要的主浏览器,如果指定为yes,nmbd在启动的时候就强制一个浏览选择。指定该参数为yes时最好把domain master 也指定为yes。用这个参数的时候要注意的是在samba服务器所在的子网上如果有其它的机器(不管是WINDOWS NT还是另一个samba服务器)也指定为首要的主浏览器时,这些机器都会因为争夺主浏览器而在网络上广播,引起不必要的网络性能下降。
local master
说明:这个参数指定nmbd是否试图成为本地主浏览器,默认值是yes,如果设为no则samba服务器就永远都不会成为本地主浏览器。但即使设置了yes,也不等于samba服务器就会成为本地主浏览器。只是参与本地主浏览器选择。
domain master
说明:这个参数让nmbd成为一个域浏览器,取得各本地主浏览器的浏览列表,并将整个域的浏览列表递交给各本地主浏览器。默认值是no。如果网络上已经有一台NT PDC,就不要把这个参数设为yes,争不过NT PDC的。
另外,如果你对计算机浏览服务不是很清楚的话,可以参考NT网络管理资料。
6. 共享资源设置参数
comment
说明:就是对共享的描述,可以是任意的字符串
例如:comment = Share Stuff 。
path
说明: path是提供共享服务的路径,可以用%u %m这样的宏来代替路径里的unix用户和客户机的Netbios名。
例如:如果我们不打算用home段做为客户的共享,而是在/home/share/ 下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u; 。
用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,可以这样写path:path = /home/share/%m 。
writeable
说明:指定共享路径是否可以写,值是yes或no
browseable
说明:指定共享是否可以浏览,默认是yes
available
说明:指定共享资源是否可用,默认是yes,设为no则关闭该资源的共享服务,用户无法连接到该资源上。
exec 和 postexec
root preexec 和 root postexec
说明:指定在用户与共享资源在连接和断开时在服务器上执行一个命令,这两对参数很有用,区别是root preexec 和root preexec 是以root的权限运行。
打印共享还有些专用的打印参数,阐述如下:
load printers
指定在samba启动时是否自动把printcap文件里的所有打印机加载,从而可以在浏览清单里看到所有的打印机,默认是yes
printable
指定用户能不能打印,默认是no,要让一个打印共享可以让用户使用,必须设为yes
print name
打印机名
printer driver
打印机的驱动类型,这个参数可以让WINDOWS知道远程打印机上的类型,具体的值可以参考在WINDOWS里安装打印机出现选择打印机类型时的打印机类型。比如Espon LQ1600K打印机:
printer driver = Espon LQ-1600K
以上就是samba的一些常用的配置,通过这些配置参数,我们已经可以建立起一个一般应用的文件服务器。虽然还有很多参数没有提到,但samba本身可以用缺省值。
启动samba,可以用/usr/sbin/samba start来启动samba,也可以用ntsysv来启动。
二、samba 高级参数
下列所介绍的是一些高级参数的配置,这些参数如果应用得当,可以更加灵活地在网络上应用samba
1.宏
在基本配置里有提到一些参数的可以尾随%u、%m,这是samba里定义的宏,宏用百分号后面跟一字符表示,在具体运作的时候就用实际的参数来代替。常用的宏有
%S = 当前服务名
%P = 当前服务的根路径
%u = 当前服务的用户名
%g = 给定%u的所在的主工作组名
%H = 给定的%u的宿主目录
%v = Samba 版本号
%h = 运行Samba的机器的主机名
%m = 客户机的NETBIOS名
%L = 服务器的 NetBIOS 名
%T = 当前的日期和时间
灵活地应用宏可以很方便地管理比较复杂的网络。
2.一些常用高级配置参数
2.1 全局参数
config file
说明:这个参数是全局参数,可以让你用另一个配置文件覆盖缺省的配置文件,如果文件不存在,该项无效。这个参数非常有用,也使得samba的配置更灵活,让一台Linux服务器模拟多台不同配置的NT 服务器,满足不同的需求。
比如,您想让网络上的某台名字是host1的机器用它自己的配置文件,先在/etc/下为host1配置一个名为smb.conf.host1的文件,在缺省的smb.conf里加这行:
config file = /etc/smb.conf.%m
这样,当host1请求连接的时候,smb.conf.%m被替换成smb.conf.host1,对host1来说,它所看到的samba就是由smb.conf.host1定义的。而其它机器还是用smb.conf。
deadtime
说明:这个参数值是个整数,单位是分钟,用于切断一个不活动的连接。当一个没有打开任何文件的连接的不活动的时间超过datetime指定的的时间后,samba就自动切断这个连接。这个参数可以节省服务器的资源消耗,尤其是在有大量连接的情况下。默认的值是零,零代表samba不自动切断任何连接。
time server
说明:这个参数让nmbd成为WINDOS客户的时间服务器。默认是no。
2.2 共享资源参数
admin users
这个参数用来赋予用户对共享资源的管理员权限,意味着这些用户可以root一样进行所有的文件操作,当然只局限在这个共享资源上。这个选项要慎用,因为任何这样的用户可以对该共享上的文件随意进行操作。缺省是admin users = no。
例如:
admin users = Su_27
那么Su_27这个用户就是这个共享资源的管理员。
valid users
说明:指定共享资源的有效用户,即允许访问该资源的用户。
例如:valid users = user1, user2
那么user1和user2是有效用户
invalid users
说明:和valid users 相反,指定那些用户不可访问这共享资源。
max connections (S)
说明:指定一个服务的最大连接数目,用户连接到该服务时如这个服务的连接数目已经达到指定值,这个新的连接请求将被拒绝。
例如: max connections = 100
最大连接数为100
以上是一些samba的高级配置参数,但samba的参数还有很多,如文件创建权限设定,代码页,文件名大小写是否敏感等,可以参考samba的官方文档。