文件共享系统samba、nfs和iscsi
1、samba的多用户挂载
如果root用户使用自己的samba账号登陆后挂载到mnt,westos用户不用通过用户验证也可以看到共享的目录,这样显然是不合适的。还有命令中直接输入了账户和密码,mount查看或者history查看可以看到用户名和密码,很不安全。所以想独立使用samba账号,隐藏账户和密码,samba的多用户挂载。
首先dnf install cifs-utils -y
安装cifs-utils插件,创建存放root自己的samba用户名和密码的文件/root/smbpass
,chmod 600 /root/smbpass
只有root自己可以查看该文件,其他用户不能查看。挂载时用到credentials=/root/smbpass
这个参数,表示指定认证文件,不用直接输入用户和密码了,可以读取放密码的文件了。解决了隐藏账户和密码的问题
挂载时用到multiuser
这个参数,表示支持多用户,即没有通过认证的用户不能访问samba服务,现在root用户挂载好,westos就无法查看挂载了。
假如westos也有自己的独立账号呢?挂载时多加sec=ntlmssp
这个参数,表示指定认证方式,现在westos也可以用自己的samba账号登陆。刚开始切换过去被拒绝,westos用户用自己的samba账号认证cifscreds add -u westos 172.25.254.88
,输入正确密码后,就可以访问samba服务了。如果显示已经登陆了,记录的是之前的错密码,就cifscreds clearall
清空之前的缓存,重新认证。
2、autofs+samba
之前使用的这种挂载方法mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.254.88/xixi /mnt
只要挂载上,不论我们是否进行数据读写,都一直占用资源,这样不好,我们想对数据交互时,再挂载。首先在客户端安装autofs服务,编辑/etc/autofs.conf
主配置文件,默认是300秒,设定3秒后就失效
假如最终想挂载到/westos/samba
,不用提前创建/westos/samba
,编辑/etc/auto.master
主策略文件,添加最终挂载点的上层目录和自动子策略文件
编辑/etc/auto.samba
子策略文件,添加最终挂载点,挂载参数和挂载资源,samba -fstype=cifs,credentials=/root/smbpass,sec=ntlmssp,multiuser ://172.25.254.88/xixi
,systemctl restart autofs
重启autofs服务。
测试:重启autofs后,westos目录会自动被建立,但是没东西,可以看到现在没挂载,cd /westos/samba
进入子目录,看到共享文件了,df一查,自动挂载了。cd出来,等三秒,df挂载资源自动卸载。
以上的最终挂载点是三级目录,如果是直接挂载到/westos
这样的二级目录挂载,主策略文件不能写/
,要写/-
,并且子策略文件中要写绝对路径,不能写相对路经。如果samba验证延迟时,是解析的问题。
3、NFS(Net File System)
nfs也是用来共享文件的系统,比samba更安全,为什么呢?看下图,火墙允许了nfs,还不行,我们还需要允许rpc-bind,他的作用是随机分配端口,不是固定端口,这样更安全。还不够,还要允许mountd,他相当于nfs的大内总管,拿着分配的端口找mountd,他同意了,才能真正访问nfs。两边都安装nfs-utils
在服务端:
systemctl start nfs-server
开启nfs服务
firewall-cmd --permanent --add-service=rpc-bind
,firewall-cmd --permanent --add-service=mountd
,firewall-cmd --permanent --add-service=nfs
,firewall-cmd --reload
火墙允许
编辑 /etc/exports
文件,添加共享目录,共享给谁(共享参数),下图表示共享/westos
目录给所有人,权力是只读。exportfs -rv
刷新/etc/exports
文件。
在客户端:
showmount -e 172.25.254.88
就会显示所有共享的目录和策略,mount 172.25.254.88:/westos /mnt/
成功挂载
####nfs配置参数####
ro
只读
rw
读写,现在建立文件,用户是nobody
anonuid=1000
指定建立文件的用户身份(如果客户端和服务端的1000指的不是一个用户名,那么会不一致)
anongid=1001
指定建立文件的用户组(如果客户端和服务端的1001指的不是一个用户组,那么会不一致)
sync
更改生成后同步数据到服务器
async
时时同步数据到服务器
no_root_squash
以root用户挂载,不转换身份
4、autofs+nfs
和autofs+samba类似,首先在客户端安装autofs服务,编辑/etc/autofs.conf
主配置文件,设定3秒后就失效了,编辑/etc/auto.master
主策略文件
编辑/etc/auto.nfs
子策略文件,systemctl restart autofs
重启autofs服务。测试:重启autofs后,westos目录会自动被建立,
cd /westos/nfs
,df一查,自动挂载了,cd出来,等三秒,df挂载资源自动卸载。
如果共享目录里有五个子目录subdir1,subdir2,subdir3,subdir4,subdir5
想分别挂载到/westos/subdir1,/westos/subdir2,/westos/subdir3,/westos/subdir4,/westos/subdir5
里,怎么办?最直接就是在/etc/auto.nfs
子策略文件都写一遍
有更简单的方法吗?编辑/etc/auto.nfs
子策略文件如下,现在就算有1万个子目录也不怕。一条命令就搞定
5、iscsi
前面学的都是设备先mkfs.xfs做了文件系统,再共享文件系统,客户端mount挂载到一个设备上才能读写,我们能不能直接把一个设备的读写权限共享出来呢?
服务端(创一个新的硬盘vdb):
fdisk /dev/vdb
创建分区,dnf install targetcli -y
安装targetcli,开启target。正常是编写配置文件,但是这个的配置文件是json语言写的,难度大,所以借助管理命令targetcli
,建立内部共享名称,建立外部共享名称,关联内部和外部共享名称,建立访问控制的密钥。并且火墙允许iscsi端口。firewalld-cmd --add-port=3260/tcp
,重启火墙firewalld-cmd --reload
。
客户端:
dnf install iscsi-initiator-utils.x86_64 -y
安装服务,编辑配置文件 /etc/iscsi/initiatorname.iscsi
目的是给密码,systemctl restart iscsid
重启服务。iscsiadm -m discovery -t st -p 172.25.254.88
读取88主机的iscsi,iscsiadm -m node -T iqn.2021-06.org.westos:disk1 -p 172.25.254.88 -l
登陆设备,现在就成功使用该设备了。
测试:
fdisk -l
可以查看到/dev/sda
,mkfs.xfs /dev/sda
做系统,mount /dev/sda /mnt
挂载就可以使用了
客户端卸载时:
iscsiadm -m node -T iqn.2021-06.org.westos:disk1 -p 172.25.254.88 -u
临时登出,iscsiadm -m node -T iqn.2021-06.org.westos:disk1 -p 172.25.254.88 -o delete
删除设备
服务端删除:清除缓存,共享就取消了