Linux下的SMB文件共享—基于文件系统的存储分离
目录:
1.什么是samba
在平时我们电脑中保存的文件,想要传给别人的话一般都会发邮箱来完成,如果我们想要共享一个磁盘的内容,也可以用之前学过的lftp apache等服务来上传,但这些服务都在基于上传的主机开启的基础上。而SMB服务可以实现存储分离。
举个例子:平时我们使用微信,换一个手机,但微信的联系人信息并不会因为换了新手机登陆而随之消失,而我们再次用自己的张号登陆时,联系人信息是仍然存在的。
SMB就会实现这样的功能,我们上传想要共享的文件,其他人随时只要登陆就可以看到那些文件,并且上传文件后退出登陆,下次登陆时仍能看到那些文件。
2.搭建samba服务器
- 在服务端:(提供共享磁盘)
yum install samba samba-common samba-client.x86_64 -y ##注意:samba只提供启动服务,而samba的配置文件都在samba-common里,所以两个都要安装
rpm -qa | grep samba ##查看安装情况
cd /etc/samba
vim smb.conf ##编辑配置文件
322 [WESTOS]
323 comment = share local directory ##说明,自定义
324 path = /sambashare ##要共享的目录
325 writable = yes ##可上传
mkdir /sambashare
chmod 777 /sambashare
getenforce ##disabled
systemctl start smb ##开启服务
systemctl enable smb ##服务开机启动
netstat -antlupe | grep smb ##查看端口
firewall-cmd --add-service=samba ##设定火墙
useradd -s /sbin/nologin -M westos ##添加westos用户 只有smb服务用 -M不建立家目录
id westos ##查看westos
smbpasswd -a westos ##建立smb用户westos设定密码
useradd -s /sbin/nologin -M lee
smbpasswd -a lee
smbpasswd -a student
pdbedit -L ##查看smb用户
pdbedit -x student ##在smb用户中删除student
注意:要建立smb用户的前提是本地中存在此用户
- 在客户端:
yum install samba-client -y
rpm -qa | grep samba
smbclient -L //172.25.254.136 -U ##登陆smb
smbclient //172.25.254.136/WESTOS -U lee ##用lee用户登陆/WESTOS目录
!ls ##列出当前目录中内容
mount //172.25.254.136/WESTOS /mnt -o username=lee,password=123 ##挂载共享目录到/mnt
cd /mnt
touch file{1..10} ##此时在服务端的sambashare目录中出现10个文件
umount /mnt
注意:用smbclient命令登陆时,里面有很多命令不能使用,不方便。为了更加方便了可以把它挂载到/mnt,使用完再卸载即可。
3.autofs自动挂载卸载
- 理解autofs意义
在使用smb文件共享时,每次使用都要去挂载卸载,相对来说比较麻烦
如果我们设定它开机自动挂载到/mnt,那么如果我们不想使用它还要手动卸载
autofs就可以完美的解决这个问题,实现我们进入目录时自动挂载,当我们退出该目录时自动卸载
- 如何实现autofs
设定:
yum install autofs -y
systemctl start autofs ##开启autofs服务
systemctl enable autofs ##autofs开机启动
vim /etc/auto.master ##编辑策略文件
/mnt /etc/auto.samba ##挂载目录 挂载参数文件
vim /etc/auto.samba
WESTOS -fstype=cifs,username=lee,password=123 ://172.25.254.136/WESTOS ##挂载的最终位置 挂载参数 挂载设备
systemctl restart autofs ##重启服务
测试:
cd /mnt
ls ##进入/mnt目录中ls查看目录为空
cd WESTOS ##却可以进入WESTOS(autofs实现了进入自动挂载)
df ##查看挂载情况
注意:这里默认退出目录后300s自动卸载,为了看到实验效果我们可以改一下默认等待时间
vim /etc/sysconfig/autofs
TIMEOUT=3
systemctl restart autofs ##重启服务
测试:
cd /mnt/WESTOS ##进入该目录
df ##自动挂载成功
cd ##退出目录,等3s后df查看到已经卸载
3.smb文件共享全局设定
cd /etc/samba
vim smb.conf ##再次文件中修改参数
- 更改名称
vim smb.conf
89 workgroup = WESTOS
测试:
smbclient -L //172.25.254.136 -U lee
Domain=[WESTOS]
- 黑白名单设定
黑名单:
96 ; hosts deny = 172.25.254.236
测试:
smbclient -L //172.25.254.136 -U lee ##236不能登陆,其他主机可以登陆
白名单:
97 ; hosts allow = 172.25.254.236
测试:
smbclient -L //172.25.254.136 -U lee ##只有236主机可以登陆
-匿名用户登陆
126 map to guest = bad user
327 guest ok = yes
测试:
smbclient //172.25.254.136/WESTOS ##匿名用户可以登陆
mount //172.25.254.136/WESTOS /media/ -o username=guest ##匿名用户挂载
-是否可以查看
327 browseable = yes|no ##yes表示可以查看
测试:
设定为yes时,在远程主机中登陆
smbclient -L //172.25.254.136 -U lee
WESTOS Disk share local directory ##可以查看到WESTOS
设定为no时,在远程主机中登陆
smbclient -L //172.25.254.136 -U lee ##查看不到WESTOS,但不代表不能用,只是隐藏起来了
-指定可以登陆用户
指定用户:
329 valid users = westos ##指定westos用户可以登陆
测试:
mount //172.25.254.136/WESTOS /mnt -o username=westos,password=123 ##westos用户可以挂载
mount //172.25.254.136/WESTOS /mnt -o username=lee,password=123 ##lee用户不能挂载
指定用户组:
329 valid users = @westos ##指定westos用户组成员可以登陆
usermod -G westos lee ##将lee添加到westos组里
测试:
mount //172.25.254.136/WESTOS /mnt -o username=lee,password=123 ##lee用户可以挂载
-指定可写用户
指定用户:
326 ; writable = yes ##先把可写的设置注释掉
328 write list = lee ##设定lee用户可写
测试:
mount //172.25.254.136/WESTOS /mnt -o username=lee,password=123
cd /mnt
touch file ##lee用户可以创建文件
mount //172.25.254.136/WESTOS /mnt -o username=westos,password=123
cd /mnt
touch file ##westos用户不能创建文件
touch: cannot touch ‘file’: Permission denied
指定用户组:
328 write list = +lee ##设定lee组的成员可写
usermod -G lee westos ##将westos添加到lee组里
测试:
mount //172.25.254.136/WESTOS /mnt -o username=lee,password=123
cd /mnt
touch file111 ##westos用户可以创建文件
-指定用户使用root权限
330 admin users = lee ##指定lee用户使用root权限
测试:
mount //172.25.254.136/WESTOS /mnt -o username=lee,password=123
cd /mnt
touch haha ##用lee用户创建文件haha
ll
-rw-r--r--. 1 root 1002 0 Nov 30 00:52 haha ##所有人是root
4.samba的多用户挂载
-理解多用户挂载
我们在使用autofs自动挂载的时候,用root用户,只要进入目录就会实现自动挂载
此时我们切换到student用户
cd /mnt/WESTOS
ls ##可以访问文件内容
这是十分不安全的。因为我并没有设定允许它访问
所以我们需要提高它的安全性,让通过认证的用户才可以访问
- 部署samba多用户挂载
yum install cifs-utils -y
vim /etc/auto.samba ##编辑策略文件
WESTOS -fstype=cifs,credentials=/root/smbpass,sec=ntlmssp,multiuser ://172.25.254.136/WESTOS 认证文件 认证方式 多用户挂载
vim /root/smbpass ##编辑认证文件
username=lee
password=123
systemctl restart autofs ##重启服务
测试:
此时切换到student用户:
cd /mnt/WESTOS
ls: reading directory .: Permission denied ##没有权限
cifscreds add -u westos 172.25.254.136 ##添加westos用户认证后,ls才可以查看到文件内容
注意:此处添加的westos用户是之前在设定smb用户时存在的,不是随意添加出来的
5.selinux开启情况下的samba
首先设定服务端selinux状态为enforcing
- 共享自建目录时的设定
当selinux为enforcing时,用测试端
cd /mnt/WESTOS
ls: reading directory .: Permission denied
在服务端设定安全上下文:
ls -Zd /sambashare
semanage fcontext -a -t samba_share_t '/sambashare(/.*)?' ##修改安全上下文
restorecon -RvvF /sambashare
再次在测试端ls就可以查看到文件内容了
- 共享本地目录时的设定
在服务端:设定共享目录文本地目录/mnt
cd /etc/samba
vim smb.conf
325 path = /mnt
测试:
cd /mnt/WESTOS
touch file
touch: cannot touch ‘file1’: Permission denied ##无法上传文件
在服务端设定布尔值:
getsebool -a | grep samba
setsebool -P samba_export_all_rw on ##设定开启全部读写权限
再次在测试端新建文件成功