网络文件系统是应用层的一种应用服务,它主要应用于Linux和Linux系统、Linux和Unix系统以及Linux和Windows系统之间的文件或目录的共享
网络文件系统实现了存储分离,这一技术的本质时共享文件系统个的读写权限,而不是将文件系统下载到客户端主机以达到共享目的
存储分离的意义在于:磁盘共享、存储共享、数据资源共享、容灾
实现资源共享的服务主要有samba、nfs、iscsi等
本章节的实验环境:
虚拟机westosa==samba/nfs服务端;IP=172.25.254.100
虚拟机westosb==samba/nfs客户端;IP=172.25.254.200
一、samba服务
1、samba服务简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件(亦可用于Linux和Windows之间),由服务器及客户端程序构成;SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务
SMB协议是客户机/服务器型协议,主用于Linux中;客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源;通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源
CIFS是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务;CIFS 使用客户/服务器模式,客户程序请求远在服务器上的服务器程序为它提供服务,服务器获得请求并返回响应;CIFS是公共的或开放的SMB协议版本,并由Microsoft使用;像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层;CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现
2、samba服务的基本信息
服务启动脚本:smb.service
主配置目录:/etc/samba
此目录下的 smb.conf.example 为主配置文件的范本(模板)
主配置文件:/etc/samba/smb.conf
安全上下文:samba_share_t
端口:139 | 445
安装包:
samba ##服务主体
samba-common ##用到的配置文件
samba-client ##客户端
3、samba的安装与启用
安装:
dnf install samba samb-common samba-client
##samba-client是客户端使用软件,samba服务端主机可选装
启用:
systemctl enable --now smb(.service)
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
客户端测试:
列出100共享的资源
此处还未设置root用户的密码,可以直接回车后查看
4、samba用户的建立
smbpasswd -a wang ##添加用户
(此交互界面需要设置密码,此密码与wang的系统用户密码无关)
pdbedit -L ##查看samba服务的用户列表
pdbedit -x wang ##删除samba服务中的用户
!!!samba用户必须是本地存在的用户,否则无法建立
4、samba用户访问家目录
找到家目录
selinux开启时访问家目录时受限
解决办法:setsebool -P samba_enable_home_dirs——>on/1
5、samba服务共享目录
共享步骤:建立共享目录并创建共享文件——>>修改共享目录的安全上下文——>>编辑共享配置文件——>>重启smb服务
客户端测试:smbclient //172.25.254.100/‘共享名称’ -U wang
当共享系统目录时,不能任意修改系统目录的安全上下文为samba的安全上下文,因为修改后其他需要访问此目录的系统服务就无法访问了
此时可用通过控制sebool中的samba_export all ro的开关来设置共享是否能被看到
samba_export all ro==on
##可以查看==selinux对samba服务访问文件的安全上下文不再进行限制
samba_export all ro==off
##查看不到==selinux对samba服务访问文件的安全上下文进行限制
samba_export all rw==off/on
##访问时不可写/访问时可写
6、samba的访问控制
通过在samba配置文件中添加内容来实现访问控制
白名单:hosts allow = 172.25.254.200
黑名单:hosts deny = 172.25.254.200
!!!
当将此内容写至下方时,此名单对samba服务整体生效
当将词内容写至单独的共享资源说明下时,此名单只对此共享资源生效
!!!
7、samba的常用配置参数
writable = yes ##所有用户可写
write list = westos ##指定用户可写
write list = @westos/+westos ##指定用户组可写
valid users = lee ##指定访问用户
valid users = +lee/@lee ##指定可以访问的用户组
browseable = yes|no ##不隐藏/隐藏共享
map to guest = bad user ##写到全局设定中
guest ok = yes ##允许匿名用户访问
admin users = lee ##指定此共享的超级用户身份
!!!指定访问的用户不仅需要在系统中存在;还需要在samba服务用户名单中存在
8、samba服务*享资源的自动挂载和卸载
samba服务*享出来的资源是被客户端用户通过挂载来进行使用的,而使用mount命令进行挂载时,用户使用完共享资源后如不手动卸载的话会一直处于挂载状态;而这个问题可以通过autofs.service这个客户端服务解决,实现共享资源被使用时自动挂载,未使用时自动卸载
操作步骤:
首先明确我们自动挂载的目的
mount //172.25.254.100/westosa-share /mnt/samba -o username=wang,password=westos
客户端安装autofs并启用
编辑autofs服务挂载主策略文件
/mnt ##最终挂载点的上级目录
/etc/auto.gongxiang ##自动挂载子策略文件(系统中默认不存在,可自定义)
编辑此自动挂载子策略文件
格式:最终挂载点(可以不存在) 挂载参数 挂载资源
重启autofs服务后测试效果
自动挂载成功!!
编辑autofs服务的主配置文件可以设置共享资源的自动卸载时间(默认自动卸载时间为300s)
设置完成后重启autofs服务,从挂载目录切换出来5秒之后,共享资源自动卸载
9、samba的多用户挂载
在客户端挂载共享资源时,客户端主机系统内的未通过用户验证的普通用户也可以使用此共享资源
在这种情况下可以通过在挂载时添加用户验证来限制普通用户对共享资源的使用权限
操作步骤:
安装多用户认证安全插件:dnf install cifs.utils
将挂载时需要指定的挂载参数写到文件中被设定相应权限以提高使用共享资源的安全性
使用指定安全参数挂载共享资源
credentials=/root/smbpass ##指定认证文件(隐藏挂载使用的用户及密码)
multiuser ##多用户认证参数(没有通过认证的用户不可以使用共享资源)
sec=ntlmssp ##指定认证类型
挂载完成,切换到普通用户测试
当输错密码时可以使用 cifscreds clearall 清空密码缓存以可以重新认证
当遇到此报错信息时
可以使用以下两条命令来解决:
二、NFS服务
1、NFS服务简介
NFS(Net File System)即网络文件系统,它是由SUN公司研制的UNIX表示层协议,能够使客户端主机访问网络上其余主机的文件系统资源;NFS的数据传输优化和安全性能要比samba好,其客户端和服务端组件是一体的,其服务由软件包 nfs-utils 提供,默认使用的是2049端口
nfs被访问时的工作流程如下图
当客户端主机访问NFS服务器上的共享资源时,会先访问服务器上的rpc-bind服务,rpc-bind会为客户端主机分配一个随机的访问端口号,客户端主机使用该端口号进一步访问服务器上的mounted软件,mounted软件负责对NFS服务器上所有共享资源进行控管,当客户端主机需要访问的共享资源存在时,mounted程序会进一步带领客户端主机通过2049端口访问NFS服务的共享资源,由于rpc-bind为客户端主机分配的访问端口号是随机的,因此NFS的安全性能要比samba好
2、NFS服务基本信息
nfs-utils ##安装包(客户端和服务端使用同一安装包)
nfs-server ##服务名称
2049 ##服务端口号
/etc/exports ##共享策略文件
3、NFS服务的安装与启用
安装nfs-utils并启用nfs-server;在火墙中添加服务nfs、mountd、rpc-bind
4、NFS共享配置
编辑NFS共享策略文件 /etc/exports(此文件默认为空)添加共享策略;使用命令 exportfs -rv 使共享策略生效
共享策略格式:共享目录 共享对象(共享参数)
客户端测试
5、NFS共享配置参数
anonuid=1000,anongid=1000 ##指定用户身份(不指定时默认是nobody用户身份)
sync ##更改生成后同步数据到服务器
async ##时时同步数据到服务器
rw ##读写
ro ##只读
no_root_squash ##客户端使用root用户身份挂载时不转换身份(延用root身份)
6、NFS服务*享资源的自动挂载和卸载
同samba一样,NFS也可以使用autofs.service来实现共享资源被使用时自动挂载,未使用时自动卸载
操作步骤:
首先也是先明确我们自动挂载的目的
mount 172.25.254.100:/gongxiang /mnt/nfs
客户端安装autofs并启用
编辑autofs服务挂载主策略文件
/mnt ##最终挂载点的上级目录
/etc/auto.nfsgongxiang ##自动挂载子策略文件(系统中默认不存在,可自定义)
编辑此自动挂载子策略文件
格式:最终挂载点(可以不存在) 挂载参数 挂载资源
重启autofs服务后测试效果
自动挂载成功;同样也可像samba那样在autofs服务配置文件中设置共享资源的自动卸载时间;这里就不再赘述了
三、iscsi服务
samba和NFS共享的是文件系统的读写权限,iscsi是直接共享设备的读写权限
iscsi服务端共享设备建立
1、在服务器主机中添加一块新磁盘/dev/vdb,并为其分区生成/dev/vdb1
2、安装iscsi共享设备策略管理软件targetcli并启用target服务
3、使用targetcli编写设备共享策略
ls看到的蓝色部分是目录;紫色部分是目录中的命令
/backstores/block create westos:storage1 /dev/vdb1
##建立内部共享名称;westos:storage1==系统中真实设备/dev/vdb1在此软件中的设备别名
/iscsi create iqn.2021-08.org.westos:storage1
##建立对外的共享名称;使用iqn的命名方式;iscsi限定名称,格式:iqn.YYYY-MM.域名反写.设备别名(Y=year;M=month)
iscsi/iqn.2021-08.org.westos:storage1/tpg1/luns create /backstores/block/westos:storage1
##把共享名称和内部指定设备关联
iscsi/iqn.2021-08.org.westos:storage1/tpg1/acls create iqn.2021-08.org.westos:westoskey
##为共享设备设定访问key;westoskey==加密字符
以上所有设定都会保存在 /etc/target/saveconfig.json 文件中
4、在火墙中添加iscsi服务使用的端口以使客户端可以访问
iscsi客户端测试及使用
1、在iscsi服务客户端安装iscsi客户端软件 iscsi-initiator-utils
2、使用命令 iscsiadm -m discovery -t st -p 172.25.254.100 查看iscsi服务共享的设备
3、登陆共享设备
-T ##指定要访问的共享设备名称
-l ##登陆共享设备
此时在客户端未指定服务端的共享key所以导致登录失败
4、在 /etc/iscsi/initiatorname.iscsi 文件中指定共享key
5、重启iscsid服务后重新登陆设备==登陆成功
6、fdisk -l 可以看到iscsi服务共享出来的设备
7、共享设备使用
【1】格式化设备:mkfs.xfs /dev/sda
【2】挂载设备:mount /dev/sda /mnt
【3】共享设备的自动挂载:vim /etc/fstab
网络设备因为网络的缘故可能会发生设备名称变动,故此处挂载时使用id指定挂载设备
挂载参数:_netdev ##指定系统在读取此挂载策略时先启动网络和iscsi服务然后再执行挂载
8、客户端共享设备的移除
【1】卸载设备:umount /westos
【2】删除挂载策略文件中的相关挂载策略
【3】退出登陆网络共享设备
退出登陆后设备会消失,但共享设备数据还在,重启iscsi服务后共享设备会重新出现
【4】再次退出后删除共享设备数据,再次重启iscsi服务后共享设备就彻底消失了
9、iscsi服务端共享设备的移除
使用 clearconfig confirm=True 命令在targetcli界面移除共享设备