一.SMB基本信息
Samba是Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB是一种再聚于网上共享文件和打印机的一种通信协议,它为局域网的不同计算机之间提供文件及打印机等资源的共享服务。 |
SMB实现的功能:
(1)SMB文件共享
(2)SMA多用户挂载
(3)SMB客户端使用
注:SMB用户必须为本机用户,但与本地用户没关系
二.samba服务
1.实验环境的配置
在所实验的虚拟机上添加地址解析
[root@zll ~]# vim /etc/hosts
2.samba服务器的安装及其调试
yum install samba-common samba -y ##安装与smb文件共享相关的软件
systemctl start smb ##开启服务
yum install samba-client ##安装客户端进行检测
smbpasswd -a student ##student必须是本机用户
mkdir /westos
chcon -t samba_share_t /westos ##改变文件安全上下文
vim /etc/samba/smb.conf ##编辑配置文件
文件编辑的参数说明如下:
[westos] | 共享名称 |
---|---|
comment = | 对共享目录的描述 |
path = | 共享目录的绝对路径 |
workgroup= | WESTOS |
测试如下:
[root@dns mnt]# smbclient -L //172.25.77.102 -U student
3.samba共享目录
useradd zll -s /sbin/nologin ##建立smb用户
useradd zll1 -s /sbin/nologin -M (-M表示不建立家目录)
smbpasswd -a zll ##生成smb用户的密码
smbpasswd -a zll1
检测:
[root@dns mnt]# smbclient //172.25.77.102/zll -U zll
注:不能浏览是因为设置系统建立家目录的波尔值
解决如下:
[root@dns mnt]# setsebool -P samba_enable_home_dirs on ##打开建立目录权限
再次登录:
zll1用户建立不了家目录是因为再设置添加用户时指定的zll1用户时禁止建立家目录的
(1)个人共享目录
[root@zll ~]# mkdir /westoslinux
[root@zll ~]# vim /etc/samba/smb.conf
[root@zll ~]# semanage fcontext -a -t samba_share_t '/westoslinux(/.*)?' ##修改目录的安全上下文
[root@zll ~]# restorecon -RvvF /westoslinux/
验证如下:
[root@zll ~]# smbclient //172.25.77.102/westos(目录说明) -U student
说明共享成功
(2)系统级共享目录
注:有些系统级别的共享目录是不受selinux限制的,可以直接浏览,而有些系统级别的目录要打开selinux共享目录的setsebool数值
[root@zll ~]# vim /etc/samba/smb.conf
[root@zll ~]# setsebool -P samba_export_all_ro on
再没有加之前,用smbclient是浏览不到里面的内容的(表示只读,读写的话将ro改为rw)
当打开该数值时,selinux对smb共享目录不再限制
验证如下:
可以看到/mnt的安全上下文不是samba的安全上下文,但是依然能共享到/mnt,是因为打开了共享系统目录的setbool数值
4.samba访问ip的限制
(1)修改登录后显示的domain值
修改前:
vim /etc/samba/smb.conf
修改内容:
89 workgroup = WESTOS
systemctl restart smb
再次登录,发现Domain与修改内容一致
(2)访问限制
- 访问拒绝
[root@zll ~]# vim /etc/samba/smb.conf
编辑内容为:
324 hosts deny = 172.25.77.102 表示拒绝这个ip挂载
验证如下:
mount //172.25.254.202/westos /mnt -o username=student,password=student //smb共享目录挂载就可以读取
发现不能挂载
-
访问允许
验证如下:
发现挂载成功 -
网络ip段的访问限制
修改文件内容:
324 hosts deny = 172.25.254. 表示拒绝这一网段ip挂载
验证如下:
再172.25.77.250主机上
再172.25.77.102虚拟机上
发现都不能挂载
4.samba匿名访问
vim /etc/samba/smb.conf
编辑内容为:
125 map to guest = bad user ##设定匿名用户身份为guest
325 [mnt]
326 comment= mnt dir
327 path=/mnt
328 guest ok = yes ##拒绝其它目录但是允许挂载这个目录
systemctl restart smb
验证如下:
[root@foundation2 ~]# mount //172.25.77.102/westos /mnt/ -o username=guest
挂载westos拒绝
挂载mnt可以挂载,并且可以浏览mnt下的内容
5.samba其它文件参数
(1)writable = yes ##允许用户可写
vim /etc/samba/smb.conf
编辑内容为:
324 writable = yes ##及允许对/westoslinux可写
systemctl restart smb
验证如下:
[root@zll ~]# mount //172.25.77.102/westos /mnt -o username=student,password=student
发现不能建立文件,解决如下:
a.selinx的影响
[root@zll mnt]# setenforce 0 ##设置selinux为警告型发现还是建立不了文件
b.sebool影响
getsebool -a | grep samba
setsebool -P samba_export_all_rw on ##打开可写权限,发现还是建立不了文件
c.目录本身权限的影响
[root@zll mnt]# chmod 777 /westoslinux
再次验证如下:
挂载:
建立文件:
发现可以建立文件
(2)
- 可写用户
write list = zll #可写用户
vim /etc/samba/smb.conf
验证如下:
mount //172.25.77.102/westos /mnt/ -o username=zll
注:由上验证可以看到是zll挂载的所以建立的文件属于zll用户及该组
- 可写组
write list=@student ##属于student的这个组可写,也可以用+student表示
vim /etc/samba/smb.conf
验证如下:
a.用户zll不属于student组时
发现能挂载但是不能建立文件,是因为zll不属于student组
b.当zll为student组时
发现可以挂载并且可以建立文件
(3)
valid users = student #当前共享的有效用户为
valid users = @student #当前共享的有效用户为组
valid users = +student #当前共享的有效用户为组
a.当前共享的有效用户
验证如下:
student为有效用户可以挂载。
zll用户不能挂载,是因为zll用户不是有效用户
b.当前共享的有效用户为组
验证如下:
student用户可以挂载
zll用户属于student组,也可以挂载
(4)
browseable = yes ##是否可以被列出
[root@zll ~]# vim /etc/samba/smb.conf
注:再添加该文件的参数时,要注意注释掉可写用户和有效用户,以免对实验产生影响
验证如下:
发现westos不能被列出
westos被列出
(5)
admins users = westos ##生成smb的超级管理用户
[root@zll ~]# vim /etc/samba/smb.conf
[root@zll ~]# systemctl restart smb
328 admin users = student ##要打开写的权限
验证如下:
发现新建立文件的用户属于root组
6.smb多用户挂载
客户端:
在root身份下将共享目录挂载到/mnt中,可以看到文件中的内容,但是切换到kiosk用户身份后,仍然可以看到/mnt下的内容,这样对于该共享系统来说是存在不安全的
实现多用户挂载
1.在客户端安装多用户挂载的软件
2.编写已知的smb用户的认证文件(将用户身份和密码编辑进去)
3.给文件设置权限
4.挂载
credentials=/root/smbpass 为指定挂载时用到的用户文件
sec=mtlmssp 表示认证方式为smb标准认证方式(加密方式为ntlmssp)
multiuser 采用多用户挂载
在/mnt下建立一个文件,可以看到文件的所有人和所有组恰好为服务端该用户的所有人和所有组
当切换到kiosk用户时,发现浏览不了/mnt下的内容
解决如下:
cifscreds add -u student 172.25.254.100 ##
##smb用户student的密码
[kiosk@foundation2 mnt]$ touch zll
[kiosk@foundation2 mnt]$ ll
-rw-r--r--. 1 root(因为服务配置文件中student为超级用户所以显示root) kiosk(显示属于的用户是所切换的用户) 0 Feb 22 14:23 zll
可以进行如下更改:
在服务端:
在配置文件中:
注释掉:328 ; admin users = student,同时也要打开可写权限
在客户端:
umount /mnt
[kiosk@foundation2 ~]$ cifscreds add -u student 172.25.77.102
[kiosk@foundation2 mnt]$ touch zll1
-rw-r--r--. 1 kiosk kiosk 0 Feb 22 14:40 zll1 ##发现创建的文件也是kiosk用户