一、cifs文件系统原理
用户将注册信息写入系统,从不同的主机写入,如果主机挂了,导致存入的信息无法再次读取。
解决方法:
存储分离, 将所有信息存储到一个大容器中,主机做缓存,主机挂了,还可从别的主机直接从大容器中读取
系统在10主机,存储在100主机,实现文件与系统分离。
【1】SMB文件共享
用Internet 文件系统(CIFS)也称为服务器,是适用于MicrosoftWindows服务器和客户端的标准文件和打印机共享系统信息块(SMB)
Samba服务可用于将Linux文件系统作为CIFS/SMB网络文件共享进行共享,并将Linux打印机作为CIFS/SMB/打印机共享进行共享。
【2】Samba服务的组成部分
- 软件包:
Samba-common Samba的支持文件,操作中使用的工具、命令
Samba-client 客户端应用程序
Samba 服务器应用程序 - 服务名称: smb nmb
- 服务端口:通常使用TCP/445进行连接。还使用UDP137、UDP138和 TCP/139进行向后兼容
- 主配置文件:/etc/samba/smb.conf
- windows中: 左下角搜索—>//172.25.254.176
- linux中:如下
二、搭建共享系统
使用虚拟机desktop :
ip为172.25.254.176
【1】
yum search samba #寻找samba相关安装包
yum install samba-client.x86_64 #下载用来访问smb服务端
yum install samba-common.x86_64 #下载操作中使用的工具、命令
yum install samba.x86_64 #下载主服务器
【2】
rpm -qa samba #查看samba服务的版本
rpm -qc samba-common #查看samba服务的主配置文件
【3】
systemctl restart smb
netstat -antlupe | grep smb #查看开放端口及使用协议
smb端口139 445 TCP/UDP
默认TCP
【4】
firewall-cmd --permanent --add-service=samba #在防火墙中开启samba服务
firewall-cmd --permanent --add-service=samba-client #在防火墙中开启samba客户端服务
firewall-cmd --reload #刷新
创建smb用户
smb没有用户,默认不能使用,必须有smb用户(系统用户)
【1】
pdbedit -L #查看存在的smb用户
【2】
添加smb账户
useradd westos #床架新用户westos
useradd lee
smbpasswd -a westos #设置samba登陆密码
smbpasswd -a lee
【3】
pdbedit -L #查看smb用户
【4】
getenforce #查看selinux状态
enforcing #开启状态,安全
touch /home/westos/westosfile{1..3} #在westos家目录中创建文件
ll -Zld /home/westos #查看westos用户家目录属性
semanage fcontext -a -t samba_share_t '/home/westos(/.*)?' #永久设置目录及目录中所有安全上下文为
restorecon -RvvF /hoome/westos/ #重新刷新
客户端:
方法一:
【1】
yum install samba-client -y #客户端下载samba服务
【2】
smbclient -L //172.25.254.176 #匿名登陆,不需要输入密码,默认查看不到
【3】
smbclient -L //172.25.254.176 -U westos #使用测试端smb用户westos,查看到共享目录westos
【4】
smbclient //172.25.254.119/westos -U westos #使用smb用户westos登陆smb服务端
ls #查看共享目录中的文件
【5】
上传测试端文件到smb服务器上
!ls #查看可上传的内容
put anaconda-ks.cfg #上传存在的文件anaconda-ks.cfg
方法二:
【1】
yum install samba-client -y #客户端下载samba服务
【2】
smbclient -L //172.25.254.176 #匿名登陆,不需要输入密码,默认查看不到
【3】
smbclient -L //172.25.254.176 -U westos #使用服务端smb用户westos,查看到共享家目录westos
ctrl+D
【4】
mount //172.25.254.176/westos /mnt/ -o username=westos,password=westos #将176主机共享的smb服务挂载到客户端/mnt/,使用服务端smb用户westos用户密码为westos
【5】
cd /mnt/
ls #查看到主服务器端共享的文件
touch file{1..10}
smb服务器上:
cd /home/westos/
ls #可查看到上传的共享的内容,每一个smb用户默认共享自己家目录
三、samba的应用
1、samba主配置文件
rpm -qc samba-common #查看samba主配置文件
2、samba使用的域
主服务器:
vim /etc/samba/smb.conf #samba共享文件
[global]全局使用控制:
91 workgroup=WESTOS #修改samba所使用的域为WESTOS
systemctl restart smb.service
客户端测试:
smbclient -L //172.25.254.176 -U westos
3、客户端访问黑白名单
【1】白名单
(1)
vim /etc/samba/smb.conf
96 hosts allow = 172.25.254.20 #允许20主机登陆
systemctl restart smb.service
测试:
在172.25.254.76上:
smbclient -L //172.25.254.176 -U westos
#登陆失败,显示protocol negotiation failed:NT_STATUS_INVALID_NETWORK_RESPONSE
在172.25.254.20主机上:
smbclient -L //172.25.254.176 -U westos #登陆成功
(2)
vim /etc/samba/smb.conf
host allow = 172.25.254. #允许的网段
systemctl restart smb.service
测试:
在172.25.254.76上:
smbclient -L //172.25.254.176
在172.25.254.20主机上:
smbclient -L //172.25.254.176 -U westos
【2】黑名单
vim /etc/samba/smb.conf
hosts Deny = 172.25.254.20 #禁止的用户
systemctl restart smb.service
测试:
在172.25.254.20主机上:
smbclient -L //172.25.254.176 -U westos
#登陆失败,显示 protocol negotiation failed:NT_STATUS_INVALID_NETWORK_RESPONSE
在172.25.254.76主机上:
smbclient -L //172.25.254.176 -U westos
4、samba共享系统目录
只能更改自己创建的目录文件安全上下文
系统级目录的安全上下文不能直接更改安全上下文,影响别的服务使用需要打boolean值,不安全
用服务器用户身份创建目录,在服务器查看到的所有人所有组与客户端可能不同,但id相同
登陆用户名确定,新建的目录对应的用户不同,但服务端建立的目录所有人所有组id与登陆用户在服务端对应的id相同,在客户端与服务端看到的目录所有人与所有组不同
【1】开启selinux
vim /etc/sysconfig/selinux
selinux=enforcine
reboot #selinux开启与关闭之间转换需重启电脑
【2】
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory #说明
path = /westos_smb #目录存储路径
writable = yes #samba用户可写
systemctl restart smb.service
【3】
mkdir /westos_smb #创建共享目录
setfacl -m u:westos:rwx /westos_smb/ #本地服务可写
getfacl /westos_smb #查看权限
【4】
##将selinux设置为安全模式,开启状态,修改安全上下文,则可以在samba共享服务中查看到
semanage fcontext -a -t samba_share_t '/westos_smb' #修改安全上下文为samba_share_t 加载到内核中
restorecon -RvvF /westos_smb/ #刷新
【5】
客户端(desktop虚拟机)
mount //172.25.254.176/WESTOS /mnt/ -o username=westos,password=westos #挂载
ls /mnt #此时可查看
可写:
注:将selinux设置为开启模式时需修改安全上下文
系统文件不修改安全上下文时的设置:
【1】开启selinux
vim /etc/sysconfig/selinux
selinux=enforcing
reboot
服务端:
【1】
vim /etc/samba/smb.conf
[MNT]
comment = Share Directory #说明
path = /mnt #目录存储路径
writable = yes #samba用户可写
systemctl restart smb.service
touch /mnt/mntfile{1..3}
##此时客户端看不到文件
测试(客户端):
smbclient //172.25.254.176/MNT -U westos 登陆76主机MNT共享目录
服务端:
【2】
setfacl -m u:westos:rwx /mnt/ #本地服务可写
【3】
getsebool -a | grep samba #查看s状态下elinux开启zhuangsamba服务sebool值设置状态
setsebool -P samba_export_all_ro on #打开selinux可查看权限,此时客户端可查看,不能写
setsebool -P samba_exaport_all_rw on #打开selinux可写权限
注:开启bool则selinux对smb访问任何目录(安全上下文不同)时都不起作用
客户端:
getenforce
Disabled #客户端关闭selinux
mount //172.25.254.176/MNT /mnt/ -o username=westos,password=westos #挂载共享目录
cd /mnt/ #进入挂载目录下
ls #查看
touch mntfile{4..6} #新建文件
ls
测试:
服务端:
【1】
mkdir /lee #新建目录
chmod 777 /lee/ #给其777权限
【2】
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory #说明,可任意写·
path = /lee #目录存储路径
writable = yes #samba用户可写
systemctl restart smb.service
【3】
cd /lee/
touch leefile{1..3} #在共享目录下新建文件
ls -Zd /lee/ #安全上下文不同
客户端:
cd #返回根目录下
umount /mnt #解挂
df #查看挂载情况
mount //172.25.254.176/WESTOS /mnt/ -o username=westos,password=westos #重新挂载
cd /mnt #进入挂载点目录
ls #查看
touch leefile{4..6} #新建文件
ls
#此时可上传下载删除
服务端查看:
服务端也已经上传
cd /lee #进入共享目录
ls #查看
5、设置权限
browseable = no #默认-L查看时可列出目录,设置为no则隐藏
write list = +lee #只对lee用户组可写, + @ 表示组内成员
valid users = +lee #谁能登陆,不能登陆则挂载不上
map to guest = bad user #将所有匿名用户映射为guest
guest ok = yes #匿名用户可访问
admin users = westos #westos是目录的拥有着,当作超级用户
测试:
【1】
服务端:
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory #说明
path = /westos_smb #目录存储路径
browseable = no
systemctl restart smb
客户端:
smbclient -L //172.25.254.119 -U westos
【2】
服务端:
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory #说明
path = /westos_smb #目录存储路径
write list = +lee
systemctl restart smb
测试:
服务端:
id westos
客户端:
mount //172.25.254.119/WESTOS /mnt/ -o username=westos,password=westos
新建文件
touch file2
服务端:
将westos用户添加到lee用户组中
客户端:
【3】
服务端:
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory #说明
path = /westos #目录存储路径
valid users = +lee #lee组成员登陆,不能登陆则挂载不上
systemctl restart smb
测试:
服务端:
id westos
客户端
mount //172.25.254.119/wWESTOS /mnt/ -o username=westos,password=westos
#挂载不上
服务端:
usermod -G lee westos #将westos添加到lee组中
id westos
客户端:
mount //172.25.254.119/WESTOS /mnt/ -o username=westos,password=westos
#此时可挂载
【4】
服务端:
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory #说明
path = /westos #目录存储路径
map to guest = bad user #将所有匿名用户映射为guest
guest ok = yes 匿名用户可访问
systemctl restart smb
测试:
smbclient //172.25.254.176/WESTOS #可登陆
6、smb多用户挂载
当student用户直接可以查看root用户挂载在/mnt的东西时,这样是很不安全的
应该客户端地每一个用户在smb服务端均有自己的用户
root---->westos
student----->lee
客户端:
设置密码文件(保护密码)
【1】
yum install cifs-utils -y
vim /root/smbpassword
mount //172.25.254.176/WESTOS /mnt -o credentials=/root/smbpassword #以认证方式挂在,不裸露samba用户身份
mount #依然可以查看到挂载用户
vim /root/smbpassword #创建密码文件
【2】
su - student #切换到本地用户
cd /mnt
ls #依然可查看到smb共享文件
保护浏览:
认证时使用哪个用户哪个就是客户端主机用户上传下载文件所有人所有组
sec=ntlmssp 认证方式(加密方法),单独使用不加密,所有用户均可查看
multiuser 多用户认证(加密意图),单独使用时不起作用,所有用户均可查看
两个一起使用,达到多用户认证,认证过的才有权限
服务端:
【1】
vim /etc/samba/smb.conf
[WESTOS]
comment = Share Directory #说明
path = /westos_smb #目录存储路径
writable = yes
admin users =westos
systemctl restart smb
【2】
chmod 777 /westos_smb #设置权限使其他人有执行权力
客户端:
【1】
umount /mnt #解挂
mount //172.25.254.119/WESTOS /mnt/ -o credentials=/root/smbpassword,sec=ntlmssp,multiuser #以密码认证方式挂载
【2】
su - student
ls #此时本地用户查看不到smb共享文件,安全性提高
多用户挂载:
为student用户创建挂载用户
cifscreds --help #查看多用户挂载命令的用法
cifscreds add -u lee 172.25.254.176 #为本地用户创建挂载samba用户lee
ls
touch file4
ll
#1002为服务端用户lee的id
注:
如果使用cifscreds add -u lee 172.25.254.119 输错密码时,需要使用
cifscreds clearall
cifscreds add -u lee 172.25.254.119
7、实现永久挂载
vim /etc/fstab
//172.25.254.176/WESTOS /mnt cifs defaults,credentials=/root/
smbpassword,sec=ntlmssp,multiuser 0 0
mount -a
df