samba服务简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
在windows系统中共享文件时用到的协议smb,
samba服务基本信息
-
服务名称:smb.service
-
安装包:samba;samba-common-tools, samba-client
-
主配置目录: /etc/samba
-
主配置文件:/etc/samba.conf
-
安全上下文:samba_share_t
-
端口:139;445
samba服务安装与启用
- dnf install samba-common-tools samba samba-client -y
- samba服务启动:systemctl enable --now smb
- samba服务在火墙添加启用:
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
测试操作:
我们在windos系统中操作共享目录,右键点击目录选择属性
命令:smbclient -L //192.168.31.62/Study -U HEYUANXIANG,列出共享目录里的文件,-U 添加windos里的用户
命令:smbclient //192.168.31.62/Study -U HEYUANXIANG,进入共享的Study目录,会得到一个smb的控制台界面,可以在里面使用命令,也可以是使用 “!ls” 来查看我们本地的共享文件
命令:mount //192.168.31.62/Study /mnt -o username=HEYUANXIANG,password=6466,可以通过挂载共享的文件来查看文件
在windows系统中在开始菜单中搜索://192.168.31.62,linux主机的IP地址
samba服务用户建立
- amba用户必须是被地存在的用户
- samba用户的建立
smbpasswd -a redhat ,添加用户
pdbedit -L ,查看用户列表
添加的用户想要被访问,需要更改sebool值
pdbedit -x redhat ,删除用户
samba服务用户访问目录
windows系统下:\192.168.0.20 ,访问共享文件
如果想要切换需要访问的用户,在cmd控制界面中:
net use ,查看访问记录
net use * /del ,删除访问记录
在linux下执行:
smbclient //192.168.0.20/Study -U HEYUANXIANG,
samba服务共享目录
如何在linux中自定义去设定共享目录,
建立mkdir /testdir 目录,在目录中建立一些文件
更改目录的安全上下文:semanage fcontext -a -t samba_share_t ‘/testdir(/.*)?’
刷新安全上下文:restorecon -RvvF /testdir
编辑共享文件的配置:vim /etc/samba/smb.conf
写入需要共享的文件信息
[testdir] #共享名称
comment = testdir #共享说明
path = /testdir #共享路径
写完保存退出,重启samba服务
在共享的主机里添加一个用户
使用另一台测试主机访问共享文件
samba服务的访问控制
访问控制我们需要在 /etc/samba/smb.conf 这个配置文件中写入相应的参数
配置参数:
hosts allow = IPADDR 只允许谁看
hosts deny = IPADDR 不允许谁看
IPADDR可以写多个空格隔开即可
如果在指定的目录下写入此配置,只对该目录生效
如果在 global 下写入此配置,表示对全局文件都生效
配置测试,写入配置 /testdir 目录不允许192.168.31.20 主机访问
保存退出,重启samba服务,测试主机再去访问就会被拒绝了
samba服务的常用配置参数
配置 | 说明 |
---|---|
writable = yes | 可写 |
write list = redhat | 指定用户可写 |
write list = +redhat / @redhat | 指定组可写 |
valid users = he | 指定访问用户 |
valid users = +he / @he | 指定访问组 |
browseable = yes / no | 是否隐藏共享 |
map to guest = bad user | 设定匿名用户,写到global全局设定中 |
guest ok = yes | 允许匿名用户访问,必须和设定匿名用户同时出现 |
admin users = he | 指定此共享的超级用户身份呢 |
这些参数的使用都是写在 /etc/samba/smb.conf 配置文件里
测试:
-
write list = redhat 指定 redhat 用户可写,为了防止文件系统对测试影响,设置 hmod 777 /testdir/
可写配置测试时,对于挂载的文件,需要重新挂载再测试 -
valid users = he ,允许he 用户访问
-
valid users = +he / @he,允许he这个组的可访问
-
browseable = yes / no ,是否隐藏共享,no表示隐藏,yes表示不隐藏
-
map to guest = bad user
guest ok = yes, 设定允许匿名访问
-
admin users = he ,指定访问用户身份为超级用户
通过 he 用户建立的文件,在samba服务的主机里查看到用有人是超级用户,但是拥有组依然是he ,因为这个配置不能改变建立文件的拥有组
samba的多用户挂载
在客户端如果用普通的挂载方式
切换到系统中的其他用户,没有用过用户验证的也可以访问samba服务
这样相对的安全性就很低,所以针对这种情况,
在服务端的主机里我们需要去做配置,使设置之外的用户没有通过验证时不能去查看共享文件,
首先安装程序 cifs-utils.x86_64
在客户端建立文件:vim /root/smbpass
执行挂载命令:mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //192.168.31.10/testdir /mnt
参数 | 说明 |
---|---|
credentials=/root/smbpass | 指定认证文件 |
sec=ntlmssp | 指定认证类型 |
multiuser | 支持多用户 |
挂载后通过验证的用户可以访问到文件,但是切换其他用户就无法查看了
如果其他用户也想查看共享文件,命令: cifscreds add -u redhat 192.168.31.10,加载认证,这里认证的redhat用户不是本机的,而是客户端里samba服务添加的用户
如果在执行命令时出现报错 “Key search failed: Key has expired” ,可以先执行 :
cifscreds add -u lee -d 192.168.31.10 ;
cifscreds clearall ,执行以上两条命令解决报错.