首页 > 代码库 > Linux -- Samba行为控制
Linux -- Samba行为控制
行为控制(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
2.用户访问权限控制
用户能否访问某个共享资源由以下几个参数决定。
(1)public:设置是否允许匿名用户访问共享资源,当public = yes时表示允许,public =
no时表示不允许,默认为public=no。在Samba服务器中guest ok与public有相同的功能。当在一个共享资源参数中guest
ok与public参数发生冲突时,在后面的参数优先。如下面的例子中就不允许匿名用户访问smbtest。
[smbtest] comment = This is smb test path = /test guest ok = yes public = no
(2)valid
users:设置允许访问共享资源的用户或组(如果使用组时,需要在组名称前加@)。设置该参数后,未指定的所有用户将不能访问共享资源。
[smbtest] comment = This is smb test path = /test #允许tonyzhang用户访问该共享目录。 valid users = tonyzhang #允许sales组的所有用户访问该共享目录。 valid users = @sales [smbtest1] comment = This is smb test1 path = /test1 #不允许tonyzhang用户访问该共享目录。 invalid users = tonyzhang #不允许sales组的所有用户访问该共享目录。 invalid users = @sales
(3)wide links:设置是否允许共享外连接。如某共享资源内有个连接指向非共享资源的文件或目录,如果设置wide links =
yes将使该连接可用,如果设置wide links = no将使该连接不可用。
行为控制(2)
3.用户读写权限控制
用户在允许访问某共享资源的情况下,可以通过Samba对共享资源读写权限进行控制。在Windows中对一个位于NTFS分区中的共享文件夹有怎样的操作权限,由该文件夹的NTFS权限及共享权限共同起作用,两个权限中更严格的优先,如某用户对一个共享文件夹的NTFS权限为完全控制,共享权限为只读,那么这个用户通过网络访问该共享文件夹时的权限为只读。在Samba服务器也是这样,通过网络访问Samba服务器资源时,能否读写是通过文件或目录自身在文件系统中的权限与该文件或目录在Samba服务器配置的共同决定。如果希望某用户可以读或者写Samba服务的共享资源,首先要正确配置该用户对文件或目录自身文件系统中的权限。在图6-30所示的例子中,从Samba服务的配置来看,客户端使用tonyzhang用户通过认证后,应该是可以访问smbtest的共享目录的,但是请注意test目录自身文件系统中的权限中其他用户是无读取权限的。通过测试会发现tonyzhang用户无法访问这个共享目录。
配置目录自身权限以配合Samba服务器读写权限时可以直接使用chmod配置目录其他用户权限或通过ACL配置指定用户或组权限。通过chmod配置比较方便,但不够精细,因为所有通过Samba服务器访问的客户端Linux都会认为是其他用户,通过ACL配置时相对复杂一些,但对权限控制更加精细,所以推荐使用ACL配置。
用户能否写某个共享资源由以下几个参数决定(如配置为可写时要注意SELinux的配置,具体见6.3.1节)。
(1)readonly:是否将共享资源设置为只读。当readonly = yes时表示只读共享,readonly= no时表示不使用只读方式共享。
(2)read list:设置只读的用户或组(如果使用组时,需要在组名称前加@)。
[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.conf
include:在[global]标签下入如下参数。
[global] include = /etc/samba/%U.smb.conf
config 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.conf
include:在[global]标签下入如下参数。
[global] include = /etc/samba/%G.smb.conf
5.上传文件类型控制
在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时,将允许已经存在与共享资源的含有特定关键字的文件或目录,这也是默认值。
参考: http://book.51cto.com/art/201108/282444.htm
本文出自 “--” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1552802
Linux -- Samba行为控制