Linux修炼之旅第六章!
本章介绍了网络文件系统,对主流的软件samba,nfs和isscsi都有比较详细的使用说明和操作步骤。
快来看看吧
文章目录
实验开始前先准备两台实验主机
这里我们开启两台虚拟机
node1(126)
node2(226)
一、samba服务简介
服务启动脚本:
smb.service
主配置目录:
/etc/samba
主配置文件:
/etc/smb.conf
安全上下文:
samba_share_t
端口:
139
445
安装包:
samba
samba-common
二、samba的安装与启用
samba的安装
dnf install samba samba-common samba-client -y
samba服务启用
systemctl enable --now smb
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
测试
smbclient-L //172.25.254.100
当要输入密码时直接回车
三、samba用户的建立
samba用户必须是被地存在的用户
添加用户
smbpasswd -a westos
不存在的用户会创建失败
必须先去建立用户
然后就可以正常创建了
密码单独设置,与系统启动时的密码没有关系
查看用户列表
pdbedit -L
删除用户
pdbedit -x shy
测试
smbclient -L //172.25.254.100 -U westos
以用户身份访问
smbclient //172.25.254.100 -U westos
四、samba服务中对于selinux属性的调试
在访问用户家目录时会出现无法访问的情况
这是因为selinux的影响
遇到的问题效果
如何解决这个问题呢?
vim /etc/samba/smb.conf
文件中有一行
setsebool -P samba_enable_home_dirs on
将这一行复制出来运行
消除限制
就可以正常使用了
共享目录
在共享文件时也会遇到类似的问题
先新建一个分享目录
mkdir /westos_share
并查看权限信息
编辑文件
vim /etc/samba/smb.conf
在最后输入
315 [westos_share]
316 comment = westos share
317 path = /westos_share
重启服务
systemctl restart smb.service
此时我们去访问共享目录
smbclient -L //172.25.254.100 -U westos
就可以看到共享目录了
但是登陆进去以后并不能访问
可以看到报错与selinux有关系
怎么解决呢?
用户自己建立的目录如果需要通过smb共享,那么安全上下文必须指定
semanage fcontext -a -t samba_share_t '/westos_share(/.*)?'
restorecon -RvvF /westos_share/
然后就可以正常访问了
共享系统目录
共享系统目录如遇到问题并且报错时
需要在安全上下文中设定开启读/读写权限
开启读权限
setsebool -P samba_export_all_ro on
开启写权限
setsebool -P samba_export_all_rw on
五、samba的访问控制和常用参数剖析
writable = yes #可写
write list = westos #指定用户可写
write list = +westos #指定组可写
write list = @westos #指定组可写
valid users = lee #指定访问用户
valid users = +lee|@lee #指定访问组
browseable = yes|no #是否隐藏共享
map to guest = bad user #写到全局设定中
guest ok = yes #允许匿名用户访问
admin users = lee #指定此共享的超级用户身份呢
白名单
编辑主配置文件
vim /etc/samba/smb.conf
插入
hosts allow = 172.25.254.200
允许200这台主机访问
重启服务
systemctl restart smb.service
打开200主机访问测试
可以访问
再试试别的主机
可以看到访问被拒绝
黑名单
与白名单类似
在主配置文件中
vim /etc/samba/smb.conf
输入
hosts deny = 172.25.254.200
重启服务
systemctl restart smb.service
再去200主机中测试
发现不可以访问了
但是在另一台主机上
本来不可以,现在可以了。
单独配置
前面的黑白名单是针对全局的,单独目录的设置如何操作?
首先将前面的实验记录注释掉
然后在主配置文件中最下面增添内容
vim /etc/samba/smb.conf
316 [westos_share]
317 comment = westos share
318 path = /westos_share
319 hosts allow = 172.25.254.200
重启服务后,只对westosshare目录生效
隐藏资源
与上一部分步骤类似
vim /etc/samba/smb.conf
316 [westos_share]
317 comment = westos share
318 path = /westos_share
319 browseable = no
重启服务
systemctl restart smb.service
再去200主机中测试
可以看到被隐藏了
如果把配置文件中的no改为yes,就是显示
用户的设定
限定谁来登陆
实验中
此共享只能通过samba用户westos用户登陆访问
vim /etc/samba/smb.conf
316 [westos_share]
317 comment = westos share
318 path = /westos_share
319 browseable = yes
320 valid users = westos
重启服务
systemctl restart smb.service
再去不同主机中用westos用户登陆测试
都可以登陆
但是切换到shy用户
就不可以登陆了
用户组成员访问
如果在主配置文件中配置如下
vim /etc/samba/smb.conf
316 [westos_share]
317 comment = westos share
318 path = /westos_share
319 browseable = yes
320 valid users = @westos
就代表时组westos中的成员可以访问
重启服务后再进行测试
systemctl restart smb.service
将shy用户加入westos组
刚才不能使用的shy用户就可以登陆了
注意:虽然用户与系统中的用户不是一个概念
但是用户组是一个概念
使分享目录可写
在文件层面让所有用户都对westosshare目录可写
步骤:
注释掉上一步的内容
在客户端中挂载分享目录到mnt中
mount //172.25.254.100/westos_share /mnt/ -o username=shy,password=shy
尝试测试写文件
可以发现即使是满权限也会被拒绝
这时该怎么办呢?
首先卸载掉挂载
更改配置文件,使分享文件可写
vim /etc/samba/smb.conf
316 [westos_share]
317 comment = westos share
318 path = /westos_share
319 browseable = yes
320 # valid users = @westos
321 writeable = yes
重启服务
systemctl restart smb.service
再去客户主机中测试
mount //172.25.254.100/westos_share /mnt/ -o username=shy,password=shy
touch /mnt/file
可以看到这次成功了
在服务主机中也可以看到创建的文件
共享目录的写权限
与之前用户的设定中类似
编辑主配置文件
vim /etc/samba/smb.conf
316 [westos_share]
317 comment = westos share
318 path = /westos_share
319 browseable = yes
320 # valid users = @westos
321 writeable = yes
322 write list = shy
让文件只对shy用户可写
重启服务
systemctl restart smb.service
在客户端主机测试
分别用root和westos用户身份挂载
mount //172.25.254.100/westos_share /mnt/ -o username=westos,password=westos
mount //172.25.254.100/westos_share /mnt/ -o username=shy,password=shy
分别测试在mnt目录中创建文件
可以看到westos用户挂载时不可写,但是shy用户可写。
用户组的配置与用户组成员访问完全相同,在此就不多做赘述。
匿名用户
默认情况下匿名用户不能使用samba共享资源
如何操作让匿名用户可以访问挂载呢?
首先
这时把没有用户身份的用户都映射为guest账号
117 security = user
118 passdb backend = tdbsam
119 map to guest = bad user
在最后加上
323 guest ok = yes
写完以后重启服务
systemctl restart smb.service
在客户主机中测试
匿名用户访问
smbclient //172.25.254.100/westos_share
匿名用户挂载
mount //172.25.254.100/westos_share /mnt/ -o username=guest
六、samba服务与客户端的资源挂载优化
本实验在客户端去做
如果手动挂载samba共享到客户端的某个目录,当没有向服务器写入数据或浏览数据时这个挂载依然存在,在闲置时依然使用服务器资源,这就是资源浪费,我们现在应该设定客户端在使用时自动挂载,不用时自动卸载,这样才能最大化使用服务器。
步骤:
首先安装autofs,实现自动挂载和卸载
dnf install autofs -y
然后编辑主配置文件
vim /etc/auto.master
加上
/shy /etc/auto.share
后面的auto.share是自己命名的,修改这个文件
vim /etc/auto.share
写入
samba -fstype=cifs,username=shy,password=shy ://172.25.254.100/westos_share
就会自动生成一个目录shy
虽然看不见shy中的任何文件目录
但是可以直接进入shy中的samba
cd /etc/samba
这时就自动挂载上了
此时自动推出会自动卸载,但是默认时间为300s比较长
为了方便看到测试效果
修改时间为3s
vim /etc/autofs.conf
测试效果
七、samba的多用户挂载
在客户端如果用普通的挂载方式
没有用过用户验证的人也可以访问samba服务
如何解决这个问题呢?
首先安装cifs-utils
dnf install cifs-utils -y
然后编辑文件
vim /root/smbpass
username=westos
password=westos
只有当有正确用户密码的用户才可以正常访问
然后用如下命令进行挂载
mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.254.100/westos_share /mnt
其中
credentials=/root/smbpass
指定认证文件
sec=ntlmssp
指定认证类型
multiuser
支持多用户
测试效果
只有root用户可以访问已经挂载的mnt目录
如果切换到别的用户
可以输入如下内容解决
cifscreds add -u westos 172.25.254.100
输入这条指令需要输入正确的密码
测试效果
可以看到输入了正确用户密码的westos用户也可以正常访问mnt目录了。
八、NFS
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样,也就是说客户端PC可以挂载NFS服务器所提供的目录并且挂载之后这个目录看起来如同本地的磁盘分区一样,可以使用cp、cd、mv、rm及df等与磁盘相关的命令。
nfs-utils #安装包
nfs-server #服务脚本
/etc/exports #共享配置文件
nfs的启用
[root@westos_storage ~] dnf install nfs-utils.x86_64
[root@westos_storage ~] systemctl start nfs-server
[root@westos_storage ~] firewall-cmd --permanent --add-service=rpc-bind
success
[root@westos_storage ~] firewall-cmd --permanent --add-service=mountd
success
[root@westos_storage ~] firewall-cmd --permanent --add-service=nfs
success
[root@westos_storage ~] firewall-cmd --reload
success
测试
在客户端主机
showmount -e 172.25.254.100
识别成功
但由于还未放任何东西,所以无法列出。
nfs配置参数
anonuid=1000,anongid=1000 #指定用户身份
sync #更改生成后同步数据到服务器
async #时时同步数据到服务器
rw #读写
ro #只读
no_root_squash #root用户挂载不转换身份
nfs共享目录及客户端
nfs的共享
创建一个共享目录
mkdir /westosdir
使实验效果更直观
进行赋权操作
chmod 777 /westosdir/
编辑共享策略文件
vim /etc/exports
/westosdir *(ro,sync)
重启服务
exportfs -rv
创建一个测试文件
touch /westosdir/file
然后去客户端主机开始测试
showmount -e 172.25.254.100 #查看能否列出
mount 172.25.254.100:/westosdir /mnt/ #挂载共享目录
可以看到共享目录成功列出
挂载后文件也能成功读取
管理共享目录
让客户端可写
共享资源使用方式
vim /etc/exports
/westosdir *(ro,sync) 172.25.254.200(rw,sync)
然后重启服务
exportfs -rv
打开客户端测试
mount 172.25.254.100:/westosdir /mnt/
touch /mnt/westosfile
再回到服务主机查看
ls /westosdir/ -l
可以看到有文件
但是用户和组都是nobody
这是因为
当客户端挂载共享到本地目录后,使用到的用户身份时服务器上的nobody
如何改?
指定客户端在挂载时,使用的用户为1000,不是默认的nobody
vim /etc/exports
westosdir *(ro,sync) 172.25.254.200(rw,sync,anonuid=1000,anongid=1000)
然后再重新刷新
exportfs -rv
再去客户端主机测试
umount /mnt
mount 172.25.254.100:/westosdir /mnt/
touch /mnt/westosfile1
此时再在服务端主机查看权限,就可以发现可以显示到了
在客户端使用超级用户进行nfs资源挂载后沿用超级身份到服务
就将上个实验中
文件中的anonuid=1000,anongid=1000
更改为no_root_squash
其余操作步骤都一样
nfs和autonfs的自动挂载优化
在客户端安装自动挂载服务
dnf install autofs -y
编辑主挂载策略文件
vim /etc/auto.master
加上
/westos /etc/auto.nfs
编辑子策略文件,默认此文件不存在,需要自行建立
[root@westoslinux ~]# vim /etc/auto.nfs
输入
nfs -rw 172.25.254.100:/westosdir
然后就可以测试效果了
cd /westos/nfs
自动挂载
推出自动卸载
九、iscsi
实验开始之前先在服务主机中添加一块硬盘
分出来2G
iscsi的启用及客户端激活设备过程
首先安装服务
dnf install targetcli -y
开启服务
systemctl enable --now target
编写共享策略
targetcli
蓝色为目录
紫色为目录中的命令
依次输入
/backstores/block create westos:storage1 /dev/vdb1
/iscsi create iqn.2021-12.org.westos:storage1
iscsi/iqn.2021-12.org.westos:storage1/tpg1/luns create /backstores/block/westos:storage1
iscsi/iqn.2021-12.org.westos:storage1/tpg1/acls create iqn.2021-12.org.westos:westoskey
exit
调整火墙
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload
在客户端主机中
安装服务
dnf install iscsi-initiator-utils-iscsiuio.x86_64 -y
然后编辑文件
vim /etc/iscsi/initiatorname.iscsi
写入
InitiatorName=iqn.2021-12.org.westos:westoskey
重启服务
InitiatorName=iqn.2021-12.org.westos:westoskey
再输入
iscsiadm -m node -T iqn.2021-12.org.westos:storage1 -p 172.25.254.100 -l
就可以看到分配到的硬盘了
客户端的永久挂载
先对上个实验得到的硬盘进行分区和格式化
mkfs.xfs /dev/sda1
然后将硬盘挂载到mnt上
用命令查看uuid,用于永久挂载防止出错
mount /dev/sda1 /mnt
blkid
编辑文件
vim /etc/fstab
写入
UUID=ccde34e8-5120-4a11-8753-fc485f7c5834 /mnt xfs defaults,_netdev 0 0
这样就完成了永久挂载
iscsi的删除
首先在客户端中
1.删除 /etc/fstab 中的内容
2.tree /var/lib/iscsi/
查看信息
对照中间的浅蓝色信息
先登出,再删除
iscsiadm -m node -T iqn.2021-12.org.westos:storage1 -p 172.25.254.100 -u
iscsiadm -m node -T iqn.2021-12.org.westos:storage1 -p 172.25.254.100 -o delete
再查看就没有了
tree /var/lib/iscsi/
在服务端
targetcli
进入界面后输入ls查看
然后再输入清除指令
clearconfig confirm=True
就全部删除了