Samba高级服务器配置

1 Samba 高级服务器配置
上面偶说了下 samba 常规配置,这些已经可以使用企业内部资料通过网络共享并分配适当共享权限来管理共享目录,但这仅仅对于很多大型企业或安全要求高来说还是不能满足其需求,所以偶下面就来讲下samba 高级服务器配置让我们搭建samba 服务器功能更强大,管理更灵活,我们数据也更安全~
1.1 用户账号映射
前面已经说过,samba 的用户帐号信息是保存在smbpasswd 文件中,而且可以访问samba 服务器的帐号也必须对应一个同名的系统帐号。基于这一点,所以,对于一些hacker来说,只要知道samba 服务器samba 帐号,就等于是知道了Linux 系统帐号,只要crack 其samba帐号密码加以利用就可以攻击samba 服务器。所以我们要使用用户帐号映射这个功能来解决这个问题。
用户帐号映射这个功能需要建立一个帐号映射关系表,里面记录了samba 帐号和虚拟帐号的对应关系,客户端访问samba 服务器时就使用虚拟来登录。
1)编辑主配置文件/etc/samba/smb.conf
在global下添加一行字段username map = /etc/samba/smbusers 开启用户帐号映射功能
#
#======================= Global Settings =====================================
[global]
# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
workgroup = MYGROUP
# server string is the equivalent of the NT Description field
server string = Samba Server
username map = /etc/samba/smbusers
2)编辑/etc/samba/smbusers
smbusers 文件保存帐号映射关系,其有固定格式:
samba 帐号= 虚拟帐号(映射帐号)
vi /etc/samba/smbusrs
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
sale01 = salemaptest salemaptest2
保存--重新加载生效
帐号sale01就是我们上面建立的samba帐号(同时也是Linux 系统帐号),salemaptest及salemaptest2就是映射帐号名(虚拟帐号),帐号redking在我们访问共享目录时只要输入salemaptest及salemaptest2就可以成功访问了,但是实际上访问samba服务器的还是我们redking帐号,这样一来就解决了安全问题。
注意:强烈建议不要将samba用户的密码与本地系统用户的密码设置成一样,可以避免非法用户使用samba帐号登录系统非法破坏。              
1.2 客户端访问控制
对于samba服务器的安全性,我们已经说过可以使用valid users字段去实现用户访问控制,但是如果企业庞大,存在大量用户的话,这种方法操作起来就显得比较麻烦,比如samba服务器共享出一个目录来访问,但是要禁止某个IP子网或某个域的客户端访问此资源,这样的情况使用valid users字段就无法实现客户端访问控制。
下面我们就讲下使用hosts allow和hosts deny两个字段来实现该功能。而用好这两个字段的关键在于熟悉和清楚它们的使用方法和作用范围。
hosts allow 和hosts deny 的使用方法:
1)hosts allow 和hosts deny 字段的使用
hosts allow 字段定义允许访问的客户端
hosts deny 字段定义禁止访问的客户端
2)使用IP地址进行限制
比如公司内部samba服务器上共享了一个目录sales,这个目录是存放销售部的共享目录,公司规定192.168.0.0/24 这个网段的IP地址禁止访问此sales共享目录,但是其中192.168.0.24这个IP 地址可以访问。
先将安全级别模式由user改为share。
这里我们添加hosts deny 和hosts allow 字段
hosts deny = 192.168.0. 表示禁止所有来自 192.168.0.0/24 网段的IP 地址访问
hosts allow = 192.168.0.24 表示允许 192.168.0.24 这个IP 地址访问
当 host deny 和hosts allow 字段同时出现并定义的内容相互冲突时,hosts allow 优先。现在设置的意思就是禁止C 类地址192.168.0.0/24 网段主机访问,但是允许192.168.0.24 主机访问。
[sales]
comment = Share Directory of sales
path = /sales
hosts deny = 192.168.0.
hosts allow = 192.168.0.24
测试:如果是192.168.0.24 的客户端就可以正常访问,否则提示无法访问,可能没有权限使用网络资源……
如果想同时禁止多个网段的IP 地址访问此服务器可以这样设置
hosts deny = 192.168.1. 172.16. 表示拒绝所有192.168.1.0网段和172.16.0.0
网段的IP 地址访问sales 这个共享目录。
hosts allow = 10. 表示允许 10.0.0.0网段的IP 地址访问sales 这个共享目录。
注意:当需要输入多个网段IP 地址的时候,需要使用“空格”符号隔开。
3)使用域名进行限制
我们来看这样一个例子,公司samba 服务器上共享了一个目录public ,公司规定.sale.co
m域和.net 域的客户端不能访问,并且主机名为free 的客户端也不能访问。
hosts deny = .sale.com .net free 表示禁止.sale.com域和.net 域及主机名为free
的客户端访问public 这个共享目录。
注意:域名和域名之间或域名和主机名之间需要使用“空格”符号隔开。
4)使用通配符进行访问控制
samba 服务器共享了一个目录security,规定所有人不允许访问,只有主机名为boss 的客户
端才可以访问。对于这样一个实例,我们就可以通过使用通配符的方式来简化配置。
hosts deny = All 表示所有客户端,并不是说允许主机名为ALL 的客户端可以访问。常用的通配符还有“*”,“?”,“LOCAL”等。
hosts allow = boss
还有一种比较有意思的情况,如果我们规定所有人不能访问security 目录,只允许192.168.0.0 网段的IP 地址可以访问,但是192.168.0.100 及192.168.0.78 的主机是要禁止访问的。我们可以使用hosts deny 禁止所有用户访问,再设置hosts allow 允许192.168.0.0网段主机,但当hosts deny 和hosts allow 同时出现而且冲突的时候,hosts allow 生效,如果这样的话,那么允许192.168.0.0网段的IP 地址可以访问,但是192.168.0.100 及192.168.0.78 的主机禁止访问就无法生效了。我们可以使用EXCEPT 进行设置。hosts allow = 192.168.0. EXCEPT 192.168.0.100 192.168.0.78 表示允许 192.168.0.0 网段IP 地址访问,但是192.168.0.100 和192.168.0.78 除外。
hosts allow 和hosts deny 的作用范围
hosts allow 和hosts deny 设置在不同的位置上,它们的作用范围是不一样的。如果设置在[global]里面,表示对samba 服务器全局生效,如果设置在目录下面,则表只对这个目录生效。
1.3 设置Samba的权限
到这里我们已经可以对客户端访问进行有效的控制,但是对于能访问的客户端来说,我们还是不能灵活方便的控制他们访问共享资源的权限,比如boss 或gm这样的帐号可以对某个共享目录具有完全控制权限,其他帐号只有只读权限,这样的情况我们就可以使用write list 字段来实现。
例如公司samba 服务器上有个共享目录tech,公司规定只有boss 帐号和tech 组的帐号可以完全控制,其他人只有只读权限。如果只用writable 字段则无法满足这个实例的要求,因为当writable = yes 时,表示所有人都可以写入了,而当writable = no 时表示所有人都不可以写入。这时我们就需要用到write list 字段。
[tech]
comment = tech data
path = /tech
write list = boss, @tech #表示只有boss 帐号和tech 组成员才可以对tech 共享目录有写
入权限(其中@tech 就表示tech 组)。
我们来看下writable 和write list之间的区别:
字段      值                         描述
writable yes                       所有帐号都允许写入
writable no                        所有帐号都禁止写入
write list boss,gm,@tech     列表中的帐号允许写入
1.4 Samba 的隐藏共享
我们还可以使用 browseable 字段实现隐藏共享的功能。比如我们要把 samba上的技术部共享目录隐藏,我们可以这样设置。
browseable = no 表示隐藏该目录
[tech]
comment = tech data
path = /tech
write list = boss, @tech
browseable = no
这样,当用户输入\\IP 访问共享文件时,看不到目录tech,但是如果用户输入\\IP\tech时又可以访问。
在有些特殊的情况下,browseable 也无法满足企业的需求,比如,samba 服务器上有个security 目录,此目录只有boss 用户可以浏览访问,其他人都不可以访问。因为samba 的主配置文件只有一个,所有帐号访问都要遵守该配置文件的规则,如果隐藏了该目录,那么所有人就都看不到该目录了,就像上面演示的一样,要知道共享目录名称后输入\\IP\tech才可以访问技术部资料。如果这样的目录一多的话,不可以叫boss 去记那么多目录名称,那样还不被boss 骂死。问题出在samba 服务的主配置文件只有一个,而smb.conf 没有提供字段允许部分人可以浏览隐藏目录的功能。
那我们可以换个角度,既然单一的配置文件无法实现要求,那么我们可以为不同需求的用户或组分别建立相应的配置文件并单独配置后实现其隐藏目录的功能,现在我们为boss 帐号建立一个配置文件,并且让其访问的时候能够读取这个单独的配置文件。
(1)建立独立的配置文件
先为 boss 帐号创建一个单独的配置文件,我们可以直接复制/etc/samba/smb.conf 这个文件并改名就可以了,如果为单个用户建立配置文件,命名时一定要包含用户名。
我们使用 cp 命令复制主配置文件,为boss 帐号建立独立的配置文件。
[root@rusky2 samba]# cp smb.conf smb.conf.boss
[root@rusky2 samba]# ls
lmhosts secrets.tdb smb.conf smb.conf.boss smbpasswd smbusers
(2)编辑smb.conf 主配置文件
在[global]中加入config file = /etc/samba/smb.conf.%U,表示samba 服务器读取/etc/samba/smb.conf.%U 文件,其中%U 代表当前登录用户。命名规范与独立配置文件匹配。
#======================= Global Settings =====================================
[global]
config file = /etc/samba/smb.conf.%U
# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
workgroup = MYGROUP
(3)编辑smb.conf.boss 独立配置文件
编辑 boss 帐号的独立配置文件smb.conf.boss,将tech 目录里面的browseable = no 删除,这样当boss 帐号访问samba 时,tech 共享目录对boss 帐号访问就是可见的,这样主配置文件smb.conf 和boss 帐号的独立配置文件相搭配就有实现其他用户访问时tech 共享目录是隐藏的,而boss 帐号访问时就是可见的。
(4)重新启动samba 服务:service smb restart
测试结果:其它用户登录访问共享文件看不到tech,只有boss登录后才能看到tech目录。
这样以独立配置文件的方法来实现隐藏共享对不同帐号的可见性非常方便~
注意:目录隐藏了并不是说不共享了,只要知道共享名,并且有相应权限,还是可以访问的,就像上面演示的一样,可以输入“\\IP 地址\共享名”的方法就可以访问隐藏共享了。

posted on 2014-07-17 10:13  遠離塵世の方舟  阅读(599)  评论(0编辑  收藏  举报

导航