文章目录
Samba高级服务器配置
一、用户账号映射
在前一部分提到可以访问的Samba服务器的账号必须对应一个同名的系统账号,因此只要知道Samba服务器的账号,就可以知道Linux的系统账号,这是非常危险的。因此为了保障Samba服务器的安全,引入虚拟账号,并建立Samba账号和虚拟账号之间的对应关系。客户端通过虚拟账号登录到Samba服务器。
比如,将sale1账号分别映射为suser1和myuser1,将sale2账号映射为suser2。首先需要在主配置文件中添加账号映射的文件,然后在映射文件中添加Samba账号与虚拟账号之间的对应关系。
# 在smb.conf中添[global]中添加username map字段,开启用户账号映射功能,也是映射所需的文件
username map=/etc/samba/smbusers
#在上面文件中添加Samba账号和虚拟账号之间的对应关系
sale1=suser1 myuser1
sale2=suser2
#重启Samba服务
[root@RHEL7-1 ~] systemctl restart smb
二、客户端访问控制
Samba服务器共享出来的目录,要禁止某个IP子网或某个域的客户端访问此资源,使用hosts allow和hosts deny字段实现此功能。
1.使用IP
对于共享目录/sales,禁止来自192.168.10.0/24网段的IP地址访问,但其中的192.168.10.30可以访问。
# 修改smb.conf中的[sales]共享字段
[sales] #设置共享目录的共享名为sales
comment=sales
path=/sales #设置共享目录的绝对路径
hosts deny = 192.168.10. #禁止所有来自192.168.10.0/24网段的IP地址访问
hosts allow = 192.168.10.30 #允许192.168.10.30这个IP地址访问
#重启Samba服务
[root@RHEL7-1 ~] systemctl restart smb
2.使用域名
公司Samba服务器上共享了一个目录public,公司规定.sale.com域和.net域的客户端不能访问,并且主机名为client1的客户端也不能访问。
# 修改smb.conf中的[public]共享字段
[public]
comment=public's share
path=/public
hosts deny = .sale.com .net client1
#重启Samba服务
[root@RHEL7-1 ~] systemctl restart smb
3.使用通配符
Samba服务器共享了一个目录security,规定除主机boss外的其他人不允许访问。
修改smb.conf配置文件,使用通配符“ALL”来简化配置。
# 修改smb.conf中的[security]共享字段
[security]
comment=security
path=/security
writable=yes
hosts deny = ALL
hosts allow = boss
#重启Samba服务
[root@RHEL7-1 ~] systemctl restart smb
Samba服务器共享了一个目录security,只允许192.168.0.0网段的IP地址访问,但是192.168.0.100及192.168.0.200的主机禁止访问security。
错误:hosts allow=192.168.0. hosts deny=192.168.0.100 192.168.0.200
原因:当hosts allow和hosts deny冲突时,hosts allow优先,可以使用EXCEPT进行设置
正确: hosts allow=192.168.0. EXCEPT 192.168.0.100 192.168.0.200
# 修改smb.conf中的[security]共享字段
[security]
comment=security
path=/security
writable=yes
hosts deny = ALL
hosts allow = 192.168.0. EXCEPT 192.168.0.100 192.168.0.200
#重启Samba服务
[root@RHEL7-1 ~] systemctl restart smb
4.hosts allow和hosts deny的作用范围
[global]
hosts deny = ALL
hosts allow = 192.168.0.66 #只有192.168.0.66才可以访问Samba服务器
[security]
hosts deny = ALL
hosts allow = 192.168.0.66 #只有192.168.0.66才可以访问security目录
三、设置Samba的权限
字段 | 值 | 描述 |
---|---|---|
writable | yes | 所有账号都允许写入 |
writable | no | 所有账号都禁止写入 |
write list | 写入权限账号列表 | 列表中的账号允许写入 |
根据上面的参数可以实现对所有账号允许写入、禁止写入、部分成员允许写入的操作。
公司Samba服务器上有个共享目录tech,公司规定只有boss账号和tech组的账号可以完全控制,其他人只有只读权限。
[tech]
comment=tech's data
path=/tech
write list =boss, @tech
四、Samba隐藏共享
使用browseable字段实现隐藏共享。
例1:把Samba服务器上的技术部共享目录tech隐藏。
[tech]
comment=tech's data
path=/tech
write list =boss, @tech
browseable = no
例2:Samba服务器上有个tech目录,此目录只有boss用户可以浏览访问,其他人都不可以浏览和访问。
分析:Samba的主配置文件只有一个,所有账号都要遵守该配置文件,如果browseable为yes,那么都可以浏览,如果为no,那么所有人都不可以浏览,不想上述的write list可以允许部分成员写入。为了对不同成员的浏览权限做区分,为不同需求的用户或组群分别建立相应的配置文件,并单独配置其隐藏功能。
(1)建立共享文件和账户
[root@RHEL7-1 ~] mkdir /tech
[root@RHEL7-1 ~] useradd boss
[root@RHEL7-1 ~] useradd test1
[root@RHEL7-1 ~] passwd boss
[root@RHEL7-1 ~] passwd test1
[root@RHEL7-1 ~] smbpasswd -a boss
[root@RHEL7-1 ~] smbpasswd -a test1
(2)建立独立配置文件
可以直接对主配置文件smb.conf做一个copy,然后相应修改即可。
[root@RHEL7-1 ~] cd /etc/samba/
[root@RHEL7-1 ~] cp smb.conf smb.conf.boss
(3)编辑主配置文件smb.conf
需要在global中指定boss账户对应的配置文件,有两种方式:
config file:当以boss身份访问Samba服务器时,只能看到boss信息,其他在smb.conf中定义的共享资源无法看到。
include:除了可以看到boss的信息,其他在smb.conf中定义的共享资源也可以看到。
[global]
config file = /etc/samba/smb.conf.%U
[tech]
comment=tech's data
path=/tech
write list =boss, @tech
browseable=no
(4)编辑smb.conf.boss独立配置文件
[tech]
comment=tech's data
path=/tech
write list =boss, @tech
browseable=yes
(5)重启Samba服务
#重启Samba服务
[root@RHEL7-1 ~] systemctl restart smb
五、Samba服务器实用案例
1.Samba服务器目录
公共目录/share,销售部/sales,技术部/tech。
2.企业员工情况
主管:总经理master;
销售部:销售部经理mike,员工sky,员工jane
技术部:技术部经理tom,员工sunny,员工bill
公司使用Samba搭建文件服务器,需要建立公共共享目录,允许所有人访问,权限为只读。为销售部和技术部分别建立单独的目录,只允许总经理和对应部门员工访问,并且公司员工无法在网络邻居查看到非本部门的共享目录。
分析:这一题中,用户可以分为三类,master、sales组和tech组。master总经理对/share可读,对/sales和/tech可读可写;sales组内的三个成员对/share可读,对/sales可读可写,对/tech不可以浏览;tech组内的三个成员对/share可读,对/tech可读可写,对/sales不可以浏览。由于这里涉及到browseable,不同用户的权限不一样,因此可以为每一类用户分别建立独立的配置文件,一共有4个配置文件,分别为smb.conf,master.smb.conf,sales.smb.conf和tech.smb.conf。
主要过程如下:
(1)建立三个目录
[root@RHEL7-1 ~] mkdir /share
[root@RHEL7-1 ~] mkdir /sales
[root@RHEL7-1 ~] mkdir /tech
(2)添加用户和组
[root@RHEL7-1 ~] groupadd sales
[root@RHEL7-1 ~] groupadd tech
[root@RHEL7-1 ~] useradd master
[root@RHEL7-1 ~] useradd -g sales mike
[root@RHEL7-1 ~] useradd -g sales sky
[root@RHEL7-1 ~] useradd -g sales jane
[root@RHEL7-1 ~] useradd -g tech tom
[root@RHEL7-1 ~] useradd -g tech sunny
[root@RHEL7-1 ~] useradd -g tech bill
[root@RHEL7-1 ~] passwd master
[root@RHEL7-1 ~] passwd mike
[root@RHEL7-1 ~] passwd sky
[root@RHEL7-1 ~] passwd jane
[root@RHEL7-1 ~] passwd tom
[root@RHEL7-1 ~] passwd sunny
[root@RHEL7-1 ~] passwd bill
(3)添加相应Samba账户
[root@RHEL7-1 ~] smbpasswd -a master
[root@RHEL7-1 ~] smbpasswd -a mike
[root@RHEL7-1 ~] smbpasswd -a sky
[root@RHEL7-1 ~] smbpasswd -a jane
[root@RHEL7-1 ~] smbpasswd -a tom
[root@RHEL7-1 ~] smbpasswd -a sunny
[root@RHEL7-1 ~] smbpasswd -a bill
(4)设置共享目录本地权限
[root@RHEL7-1 ~] chmod 777 /share
[root@RHEL7-1 ~] chmod 777 /sales
[root@RHEL7-1 ~] chmod 777 /tech
(5)设置SELinux和防火墙
#查看当前SELinux模式
getenforce
-->Enforcing # 为强制模式
#修改SELinux为宽容模式
setenforce Permissive
#关闭防火墙
firewall-cmd --permanent --add-service=samba
-->success
firewall-cmd –reload #重新加载防火墙
firewall-cmd --list-all #查看
-->
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client samba #已经加入到防火墙的允许服务
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
(6)建立独立配置文件
[root@RHEL7-1 ~] cd /etc/samba
[root@RHEL7-1 samba] cp smb.conf master.smb.conf
[root@RHEL7-1 samba] cp smb.conf sales.smb.conf
[root@RHEL7-1 samba] cp smb.conf tech.smb.conf
(7)编辑主配置文件smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
include=/etc/samba/%U.smb.conf
include=/etc/samba/%G.smb.conf
[public]
comment=public
path=/share
guest ok=yes
public=yes
browseable=yes
read only=yes
[sales]
comment=sales
path=/sales
# browseable=no
[tech]
comment=tech
path=/tech
# browseable=no
(8)编辑总经理master的配置文件master.smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
[public]
comment=public
path=/share
guest ok=yes
public=yes
browseable=yes
read only=yes
[sales]
comment=sales
path=/sales
browseable=yes
writable=yes
valid users=master
[tech]
comment=tech
path=/tech
browseable=yes
writable=yes
valid users=master
(9)编辑销售组sales的配置文件sales.smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
[public]
comment=public
path=/share
guest ok=yes
public=yes
browseable=yes
read only=yes
[sales]
comment=sales
path=/sales
browseable=yes
writable=yes
valid users=@sales,master
[tech]
comment=tech
path=/tech
browseable=no
(10)编辑技术组tech的配置文件tech.smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
[public]
comment=public
path=/share
guest ok=yes
public=yes
browseable=yes
read only=yes
[sales]
comment=sales
path=/sales
browseable=no
[tech]
comment=tech
path=/tech
browseable=yes
writable=yes
valid users=@tech,master
(11)测试
Samba服务器:192.168.163.10
Linux客户端:192.168.163.100
①对总经理master测试
1)master访问Samba服务器
2)master访问public,并尝试在共享目录内创建文件
3)master访问sales,并在/sales内创建目录
4)master访问tech,并在/tech内创建目录
②对销售部sales测试
用组内成员mike测试
1)mike访问Samba服务器
2)mike访问public,并尝试在共享目录内创建文件
3)mike访问sales,并在/sales内创建目录
4)mike访问tech,并在/tech内创建目录
③对技术部tech测试
用组内成员tom测试
1)tom访问Samba服务器
2)tom访问public,并尝试在共享目录内创建文件
3)tom访问sales,并在/sales内创建目录
4)tom访问tech,并在/tech内创建目录