行为控制(1)
通过在6.3.2节中对用户认证来源的配置后,Samba服务器的认证用户来源已建立完成,接下来很自然的就需要根据认证用户来源获得用户信息,对特定用户使用共享资源的权限进行配置。
在Windows中共享文件夹可以针对不同的用户或组进行权限控制,在Samba服务器也同样有相应的功能,而且有很多Samba服务器权限控制的功能Windows在默认情况下无法实现。
注意:在使用了Samba用户映射功能后,所有涉及用户的参数,必须使用系统用户名。比如通过/etc/samba/smbusers文件将用户tonyzhang映射为tony后,在用户权限设置时还是需要使用tonyzhang。 1.用户浏览权限控制
通过browseable参数可控制用户浏览权限,当browseable=yes时,将显示共享资源,当browseable=no时,将隐藏共享资源,默认为browseable=yes。共享资源被隐藏后只是在浏览Samba服务器时不可见,与可不可以访问该共享资源无关。如下面的例子中smbtest设置为隐藏共享,通过Windows客户端或smbclient -L浏览时查看不到(如图6-28所示),但还是可以通过直接输入共享资源名称访问,如图6-29所示(此功能与Windows中创建共享文件夹时在共享名后加$功能一样)。
[smbtest] comment = This is smb test path = /test browseable = no
[smbtest] comment = This is smb test path = /test #允许tonyzhang及tomyang用户访问该共享目录时只读。 read list = tonyzhang tomyang #允许sales组的所有用户访问该共享时只读。 read list = @sales(3)writable:是否允许共享资源设置为可写。当writable = yes时表示可写,writable = no时表示不可写。
(4)write list:设置可写的用户或组(如果使用组时,需要在组名称前加@)。
[smbtest] comment = This is smb test path = /test #允许tonyzhang及tomyang用户访问该共享目录时可写。 write list = tonyzhang tomyang #允许sales组的所有用户访问该共享时可写。 write list = @sales(5)force user:指定通过Samba服务器访问共享资源建立的文件或目录时的拥用者。下面的例子中任何有写权限的用户在通过Samba服务器访问共享资源时,建立的文件或目录的拥有组均为tonyzhang。
[smbtest] comment = This is smb test path = /test force user = tonyzhang(6)group:指定通过Samba服务器访问共享资源建立的文件或目录时的拥用组。下面的例子中任何有写权限的用户在通过Samba服务器访问共享资源时,建立的文件或目录的拥有组均为sales。这个功能也可通过SGID实现。
[smbtest] comment = This is smb test path = /test readonly = no group = sales当readonly、read list、writable及write users在对某一共享资源的设置发生冲突时,使用以下规则。
(1) readonly、writeable发生冲突时,在后面的参数优先。如下面例子中所有用户对smbtest不可写。
[smbtest] comment = This is smb test path = /test readonly = yes writeable = no(2)readonly、write list发生冲突时,除write list指定用户可写外,其他用户只读。如下面例子中tonyzhang可写,其他用户只读。
[smbtest] comment = This is smb test path = /test readonly = yes write list = tonyzhang(3)read list、writable发生冲突时,除read list指定用户只读外,其他用户可写。如下面例子中tonyzhang只读,其他用户可写。
[smbtest] comment = This is smb test path = /test writable = yes read list = tonyzhang(4)read list、write list发生冲突时,write list优先。如下面例子中tonyzhang可写。
[smbtest] comment = This is smb test path = /test write list = yes read list = tonyzhang(5)writeable = no时,write list的配置无效。如下面例子中tonyzhang及tomyang不可写。
[smbtest] comment = This is smb test path = /test writeable = no write list = tonyzhang tomyang(6)同时配置writeable=yes、write list时writeable=yes无效。如下面例子中只有tonyzhang及tomyang可写。
[smbtest] comment = This is smb test path = /test writeable = yes write list = tonyzhang tomyang当writeable、write list及readonly同时出现在一个共享资源时,最后的结果可根据上面提到的几个规则来判定是否可写,下面来看一个综合的例子,在这个例子中假设/test及/test1的自身权限为777。
[smbtest] comment = This is smb test path = /test writeable = yes readonly = yes write list = tonyzhang tomyang [smbtest1] comment = This is smb test1 path = /test1 readonly = yes writeable = yes write list = @sales当以tonyzhang或tomyang身份访问smbtest时,是可写的。只有sales组的成员访问smbtest1时是可写。
行为控制(3) 4.使用子配置文件
在前面讲述过browseable可以实现类似于Windows隐藏共享的功能,但是如果将该参数配置为browseable=yes时,所有用户都无法浏览到,如果希望某个共享资源只允许特定的用户浏览,其他用户都无法浏览或访问时怎么办呢?Windows的共享在默认情况下没有这个功能(在微软网站下载一个免费工具Windows Server 2003 Access-based Enumeration后也可实现),Samba可以通过引用子配置文件的方法来实现。
下面来看两个引用子配置文件的例子。
(1)在Samba服务器有一个共享目录smbtest(/test的自身权限为777)希望用户tomyang可见可读可写,另一个共享目录smbtest1(/test1的自身权限为777)希望用户tonyzhang可见可读可写。通过子配置文件实现方法如下。
①:在/etc/samba下建立一个文本文件其名称为tomyang.smb.conf,在该文件中加入如下内容。
[smbtest] comment = This is smb test path = /test write list = tomyang②:在/etc/samba下建立一个文本文件其名称为tomyang.smb.conf,在该文件中加入如下内容。
[smbtest1] comment = This is smb test1 path = /test1 write list = tonyzhang③:引用子配置文件。在引用子配置文件时有两种方法:
config file:在[global]标签下入如下参数。
[global] config file = /etc/samba/%U.smb.confinclude:在[global]标签下入如下参数。
[global] include = /etc/samba/%U.smb.confconfig file和include的区别是:使用config file时,当以tomyang的身份访问Samba服务器,只能浏览到smbtest,其他在smb.conf中定义的共享资源都无法查看;当以tonyzhang的身份访问Samba服务器,只能浏览到smbtest1,其他在smb.conf中定义的共享资源都无法查看。使用include时,当以tomyang的身份访问Samba服务器,除了可以浏览到smbtest,其他在smb.conf中定义的共享资源也可以浏览到;当以tonyzhang的身份访问Samba服务器,除了可以浏览到smbtest1,其他在smb.conf中定义的共享资源也可以浏览到。
(2) 在Samba服务器有一个共享目录smbtest(/test的自身权限为777)希望初始组为sales的用户可见可读可写,另一个共享目录smbtest1(/test1的自身权限为777)希望初始组为hr的用户可见可读可写。通过子配置文件实现方法如下。
①:在/etc/samba下建立一个文本文件其名称为sales.smb.conf,在该文件中加入如下内容。
[smbtest] comment = This is smb test path = /test write list = @sales②:在/etc/samba下建立一个文本文件其名称为hr.smb.conf,在该文件中加入如下内容。
[smbtest1] comment = This is smb test1 path = /test1 write list = @hr③:引用子配置文件。在引用子配置文件时有两种方法。
config file:在[global]标签下入如下参数。
[global] config file = /etc/samba/%G.smb.confinclude:在[global]标签下入如下参数。
[global] include = /etc/samba/%G.smb.conf5.上传文件类型控制
在Windows Server 2003 R2之前,Windows无法阻止特定文件上传到文件服务器,而Samba服务器可以通过veto files参数阻止客户端上传含有特定关键字的文件或目录到Samba服务器共享资源。在参数值中可以使用*或?作为通配符,使用时必须通过/进行转义。当参数放在[global] 标签时,是一个全局配置,对Samba服务器所有共享资源有效,如果该参数位于定义某共享资源的标识内时,只对这一个共享资源有效。如果全局设置与某一共享资源在该参数发生冲突时,共享资源内的该参数值优先。在下面的例子中,客户端不允许在smbtest中上传含有root关键字的文件或目录,在smbtest1中则是不允许上传含有.exe或.bmp关键字的文件或目录。
[global] veto files = /*root*/ [smbtest] comment = This is smb test path = /test writable = yes [smbtest1] comment = This is smb test1 path = /test1 writable = yes veto files = /*.exe/*.bmp*/当配置veto files参数后,可以阻止客户端上传含有特定关键字的文件或目录到Samba服务器共享资源(可以通过hide files参数隐藏指定类型的文件,配置方法与veto files参数相同),但对于配置该参数之前已经存在与共享资源的含有特定关键字的文件或目录的共享资源,可以通过delete veto files参数处理,当delete veto files=yes时,所有满足veto files参数条件的文件或目录将被删除,当delete veto files=no时,将允许已经存在与共享资源的含有特定关键字的文件或目录,这也是默认值。