nfs介绍:
网络文件系统,英文Network File System
samba实现的是windows和windows,windows和linux,linux和linux之间的共享。
nfs实现的是linux和linux,linux和unix,unix和unix之间的共享。
nfs基本信息
服务端软件:nfs-utils.x86.64 (rhel8系统默认已经安装)
服务脚本:nfs-server
共享配置文件:/etc/exports
nfs的启用
nfs基本工作原理
远程客户主机发送放松nfs资源请求-------->服务端主机rpc-bind分配端口---------->mount检测nfs是否有共享内容----------->nfs 检测客户主机是否满足访问条件---------->满足条件同意访问/etc/exports里的共享目录
所以要使用到的服务有 :mounted rpc-bind
systemctl start nfs-server 开启nfs服务
firewall-cmd --permanent --add-service=rpc-bind 将rpc-bind服务添加进火墙策略
firewall-cmd --permanent --add-service=nfs 将nfs服务添加进火墙策略
firewall-cmd --permanent --add-service=mountd 将mounted服务添加进火墙策略
firewall-cmd --reload 重新加载火墙策略
测试:
服务端主机ip:192.168.0.120
在服务端创建分享目录:
mkdir /nfsshare
编辑nfs共享配置文件:
vim /etc/exports
编辑完成后,保存退出。
使用exportsfs -rv
使更改生效。
在客户端使用命令:showmount -e nfs
主机ip 查看分享:
shoumount -e 192.168.0.120
成功查看nfs主机的分享。
nfs配置
配置文件:/etc/exports
此文件更改后使用exportfs -rv
生效
书写方式:
共享目录 共享给谁(参数)
===============================================
首先,我们在服务器主机给共享的目录满权限:
当前共享目录的共享参数为ro(只读)
在客户主机对共享目录进行挂载:
mount 192.168.0.120:/nfsshare /mnt/
挂载成功!
在共享文件内尝试建立新文件:
可以看到,新建文件失败,因为服务器共享配置文件/etc/exports里参数为只读。并不会因为共享目录本身的满权限而客户主机可写。
在服务端器共享配置文件/etc/exports里修改参数为读写:
编辑完成后,保存退出。使用exportfs -rv使更改生效。
返回客户主机,再次新建文件test:
新建成功!
nfs常用配置参数
可以使用man 5 exports 查看nfs共享参数:
参数 | 作用 |
---|---|
anonuid=1000,anongid=1000 | 指定用户身份 |
sync | 更改生成后同步数据到服务器 |
async | 时时同步数据到服务器 |
rw | 读写 |
ro | 只读 |
no_root_squash | root用户挂载不转换身份 |
指定用户身份 :
在服务端的动向目录可以看到,远程客户主机新建的文件使以用nobody的用户身份进行操作的:
现在,服务端主机有一个用户xng:
指定客户端使用xng用户身份进行操作:
编辑完成后,保存退出。使用exportfs -rv使更改生效。
在客户端在共享目录新建文件xngfile:
新建成功后,回到服务端查看:
可以看到,此时远程客户主机新建的文件是以xng用户身份建立。
root用户挂载不转换身份:
上边的实验我们知道,在没有指定用户的情况下,新建的文件都是以nobody的身份去新建,也就是说,客户主机所有用户在共享目录的的操作都是转换为nobody的身份进行。默认为no_all_squash。
可以在服务端位置文件/etc/exports添加参数no_root_squash,意为当超级用户挂载时,不去转换用户身份,还是以超级用户身份。
编辑完成后,保存退出。使用exportfs -rv使更改生效。
返回客户端,在共享目录新建文件test1:
回到服务端进行查看:
可以看到新建的test1文件的所有者和所有组为root,设定成功。
nfs+autofs
详细方法参照我的博客autofs章节