在Samba服务器安装完成后,系统会自动在/etc/samba/目录下生成一个smb.conf文件,这个文件就是Samba服务器的配置文件。smb.conf文件是由段、参数和注释组成的,其中每段的开始都是“[名称]”格式,如全局参数段[global];参数主要由名称和值组成,形式为“名称=值”,如制定本机所属工作组参数workgroup=linux,前面的workgroup为参数,等号后面的linux为值;注释在文件中不起作用,只是注释本段或参数的作用等,段开头都加#。
在smb.conf文件中,有多个段,其中除了[global]段外,所有的段都可以看作是一个共享资源,段名是该共享资源的名字,而段里的参数就是共享资源的属性。
其中[global]、[homes]和[printers]三个段比较重要也比较特殊。
一个共享资源段,主要由要提供访问的路径和附加的访问权限组成,可以是文件资源,也可以是打印资源。
· [global]:此段设定整体参数。
· [home]:此段为所有使用者的主目录。当用户请求一个共享时,服务器将在存在的共享资源段中去寻找,如果找到匹配的共享资源段,就使用这个共享资源段。如果找不到,就将请求的共享名看成是用户的用户名,并在本地的密码文件中找到这个用户,如果用户名存在,并且用户提供的密码正确,则以这个[home]段复制出一个共享提供给该用户。这个新的共享的名称是用户的用户名,而不是home,如果[home]段里没有指定的共享路径,就把该用户的宿主目录(home directory)作为共享路径。通常的共享资源段能指定的参数基本上都可以指定给[home]段。但是,一般情况下[home]段有如下配置就可以满足普通的应用:
[home]
writeable=yes
提示:如果[home]段里加了guess access=ok,则所有的用户都可以不要密码就能访问所有的宿主目录。
· [printers]:此段是用于提供打印服务的。如果定义了[printers]这个段,用户就可以连接到在printcap文件里指定的打印机。当接收到一个连接请求后,smbd会去查看配置文件里已有的段,如果和请求匹配就用那个段,如果找不到匹配的段,但[home]段存在,则使用[home]段。否则请求的共享名就被当作打印机共享名,然后去寻找合适的printcap文件,查看请求的共享名是不是个有效的打印共享名。如果匹配,那么就复制出一个新的打印机共享提供给客户。
· [public]:此段为用户共享设置,用来指定某一特定用户组或者用户拥有访问权限的目录配置。
当然,在smb.conf文件中还存在许多其他的段,如[netlogon](域用户登录目录设置段)、[myshare](共享段)等,但因为相比较起来,没有上面几个段重要,这里就不一一叙述了。
在smb.conf文件中,段是由各种参数组成的,接下来介绍smb.conf文件中的各种常用参数的使用。
在samba服务器中,用户可以指定samba所要加入的工作组,加入某工作组后,用户就可以同该工作组的成员进行资源共享,设定了该参数后,该名称就会出现在Windows中的网上邻居和Fedora 6中的网络服务中。这里设定加入workgroup工作组中。
Workgroup=workgroup
提示:如果在文件中设置security=domain参数,则workgroup参数可以指定域名。
在同一个工作组中往往会存在多个共享,为了区分这些共享,可以对服务器进行简单的注释说明。指定在浏览器列表里的机器描述可以使用任何字符串,也可以不设置。这里设置为samba server。
Server string=samba server
用户可以限制允许访问服务器的IP地址的范围,这一项对服务器的安全非常重要,默认为允许所有IP地址访问。此参数的设置,有一定的格式,如服务器允许192.168.0.1到192.168.0.255和192.168.1.1到192.168.1.255的IP地址段访问,可进行如下设置:
hosts allow=192.168.0. 192.168.1.
如上所示这里只填写的两个地址段之间用空格隔开。如果不允许子网中的某一台机器访问,例如在192.168.1.地址段中不允许192.168.1.55主机访问,可以如下设置:
hosts allow=192.168.1. EXCEPT 192.168.1.55
在地址段后面加上参数except,再加上禁止的主机IP地址即可。
用户可以在此参数中定义打印机的配置文件,自动挂接打印机选单。这里使用/etc/printcap文件。
printcap name=/etc/printcap
在此参数中用户可以设置是否自动加载打印机,在Samba服务器启动时自动把printcap文件里的所有打印机加载,从而可以在浏览清单中看到所有的打印机,如共享值为yes,如不共享值为no,默认为yes。命令如下:
load printers=yes
在此参数中用户可以设置打印机的类型,如果使用的是Fedora标准型打印机,则没有必要更改打印机类型,通常标准型打印机类型包括:bad、sysv、plp、lpmg、aix、hpux、qnx和cups。这里设置为如下:
printing=cups
设定guest级账户的用户名,允许nobody、ftp、guest级别的用户可以不使用密码就能登录服务器,访问给定的guest服务。如下pcguest可匿名登录:
guest account=pcguest
指定日志文件的名称。路径一般为/var/log/samba,可以在文件名后面加个宏%m,表示对每台访问Samba的机器都单独记录一个日志文件。例如:
log file=/var/log/samba/log.%m
如果host1、host2这两台机器访问过Samba,就会留下log.host1、log.host2这两个日志文件。要设定日志文件的大小则需在参数max log size中设定,以KB为单位,如这里设定为50KB:
max log size=50
security参数为安全配置参数,有4个值,代表4种安全级别,如下所述。
· shart:任何用户都可以不要用户名和口令即可访问服务器上的资源。
· user:必须先提供用户名和密码进行验证,才能登录服务器。
· server:用户名和密码是递交到另外一个SMB服务器去验证。
· domain:Samba把用户名和密码递交给Windows 2003 PDC去验证。
定义Samba的基本安全级,通常为user。如下面所示:
security=user
提示:如果定义为share级别,则应该将guest account=hgz、encrypt passwords=yes和smb passwd file=/etc/smbpasswd前加上分号。
设定密码里允许的大写字母个数,这样Samba服务器就根据这个数目对接收到的密码进行大小写重组,以重组过的密码尝试验证密码的正确性。这个值越大,组合的次数就越多,验证时间就越长,安全性也就越低。
例如,如果这个值为2,用户的密码是abcd,但发送出去的其实是ABCD,Samba就会把这个ABCD进行大小写重组,组合的密码可以是Abcd、aBcd、abCd、abcD、abcd、ABcd、AbCd、AbcD、aBcD、aBcD、abCD。所以如果没有必要就把这个值设定为零,这样的话,Samba只进行组合两次,一个是接收到的密码,另一个尝试的是这个密码都是小写的情况。
不过即使这样也存在着一定的安全隐患。设定如下:
password level=0
encrpt passwords参数可以设置是否将密码加密。Samba本身可以维护一个密码文件/etc/smbpasswd,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码,Samba直接把这个密码和Fedora 6中的/etc/passwd密码文件进行验证。
一般Samba的应用基本都设定为yes,如下所示:
encrpt passwords=yes
当然,Samba的用户是基于Fedora 6系统用户的,Samba的加密工具是smbpasswd。smbpasswd工具最简单的用法是在命令行中输入命令:
smbpasswd –a username
这里的username必须是已经存放在/etc/passwd文件里的用户名。然后系统会提示输入密码和确认密码,此时会生成一个新的密码条目,存放在/etc/smbpasswd文件里。
另外,Samba提供了一个名为.mksmbpasswd.sh的工具,这是一个shell脚本,可以从/etc/passwd文件里生成smbpasswd文件,用法是:
cat /ect/passwd | mksmbpasswd.sh>/etc/smbpasswd
这里把passwd里的用户都加到smbpasswd里。从安全起见,smbpasswd文件的存取权限设置为600。
(1)guest用户映射。
guest用户映射仅适用于安全模式(user、server和domain安全级)。如果一个用户没有通过身份验证,就可以将其映射为guest用户,从而允许他访问guest共享。这里guest用户由guest account参数指定。
guest用户映射由全局参数map to guest控制,它只能放在[global]段中,可以是如下三个值。
· map to guest=Never:不进行映射,拒绝非法用户访问任何资源。这是默认行为。
· map to guest=Bad User:如果用户使用一个不存在的账号登录,就将它映射为guest用户;如果提供的账号正确而口令错误,则禁止连接。
· map to guest=Bad Password:将使用错误口令登录的用户映射为guest用户。这样的设置会产生一个问题,即如果用户不小心键入了错误的口令,服务器会将它映射为guest用户,而不出任何错误信息,这样用户会在不知情的情况下受到种种访问限制。
(2)用户映射。
全局参数username map用来控制用户映射,它允许管理员指定一个映射文件,该文件包含了在客户机和服务器间进行用户映射的信息,设置如下。
usermane map=/etc/samba/sabusers
用户映射经常用来在Windows和Fedora 6主机之间进行映射,因为用户可能在两个系统上拥有不同的账号;另一个用途是将几个用户映射为一个用户,以使他们能更方便地共享文件。
当Fedora 6与其他客户机相连时,指定一个文件,文件中包含来自客户机的用户名与Fedora 6系统用户名之间的映射。此文件的格式为每行一个映射,如下所示:
Linux username=client username
例如,设定Fedora 6中的root账号与客户机的admin和administrator账号相映射。
root=admin administrator
这样客户机的用户是admin或administrator时,就被转换成root账号进行登录。这里设定为如下所示:
usermane map=/etc/samba/sabusers
在打开共享后,用户可以在comment参数中对其进行相应的简短描述,可以是任意字符,例如:
comment=home directories
用户可以在path参数中设定提供共享服务的路径,可以用%u、%m这样的宏来代替路径里的Fedora 6用户和客户机的NetBOIS名。
例如,如果用户不打算用home段作为客户的共享,而是在/home/share/下为每个Fedora 6用户以他的用户名建立目录作为用户的共享目录,这样path就可以写成:
path=/home/share/%u
这样用户在连接到共享时,具体的路径就会被他的用户名代替。不过,要注意的是这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。
同样,如果用户不是以账号来划分目录,而是以客户机来划分,为网络上每台可以访问Samba的机器都各自建立以它的NetBIOS名来命名的路径,作为不同机器的共享资源,可以这样写:
path=/home/share/%m
用户在设定共享路径以后,可以在writeable参数中指定共享路径是否可写,即用户是否有写入自己目录的权限,值为yes和no。
writeable=yes
用户可以在参数browseable中指定共享是否可以浏览,默认为yes,即:
browseable=yes
用户还可以在参数available中设置共享资源是否可用,默认为yes,即可用。设置为no的话,则关闭该资源的共享服务,用户将无法连接到该资源上。
available=yes
在OS level参数中,用户可以设置操作系统级别,值得注意的是,在同Windows系统相连时,如果要把samba设置为域服务器,浏览器的OS级别一定要高于Windows。
os level=65
前文中多次提到“宏”,这里列举一下配置文件中“宏”的作用。配置文件中允许宏替换,请注意大小写。
· %S:当前服务或共享的名称。
· %P:当前服务或共享的目录。
· %u:当前服务或共享使用的用户名。
· %g:%u 所在组的名称。
· %U:当前会话使用的用户名,即客户机所期望的用户名,可以和客户机真正得到的用户名不同。
· %G:%U所在组的名称。
· %H:%u的私人目录(主目录)。
· %v:Samba 的版本号。
· %h:Samba 服务器的NetBIOS名。
· %m:客户机的NetBIOS主机名(Windows 9x的机器名)。
· %L:服务器的NetBIOS名。
· %N:服务器名。
· %M:客户机的Internet主机名。
· %I:客户机的IP地址。
· %T:当前的日期和时间。
· %d:当前服务器进程ID。
· %a:远程客户机的体系结构。目前只能识别Windows,并且不是100%可靠,其他系统被标示为UNKNOWN。