文章目录
实验环境
rhel8主机IP:192.168.0.110 为samba服务器
rhel7主机:samba客户端
一. samba服务简介
问:samba是什么?
答:Samba是一种用来让UNIX系列的操作系统与微软Windows操作系统的SMB和CIFS网络协议做链接的自由软件。简而言之,此软件在Windows与UNIX系列操作系统之间搭起一座桥梁,让两者的资源可以共享。
Samba的含义
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB也就是信息服务块,是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
二.samba基本信息
服务启动脚本: | smb.service |
主配置目录: | /etc/samba |
主配置文件: | /etc/samba/smb.conf |
安全上下文: | samba_share_t |
端口: | 139和445 |
安装包: | samba samba-common |
三.samba的安装与启用
samba的安装:
dnf install samba samba-common samba-client -y #需要安装3个安装包
samba服务启动:
systemctl enable --now smb
samba服务启用
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
测试:
smbclient -L //192.168.0.110 #当要输入root密码时请直接回车
测试:
四.samba用户的建立以及访问用户的家目录
1.samba用户必须是本地系统中真实存在的用户
2.samba用户的建立
命令 | 作用 |
---|---|
smbpasswd -a westos | 添加westos用户 |
pdbedit -L | 查看samba服务的用户列表 |
pdbedit -x lee | 删除samba用户lee |
3、访问samba用户的家目录
当selinux开启时:
setsebool -P samba_enable_home_dirs on #打开samba服务器的selinux功能参数
在windows下访问samba用户的家目录:
\\192.168.0.110 #访问
net use #查看访问记录
net use * /del #删除访问记录
在linux下访问:
smbclient //192.168.0.110/westos -U westos
实验过程:
1、samba用户的建立
2、访问samba用户的家目录
客户端使用samba用户访问samba服务共享的内容
windows下访问:
直接在搜索框输入"\\samba服务器的ip":
在selinux开启的情况下,访问会被拒绝,如下图:
因此,需要在samba服务器中关闭selinux,或者在selinux开启的情况下打开参数
Windows下可以查看连接列表以及删除连接列表
linux下访问samba用户的家目录:
五.samba的访问控制
一、samba服务共享目录
mkdir /test
touch /test/testfile{1..5}
semanage fcontext -a -t samba_share_t '/test(/.*)?' #修改目录的安全上下文
restorecon -RvvF /test #刷新,使修改立即生效
vim /etc/samba/smb.conf
文件内容:
[test] #共享名称
comment = test #共享说明,说明可以随意写
path = /test #共享路径,一定要写目录的绝对路径
systemctl restart smb
测试:
smbclient //192.168.0.110/test -U westos #访问成功
二、samba服务的黑白名单设置:
hosts allow 192.168.0.110 #允许
hosts deny #拒绝
注意:
#当写到单独目录下时只对此目录生效
#当写到【GLOBAL】时对samba服务整体生效
一、samba服务共享目录
1、vim /etc/samba/smb.conf修改配置文件,然后重启samba服务
2、共享成功,但是无法查看目录下的内容,因为服务器端selinux是开启的,所以我们需要设置/test目录的安全上下文和samba的安全上下文一致
3、更改/test目录的安全上下文
4、可以访问目录下的内容
二、samba服务的黑白名单设置:
samba服务的/test目录只允许192.168.0.110用户访问
rhel7(192.168.0.109)主机访问失败
rhel8(192.168.0.110)主机访问成功
写到[global]下对服务整体生效,无法访问samba服务
六.samba的常用配置参数
编写文件:
vim /etc/samba/smb.conf
修改参数:
writable = yes #可写
write list = westos #指定用户可写
write list = +westos或@westos #指定组可写
valid users = lee #指定访问用户
valid users = +lee|@lee #指定访问组
browseable = yes|no #是否隐藏共享
map to guest = bad user #写到全局设定中
guest ok = yes #允许匿名用户访问
admin users = lee #指定此共享的超级用户身份
每次修改完参数后记得重启samba服务使更改生效:systemctl restart smb.service
注意:可以参考配置文件的说明:vim /etc/samba/smb.conf.example
例如:
1、可写:writable = yes
默认情况下,westos用户对该目录是不可以写的,因为客户端用的是服务端的westos用户的身份登陆的,所以是不可写的;并且samba服务本来就不允许用户写,是一个只读访问
首先,修改本地文件系统的权限为777,排除本地文件系统的干扰
然后编辑配置文件:vim /etc/samba/smb.conf,添加可写功能
可以建立和删除文件
2、指定westos用户可写:write list = westos
添加可写名单后只有指定的用户可写
3、指定属于westos组的用户可写:write list = +westos或write list = @westos
将lee用户添加到westos组内,注意删除lee用户的附加组的命令为usermod -G “” lee
此时lee用户可写
4、指定可以访问的用户:valid users = lee
结果:
5、是否隐藏共享目录:browseable = yes|no ,yes不隐藏;no隐藏
结果如下:
6、给全局设定中写:map to guest = bad user ;给目录设定中写:guest ok = yes ,允许匿名用户访问
修改完参数后匿名用户可以访问:
7、admin users = lee #指定此共享的超级用户身份
修改后效果如下:
七.samba的多用户挂载
注意:该实验的过程均在客户端主机上操作
问题:在客户端如果用普通的挂载方式,没有通过用户验证的人也可以访问samba服务
解决方案:改变挂载方式
1、在客户端安装cifs软件
2、建立认证文件、修改文件权限并编辑文件
touch /root/smbpass
chmod 600 /root/smbpass #只让超级用户可以看,更安全
vim /root/smbpass #编辑认证文件
文件内容:
username=westos
password=westos #文件写有效的samba用户的名称和密码
3、
挂载:mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //192.168.0.110/test /mnt
#其中:credentials=/root/smbpass 指定认证文件;sec=ntlmssp 指定认证方式;multiuser 支持多用户认证
4、测试:
su - westos
此时westos用户不能看到目录里的内容,被拒绝
5、使自己通过认证
[westos@test ~]$ cifscreds add -u lee 192.168.0.110 #通过该软件去登陆服务器端的samba服务
Password:
[westos@test ~]$ ls /mnt/ #通过认证可以显示目录下的内容
注意:如果在使用该命令时遇到报错,解决方法如下:
[westos@test /]$ cifscreds add -u lee 192.168.0.110
Key search failed: Key has expired #当遇到此报错信息
[westos@test /]$ cifscreds add -u lee -d 192.168.0.110
Password:
[westos@test ~]$ cifscreds clearall #执行以上两条命令解决报错
如图,在客户端,客户端的超级用户使用服务器端的westos用户登录到服务。我们现在使用的linux系统是一个多用户多任务的操作系统,因此系统中可能又多个用户。此时我们可以发现,即使客户端的westos用户没有登录服务(没有通过samba服务的认证),却依然可以查看服务器共享的内容,貌似不太合理的样子。。。。。。因此,我们需要解决这个安全问题,使得只有通过认证的用户才能访问共享资源,未通过认证的用户无法访问服务器上的资源,这样的登录方式称为samba的多用户挂载。
1、在客户端安装cifs软件,用来管理cifs文件系统的挂载,安装成功后,可以用man mount.cifs查看cifs的挂载方式(1.指定认证文件;2.指定认证类型;3.支持多用户)
2、编辑认证文件
3、
4、实验效果如下:
在客户端用不同的用户身份登录服务器端的samba服务并建立文件
在服务器端可以看到:
结束!!!