Samba访问控制(高级权限设置)

Samba的访问控制通过hosts allow、hosts deny两个参数实现。

在Samba中使用hosts allow、hosts deny参数时,该参数可以出现在全局配置部分,用于允许或拒绝可连接到Samba服务器的客户端,也可以出现在具体的共享目录配置中用于允许或拒绝可访问该目录的客户端。如果在全局配置部分的hosts allow、hosts deny优先级与具体共享目录的配置发生冲突时会怎么样呢?通过Samba的工作过程不难看出Samba客户端首先要可以连接到Samba服务器,才能访问其共享目录,所有全局配置部分的hosts allow、hosts deny优先级与具体共享目录的配置发生冲突时使用以下规则:

1,全局配置中hosts deny指定客户端,此时无法访问Samba服务器任何共享目录;
2,全局配置中hosts allow指定客户端,分以下几种情况
(1):如具体共享目录中只指定了hosts deny且与全局配置不冲突时,客户端可以访问具体共享目录。
(2):如具体共享目录中只指定了hosts allow且是全局配置的子集时,只有具体共享目录中指定的客户端可以访问。
(3):如具体共享目录中既指定了hosts allow又指定了hosts deny时,会优先考虑hosts allow,其实再考虑hosts deny,因为在Samba中hosts allow比hosts deny优先级要高

以下是一些范例。

1,使用IP地址控制

#不允许IP地址为192.168.0.20的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts deny = 192.168.0.20

#只允许IP地址为192.168.0.25的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts allow = 192.168.0.25

#下例中,IP地址为192.168.0.99的客户端是可以访问Samba服务器上的smbtest目录的
#因为在Samba中hosts allow比hosts deny优先级要高
[smbtest]
   path = /test
   hosts allow = 192.168.0.99
   hosts deny = 192.168.0.99

2,使用网段控制

#不允许192.168.0.0/24所有客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts deny = 192.168.0.

#只允许192.168.0.0/24所有客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts allow = 192.168.0.

#不允许192.168.0.0/24但不包括192.168.0.99的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts deny = 192.168.0.
   hosts allow = 192.168.0.99

#只允许192.168.0.0/24但不包括192.168.0.99的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts allow = 192.168.0. EXCEPT 192.168.0.99

3,使用域名控制

#不允许FQDN为client1.example.com的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts deny = client1.example.com.

#只允许example.com域的所有客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts allow = .example.com

#不允许example.com区域但不包括192.168.0.99的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts deny = .example.com
   hosts allow = 192.168.0.99

#只允许example.com但不包括IP地址为192.168.0.99的客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts allow = .example.com EXCEPT 192.168.0.99

4,使用通配符控制
在hosts allow及hosts deny时,可通过使用通配符代表特定客户端集。可以使用的通配符主要有:ALL表示所有客户端,*表示任意个字符,?表示一个字符,LOCAL表示本地计算机。

#拒绝除了192.168.0.99及192.168.0.100以外的所有客户端访问Samba服务器上的smbtest目录
[smbtest]
   path = /test
   hosts deny = ALL
   #多个匹配条件需用空格分隔。
   hosts allow = 192.168.0.99 192.168.0.100

补充内容:
单向用户映射
force user选项可以将共享目录的用户直接映射为Linux系统用户,而无须是Samba内建立的用户。

#下例中,在Win系统上新建的任何文件/目录,属主都会变成ndsadmin
#Win系统里任何用户新建的文件,在Linux系统中文件的属主都会变成ndsadmin
[id]
   comment = data_id
   path = /data/id
   browseable = yes
   writable = yes
   public = yes
   force user = ndsadmin
   force create mode = 0775
   force directory mode = 0775
   force security mode = 0775
   hosts allow = 192.168.32.150
   hosts deny = ALL

[chenmingfei]
   comment = chenmingfei_home
   browseable = yes
   writable = yes
   path = /data/users/chenmingfei
   public = yes
   valid users = chenmingfei   #这里的valid users应该是指samba内建用户,但未验证

双向用户映射
用户要将cc和yl这两个Windows账户与Linux系统用户账户userl和user2分别创建用户映射关系。首先,在smb.conf文件中添加“username map = /etc/samba/smbusers”一行,然后在/etc/samba/smbusers建立映射关系。

发表评论

您的电子邮箱地址不会被公开。