Samba配置
Samba服务安装完成后,需要修改Samba服务配置文件以满足使用需求。Samba主配置文件为smb.conf,位于/etc/samba目录下。Samba服务配置基本流程如图6-2所示。
常规配置(1)
1.Samba服务启动、暂停
Samba属于System V服务,其启动、暂停相关命令如下。
service smb start #启动 service smb stop #停止 service smb restart #重新启动 service smb reload #重新加载 service smb status #查看当前启动状态
2.Samba服务自动加载
设置Samba服务下一次开机运行状态可通过以下命令或使用ntsysv命令在服务设置界面中配置,如图6-3所示。
- chkconfig smb on #在运行级别
2、3、4、5上设置为自动运行。 - chkconfig smb off #在运行
级别2、3、4、5上设置为不自动运行。 - chkconfig smb --level 35 on #在运行级别3、5上设置为自动运行。
- chkconfig smb --level 35 off #在运行级别
3、5上设置为不自动运行。
3.修改SELinux状态
在Samba服务器中并不是所有的操作都会受到SELinux的影响,Samba所涉及的SELinux配置参数比较多,不过在smb.conf文件中通过注释的方式已对其中一部分进行了说明(如图6-4所示)。下面列出的是所有与Samba服务器有关的SELinux配置。
setsebool -P samba_domain_controller on setsebool -P samba_enable_home_dirs on ① setsebool -P samba_export_all_ro on ② setsebool -P samba_export_all_rw on ③ chcon -R -t samba_share_t 欲共享的本地目录名 ④ setsebool -P smbd_disable_trans=1 ⑤ chcon -R -t samba_share_t /bin/mount ⑤ chcon -R -t samba_share_t /bin/umount ⑤ setsebool -P swat_disable_trans=1 ⑥ setsebool -P smbd_disable_trans=1 ⑦
其中各行含义如下。
①:如果不需在Samba使用默认共享的用户家目录,可不必执行。
②:如果在整个Samba所有的共享目录均为只读时运行。
③:如果在整个Samba所有的共享目录有可写时运行。
④:如果在整个Samba所有共享目录中有允许建立目录时运行,在执行chcon命令时一定要小心,如果修改了根目录安全上下文RHEL5.x在重新启动后将无法登录。
⑤:如果需要共享光驱时使用运行。
⑥:如果需要使用时SWAT运行。
⑦:如果需要使用PAM模块进行访问控制时运行。
4.配置文件结构1
Samba服务器功能非常丰富,有很多功能Windows在默认情况都无法实现,因此其主配置文件(/etc/samba/smb.conf)中内容自然也非常庞大。在配置参数时有以下几个共性。
(1)对参数进行配置时基本都采用"参数 = 值"的方式,如参数有多个值时,多个值之间用空格分隔。
(2)当可以使用用户和组作为参数值时,值为组时需在组名前加@。
(3)以";"或"#"开始的是注释行(在执行时将被忽略)。
(4)方括号标识表示为标志,比如[global]为全局配置标识。
(5)一般当全局配置与某个共享资源配置发生冲突时,共享资源配置优先。
(6)关键字对大小写不敏感。
在Samba服务安装完成后默认情况下就有超过280行的内容,这些内容主要由以下几部分组成。
(1)Global
Settings:以[global]标识开始(默认在第57行)。该部分主要涉及Samba服务的全局配置,比如用户映射、引用子配置文件等,在该标签内的配置会影响整个Samba服务器。
username map:指定用于定义用户映射关系的文件(具体见6.3.2节)。
use
sendfile:当客户端访问Samba服务器读取文件时,默认情况首先由kernel读取数据,然后将数据传送给Samba服务,再将Samba服务回传给kernel,最后再由kernel发送给客户端。当use
sendfile=yes时,将直接由kernel读取数据后发送给客户端,大大提高了效率。该参数默认为use sendfile=no。
max
connections:设置同时允许访问Samba服务器或Samba服务器某一共享资源的客户端数量,该参数放在此部分是一个全局配置,对Samba服务器所有共享资源有效,如果该参数位于定义某共享资源的标识内时,只对这一个共享资源有效。如果全局设置与某一共享资源在该参数发生冲突时,共享资源内的该参数值优先。在下面的例子中smbtest同时允许10个客户端连接,而smbtest1则同时允许20个客户端连接。
[global] workgroup = MYGROUP server string = Samba Server max connections = 10 [smbtest] #该共享资源同时客户端的访问数由上面的 max connections决定。 comment = This is smb test path = /test [smbtest1] #该共享资源同时客户端的访问数由下面的max connections决定。 comment = This is smb test1 path = /test1 max connections = 20
常规配置(2)
(2)Network Related Options:该部分包括Samba服务器网络相关配置,如图6-5所示。
workgroup:设置Samba服务器所在的工作组或所在域的名称,默认设置工作组名称为"MYGROUP"。
server string:设置Samba服务器的说明文字,用于描述Samba服务器,其默认值为Samba Server Version
%v,其中%v是Samba服务器预设变量,表示当前Samba版本。由于目前不少Samba发行版本中存在一些已知的安全漏洞,所以不推荐使用该变量让客户端访问时获得有关Samba版本的信息。
netbios name:设置Samba服务器的NetBIOS名。
interface:设置允许Samba服务侦听的本地网络接口。比如Samba服务器有多个网络接口时可通过此参数指定只接受指定接口的SMB/CIFS请求,该参数默认没有启用(被注释)。在编辑该参数时当使用interface时推荐保留lo(表示本地回环地址),在指定网络接口时,除了通过IP地址指定外,也可直接通过网络接口名。如图6-5所示内容中的eth0就表示侦听该网络接口接受到的请求,不考虑该网络接口的IP地址及请求客户端的IP地址是多少。
bind interfaces only:当bind interfaces
only=yes时,interface只对Samba服务器提供文件服务有效,对浏览服务的广播无效,也就是说Windows客户端可以在网上邻居中查看到Samba服务器,但不能访问。该参数默认为bind
interfaces only =no。
hosts allow:指定允许连接到Samba服务器客户端。该参数默认没有启用。当然对应的还有hosts
deny参数指定拒绝连接到Samba服务器客户端,具体参见6.3.4节。
(3)Logging Options:该部分包括Samba服务器日志相关配置,如图6-6所示。
log
file:定义Samba日志文件,其注释中的默认值是为每一个与服务器连接的客户端定义一个单独的日志文件。此参数可根据Samba服务器预设变量灵活设置,具体见6.3.5节。
log level:设置日志记录等级从0到10。等级0时日志记录最简单,等级为10时日志记录最详细。
max log size:设置最大的日志文件的大小(单位为KB)。
注意:在Standalone Server Options、Domain Members Options、Domain Controller
Options三部分均需要配置合适的security(安全级别,用于配置Samba服务器的认证方式)、passdb
backend用户密码存放方式,其中security可用参数包括share(可匿名方式访问Samba服务器共享资源,该方式只对Windows客户端有效,一般不推荐使用)、user(访问Samba服务器共享资源需要输入用户密码,认证用户来源为本机)、server(访问Samba服务器共享资源需要输入用户密码,认证用户来源为另一台Samba服务器或Windows服务器)、domain(如果Samba服务器在一个基于Windows
NT
平台的Windows域中,访问共享资源需要输入用户密码,认证用户来源为Windows域)ads(如果Samba服务器在一个基于Windows200x平台的Windows活动目录中,访问共享资源需要输入用户密码,认证用户来源为Windows活动目录)。passdb
backend常见可用参数包括smbpasswd(该方式是使用Samba提供的工具smbpasswd来给系统用户设置一个Samba密码,客户端就用这个密码来访问Samba的资源,如果使用此方式还需加一个smb
passwd file =
/etc/samba/smbpasswd用于指定保存用户密码文件,该文件需要手动建立,不推荐使用这种方法)、tdbsam(该方式则是使用一个数据库文件来建立用户数据库。数据库文件名为passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd来建立Samba用户)、ldapsam(该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务)、mysql(该方式则是将Samba服务器用户密码估计到mysql数据库中)。Standalone
Server Options、Domain Members Options、Domain Controller
Options三部分均与Samba的认证方式及工作角色相关,在下面只简单说明参数的含意。
(4)Standalone Server
Options:使用独立服务器作为Samba服务器认证用户来源,也就是当访问Samba服务器时输入的用户密码的验证工作由Samba服务器本机系统内置账户完成,如图6-7所示。
security:在此部分中该参数只能设置为share(不推荐)、user或server(不推荐),当该参数设置为share时,客户端连接到Samba服务器可不需要输入用户密码,但能不能访问某个共享资源还要根据共享资源中是否允许匿名用户访问决定。
passdb backend:默认为tdbsam,一般不用修改,除非想使用老版本Samba服务器的smbpasswd文件方式。
常规配置(3)
(5) Domain Members Options:将Samba服务器加入Windows NT平台域或Windows 2000
Server/Windows Server 2003活动目录中,也就是当访问Samba服务器时输入的用户密码的验证工作由域控制器完成,如图6-8所示。
① security:在此部分中该参数只能设置为domain、ads。
② passdb backend:默认为tdbsam,一般不用修改。
③ password server:指定进行身份验证的域控制器IP地址或主机名。
(6)Domain Controller Options:将Samba服务器配置为一台域控制器,如图6-9所示。
security:在此部分中该参数只能设置为user。
passdb backend:默认为tdbsam,一般不用修改。
domain master:让Samba作为主域控制器(PDC),在此部分此参数必须为yes。
提示:主域控制器(PDC)是一个Windows NT平台的概念,在Windows 2000 Server(或Windows Server
2003)活动目录中由活动目录是名为PDC模拟器的操作主机代替,其主要功能包括管理来自客户端(Windows
NT/95/98)的密码更改、最小化密码变化的复制等待时间、同步整个域内所有域控制器上的时间、收集分发活动目录中主浏览服务器列表信息。
domain logons:允许旧的Windows客户端提交验证信息,只网络环境中在Windows 9x客户端,此参数必须为yes。
logon script:当用户登录到域时执行的启动脚本(相当于Windows组策略中用户开机脚本)。
logon path:当用户登录到域后的配置文件存放位置,用这个来初始化工作环境(相当于Windows中漫游配置文件)。
logon script:域中客户端主机的开机启动脚本(相当于Windows组策略中计算机开机脚本)。
add user
script:指定Windows与Linux中用户信息同步脚本,当Windows域中新建用户后指定脚本会将该用户的信息复制到Linux中。
add group
script:指定Windows与Linux中组信息同步脚本,当Windows域中新建组后指定脚本会将该组信息复制到Linux中。
add machine
script:指定Windows与Linux中计算机信息同步脚本,当Windows域中新加入域中后指定脚本后会将该计算机信息复制到Linux中。
delete user
script:指定Windows与Linux中用户信息同步脚本,当Windows域中删除用户后指定脚本后会将该用户的信息复制到Linux中。
delete user from group
script:指定Windows与Linux中用户信息同步脚本,当Windows域中将用户从组中删除后指定脚本会将该信息复制到Linux中。
delete group
script:指定Windows与Linux中用户信息同步脚本,当Windows域中删除组后指定脚本会将该组的信息复制到Linux中。
(7)Browser Control Options:配置浏览服务器,如图6-10所示。
local master:是否允许Samba服务器作为主浏览服务器。
os level:该数字越大被选举成为主浏览服务器的可能性越高。
preferred master:当yes时被选为主浏览服务器的可能性越高。
常规配置(4)
提示:主浏览服务器功能主要是实现Windows中的网上邻居。计算机浏览服务是一系列分布式的含有可用的网络资源列表,这些列表分布在一些计算机上,提出浏览请求的计算机充当浏览工作站,而提供浏览列表的计算机充当浏览服务器。当运行Windows中网上邻居时,将会显示域和计算机的显示列表。该操作通过计算机从同一子网中的主浏览服务器获得浏览列表副本完成。网络上的大部分计算机均视为非浏览器,但运行浏览服务的计算机可作为每个子网潜在的浏览器。对于在网络上作为维护浏览列表副本的计算机,理论上来讲,网络上的每台计算机都可以作为主浏览服务器提供浏览列表,但这样一来会造成浏览工作站提出查询请求时,众多计算机同时向浏览工作站提供浏览列表,产生过多的网络流量,降低了网络的性能,同时也会增加CPU的负担。为了减轻网络和计算机CPU的负担,同时为了方便对资源列表进行管理,就需要对提供资源浏览服务的计算机定义各种角色,以便明确分工,各负其责,尽量减少重复无益的流量产生。浏览服务器有域主浏览服务器、主浏览服务器、备份浏览服务器、潜在浏览服务器、非浏览服务器之分。选举主浏览服务器时,主域控制器(PDC)有主浏览器的优先权。但当一个计算机不能定位主浏览器,或具备更优先条件的计算机开机,或主域控制器启动时,选举过程可以简化为如下几步。
(1)选举是通过发广播来实现的,如果哪个计算机的选举条件比它收到的报文要好,则它将广播自己的选举条件,收到别人的选举条件后每个计算机根据自己在域中的角色延迟不等的时间后再做反应,这样能减少选举条件较差的计算机发送选举报文。
(2)当一个计算机选举成为主浏览器并且它的浏览列表是空时,它将广播一个请求通知的报文,强迫所有的计算机必须在30s内给予答复,这个30s的时间是为了防止服务器过载或报文丢失。
(3)除了承担主浏览器和备份浏览器任务的计算机外,其他计算机将向主浏览器周期性地发布通知,告知自己是可利用的资源。这个时间开始是1min、2min、4min、8min,以后就是每隔12min一次。
(4)如果某个计算机关机了,主浏览器连续3个周期也就是36min没有收到它的消息,将认定它不可用,并从浏览列表中删掉它。但是它还留在备份浏览器的计算机里,备份浏览器每隔15min呼叫主浏览器一次以获得更新的网络资源列表,也就是说不可用的资源最多要等到36+15=51min后才会从网上彻底消失。这就是为什么有的计算机改了名,但旧名字依旧留在网上一段时间的原因。
(8)Name Resolution:该部分包括Samba服务器名称解析方法相关配置(如图6-11所示),在这部分中可以设置的参数如下。
提示:WINS(Windows Internet Name
Server,Windows网络名称服务)是由微软开发的一种名字解析协议,为NetBIOS名字提供名字注册、更新、释放、转换及解析等服务。
wins support:设置nmbd进程支持WINS服务器。
wins server:设置WINS服务器IP地址。
wins proxy:Samba服务器是否可作为WINS 代理。
提示:WINS代理就是为了解决跨网段的非WINS客户端与WINS客户端的NetBIOS名称解析问题。如图6-12所示所示内容中WINS代理在接收到非WINS客户端NetBIOS名称解析请求后,以单播的方式帮助非WINS客户端进行NetBIOS名称解析。当然WINS代理首先必须是一台WINS客户端。
dns proxy:Samba服务器是否在无法联系WINS服务器时通过DNS去解析主机的NetBIOS名。
name cache timeout:设置Samba服务器解析主机名缓存的保存时间,单位是秒。该参数默认值为name cache
timeout=660。
name resolve
order:设置Samba服务器名称解析的方法及顺序。该参数可设置为lmhosts(使用/etc/samba/lmhosts文件对NetBIOS名称与IP地址对应关系进行解析,此方式是用于解析NetBIOS名)、host(使用主机名方式解析IP地址,该方式可使用NIS、DNS及/etc/hosts文件3种方法完成解析,这3种方式的使用顺序是在/etc
/nsswitch.conf文件中hosts参数定义的)、wins(使用WINS服务器进行名称解析,使用此方式时wins
server参数必须已指明WINS服务器的IP地址)、bcast(使用广播方式进行名称解析),也可以同时指定多个值。该参数默认为name resolve
order:lmhosts host wins
bcast,也就说Samba服务器名称解析的顺序为lmhosts、host、wins、bcast,在一种方式解析不到IP地址时,自动选择下一种。
提示:当在Samba服务器某个参数定义的计算机名是fileserver,那按默认的名称解析顺序,会先查看lmhosts文件有没有对应的NetBIOS名,如果没有再通过主机名方式解析。这里要注意了fileserver并不是一个合法的FQDN,Samba服务器会根据/etc/resolve.conf文件中search参数的定义将fileserver补全为一个合法的FQDN。当在Samba服务器某个参数定义的计算机名是fileserver.example.com,那按默认的名称解析顺序,会先查看lmhosts文件有没有对应的NetBIOS名,这时会将一个FQDN的最左边作为NetBIOS名进行解析,即fileserver。
(9)Printing Options:该部分包括Samba服务器打印机相关配置,如图6-13所示,在这部分中可以设置的参数如下。
常规配置(5)
load printers:是否自动共享打印机,而不根据[printer]标签内配置。
cups options:是否自动共享打印机,而不根据[printer]标签内配置。
printcap name:设置获取打印机描述信息的文件位置,该参数默认设置为 /etc /printcapFile。
(10)Filesystem
Options:该部分包括Samba服务器如何保留从Windows客户端复制或移动到Samba服务器共享目录文件的Windows文件属性的相关配置,如图6-14所示,在这部分中可以设置的参数如下。
map archive:当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的存档属性。当map
archive =yes时,将保留;当map archive =no时,将不保留。默认为map archive =yes。不过如果store dos
attributes=yes时,Samba服务器将忽略该参数的设置。
map hidden:当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的隐藏文件属性。当map
hidden =yes时,将保留;当map hidden =no时,将不保留。该参数没有默认值,也就是在不设置该参数时,是否保留隐藏文件属性根据store
dos attributes的值决定。
map read only:当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的只读属性。当map
read only=yes时,将保留;当map read only=no时,将不保留。默认为map read only=yes。不过如果store dos
attributes=yes时,Samba服务器将忽略该参数的设置。
map system:当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的系统文件属性。当map
system =yes时,将保留;当map system =no时,将不保留。默认为map system =no。不过如果store dos
attributes=yes时,Samba服务器将忽略该参数的设置。
store dos
attributes:当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的相关属性(只读文件、系统文件、隐藏文件、存档属性)。当store
dos attributes =yes时,将保留;当store dos attributes =no时,将不保留。默认为store dos attributes
=no。
Share
Definitons:该部分主要涉及Samba服务器需要共享的资源,如图6-15所示。这部分中默认已设置用户家目录(从[home]标识开始)、打印机共享(从[printers]标识开始)、登录脚本及登录域中有关用户家目录的配置,用户自定义配置信息也在此部分定义。
在编辑Samba主配置文件时smb.conf文件中并不要求参数缩进,但推荐在编写时对参数进行缩进,这样便于以后阅读及修改。对于用户自定义的共享资源配置内容放在smb.conf文件的最尾,这样也是为了便于以后阅读及修改。
5.共享目录
Samba服务器的功能主要是实现资源共享,在全局配置中的内容主要是针对Samba服务自身相关状态。在这些工作完成后就需要配置希望共享的资源,这部分配置参数非常多,在本节中只是简单配置一个共享实现对一个目录资源的共享,其他有关参数及其作用将在后续章节中讲述。
Samba配置共享目录的语法如下。
[共享名] ① comment = 描述 ② path = 本地目录路径 ③
其参数含义如下。
①:客户端访问Samba服务器时浏览到的目录名,该名称不要求与本地目录名相同,但在当前Samba服务器必须惟一。
②:客户端访问Samba服务器时浏览到的目录描述信息,该参数不是必须的。
③:需要共享的本地目录,必须使用绝对路径。
下面通过一个例子来看一下使用Samba服务器共享目录的方法。
(1)在根目录下建立一个名为test的目录。
(2)在文件/etc/samba/smb.conf尾部加入如下内容。
[smbtest] comment = This is smb test path = /test
(3) 使用testparm命令测试smb.conf配置是否正确,如果配置正确应出现如图6-16提示。
(4)使用如下命令修改SELinux状态。
chcon -R -t samba_share_t /test 常规配置(6) 6.共享打印机 在共享打印机前,首先需要通过以下命令确定所使用的打印机是否被Linux系统支持。 #普通打印口打印机。 echo "Test Print" > /dev/lp0 #USB接口打印机。 echo "Test Print" > /dev/usb/lp0 在使用上述命令后,打印机如果有回应就说明该打印机被Linux系统支持。接下来需要使用打印工具配置打印机。CUPS(Common Unix Printing System)是Linux系统中目前比较流行的打印工具。CUPS配置方法如下。 (1)修改/etc/cups/cupsd.conf文件,内容如下(以下内容主要是对CUPS管理程序访问控制的配置,该部分与Apache中访问控制配置方法相同,具体见8.4.5节)。 <Location /> Order Deny,Allow Deny From All Allow From 127.0.0.1 Allow From 192.168.0.0/24 </Location> Listen 0.0.0.0:631 (2)为了Windows客户端可以将打印内容传送过来,需要修改以下两个文件的内容。 application/octet-stream application/vnd.cups-raw 0 - /etc/cups/mime.types。 application/octet-stream (3)启动CUPS服务,并设置为下次启动自动加载。 service cups restart chkconfig cups on (4)通过浏览器访问"http://localhost:631",并使用如下方法配置打印机。 选择"Administration"→"Add Printers",如图6-17所示。
常规配置(7)
在输入root用户名和密码后,打印机添加完成,如图6-21所示。
(5)在Samba的配置文件中已默认将打印机共享,只需修改如下内容即可。
[global] load printers = yes cups options =raw printcap name = /etc/printcap printing = cups [printers] comment = All Printers #指定打印队列存放目录。 path = /var/spool/samba #指定该共享为一个打印设备。 printable = yes browsable = yes #不允许匿名用户使用。 guest ok = no
在上述配置完成后Windows客户端已可以访问所有已安装的打印机了,但Windows客户端在访问时还需要安装相应的打印机驱动程序(如果使用Windows共享的打印机在共享后,Windows客户端在访问时可不需要安装驱动程序,因为Windows在共享打印机时默认已为客户端提供了Windows
2000/XP所需的驱动程序)。CUPS中可通过如下配置实现类似Windows共享打印机的功能。
(1)下载cups-samba(下载地址:http://ftp.easysw.com/pub/cups/windows/cups-samba-5.0rc3.tar .gz)程序后,使用如下命令解压、安装。
tar -xvzf cups-samba-5.0rc3.tar.gz cd cups-samba-5.0rc3 ./cups-samba.install
(2)在Windows XP中将%systemroot%\Driver
Cache\i386\driver.cab文件中的"ps5ui.dll"、"pscript5.dll"、"pscript.hlp"、"pscript.ntf"复制到"/usr/share/cups/drivers"目录中。
(3)修改Samba配置文件,内容如下。
[print$] comment = Printer drivers #指定提供给Windows客户端所需打印机驱动程序的目录。 path = /etc/samba/drivers browseable = yes readonly = yes #指定该目录管理员,该用户必须是一个可以访问Samba的用户(Samba用户认证 #具体见6.3.2)。 write list = tonyzhang
(4)使用如下命令建立所需目录及修改目录权限。
mkdir /etc/samba/drivers chown tonyzhang /etc/samba/drivers
(5)使用如下命令修改SELinux状态。
chcon -R -t samba_share_t /test
(6)使用如下命令生成Windows客户端所需打印机驱动程序(在生成过程中会要求输入指定用户的密码,本章中为tonyzhang,如图6-22所示)。
cupsaddsmb -H localhost -U tonyzhang -a -v
7)使用如下命令重新启动CUPS及Samba服务。
service cups restart service smb restart
在完成上述配置后,Windows访问Samba所在主机时会显示共享的打印机,直接双击即可自动安装驱动程序。
7.共享光驱
共享光驱采用以下方法。
- [cdrom]
- comment = this is cdrom
- path = /mnt/cdrom
- root preexec = /bin/mount -t iso9660 /
dev/cdrom /mnt/cdrom ① - root postexec = /bin/umount /mnt/cdrom
②
其参数含义如下。
①:连接时用root身份运行mount命令。
②:断开时用root身份运行umount命令。
参考: http://book.51cto.com/art/201108/282429.htm