|
NFS 工具简介
NFS(Network File System)工具是一组用于实现网络文件共享的开源组件,包含服务端与客户端程序。其核心工具包 nfs-utils 提供以下功能:
1.服务端工具
nfsd:NFS 守护进程,处理客户端文件请求。
rpc.mountd:管理挂载请求与权限验证。
exportfs:动态管理共享目录(如 exportfs -arv 重载配置)。
2.客户端工具
mount.nfs:挂载远程共享目录(支持 NFSv3/v4)。
showmount:查看服务端共享列表(如 showmount -e <IP>)。
3.辅助工具
rpcinfo:检查 RPC 服务状态(如端口映射)。
nfsstat:监控 NFS 性能与连接统计。
4.配置管理
通过 /etc/exports 定义共享规则,结合 systemctl 管理服务启停(如 nfs-server)。
NFS 工具支持跨平台文件共享,适用于 Linux/Unix 环境,需配合 rpcbind 实现 RPC 协议通信。其优势在于低配置成本和高性能,但需注意权限控制与防火墙设置(如开放 2049 端口)。
一、环境说明
Server B(NFS 服务端):
IP: 192.168.77.134
共享目录: /data/nfs_share
权限目标: 允许 Server A 完全读写(rw + no_root_squash)
Server A(NFS 客户端):
IP: 192.168.77.133
挂载目录: /mnt/nfs_data
Centos 9实验环境图片:
二、Server B(服务端)操作
1. 安装 NFS 服务端工具
- # 确认已安装 nfs-utils 和 rpcbind(若已安装可跳过, rpcbind兼容所有NFS版本,用于实现 RPC 协议通信V4及以上版本可不需要安装)
- yum install -y nfs-utils rpcbind
复制代码
2. 创建共享目录并设置本地权限
- # 创建目录并赋予最大权限(777)
- mkdir -p /data/nfs_share
- chmod -R 777 /data/nfs_share #后面挂载完分区,重新赋予一下权限
复制代码
3.输入lsblk查看本地磁盘详细情况
4.挂载本地磁盘sdb到/data/nfs_share:
- #格式化sdb磁盘ext4文件格式
- mkfs.ext4 /dev/sdb
复制代码
- #本机有单独一块20G的磁盘,磁盘名称sdb,将sdb挂载到/data/nfs_share目录
- #编辑 /etc/fstab
- vi /etc/fstab
- #添加以下行:
- /dev/sdb /data/nfs_share ext4 nodev,defaults 0 0
复制代码
df -h查看磁盘输出,data/nfs_share挂载情况
5. 配置 NFS 共享规则
- 编辑 /etc/exports:
- vi /etc/exports
- #添加以下内容(允许 Server A 完全读写):
- /data/nfs_share 192.168.77.133(rw,sync,no_root_squash,no_all_squash)
复制代码
其他情况说明补充:
指定多个独立 IP
/data/nfs_share 192.168.77.133(rw,sync,no_root_squash,no_all_squash) 192.168.77.135(rw,sync,no_root_squash,no_all_squash)
使用 CIDR 网段(推荐)
允许整个子网内的服务器访问(例如 192.168.77.0/24):
/data/nfs_share 192.168.77.0/24(rw,sync,no_root_squash,no_all_squash)
混合模式(IP + 网段):
/data/nfs_share 192.168.77.133(rw,sync,no_root_squash,no_all_squash) 10.0.1.0/24(rw,sync,no_root_squash,no_all_squash)
参数解释:
rw: 读写权限
sync: 同步写入磁盘
no_root_squash: 允许客户端 root 用户保持权限
no_all_squash: 不压缩其他用户权限
4. 启动 NFS 服务并设置开机自启(A服务器和B服务器共同配置)
- systemctl enable --now rpcbind nfs-server
- systemctl restart nfs-server
复制代码
5. 配置防火墙放行 NFS 服务(A服务器和B服务器共同配置)
- # 放行 NFS 相关服务
- firewall-cmd --permanent --add-service={nfs,rpc-bind,mountd}
- firewall-cmd --reload
复制代码- # 验证防火墙规则
- firewall-cmd --list-all | grep services
复制代码
6. 验证共享配置
- # 检查共享目录是否生效
- exportfs -arv
- showmount -e localhost
复制代码 预期输出:
/data/nfs_share 192.168.77.133
三、Server A(客户端)操作
1. 安装 NFS 客户端工具
2. 创建本地挂载目录
- # 创建目录并赋予最大权限(777)
- mkdir -p /mnt/nfs_data
- chmod 777 /mnt/nfs_data #后面挂载完分区,重新赋予一下权限
复制代码
3. 临时挂载测试
- mount -t nfs 192.168.77.134:/data/nfs_share /mnt/nfs_data
复制代码
4. 验证读写权限
- # 查看挂载状态
- df -hT | grep nfs
复制代码
df -h
- # 测试写入(以 root 用户创建文件)
- touch /mnt/nfs_data/test_root.txt
复制代码
成功标志:
文件 test_root.txt 和 test_nobody.txt 均能创建且无权限错误。
#ls -l /mnt/nfs_data查看成功新建的文件权限:
5. 配置开机自动挂载
- #编辑 /etc/fstab:
- vi /etc/fstab
- #添加以下行:
- 192.168.77.134:/data/nfs_share /mnt/nfs_data nfs defaults,_netdev,rw 0 0
复制代码
四、高级权限调优(可选,一般用不上)
1. 强制目录所有权(服务端)
若需客户端写入的文件归属特定用户/组,在 Server B 上操作:
- # 修改共享规则(例如强制归属用户 1000:1000)
- vi /etc/exports
- /data/nfs_share 192.168.77.133(rw,sync,all_squash,anonuid=1000,anongid=1000)
复制代码- #重启服务生效
- systemctl restart nfs-server
复制代码
2. 禁用 SELinux(如遇权限问题)
- # 永久禁用(需重启)
- sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
复制代码
五、故障排查命令
1. 服务端检查
- # 查看 NFS 服务状态
- systemctl status nfs-server
复制代码- # 检查 RPC 服务端口
- rpcinfo -p 192.168.77.134
复制代码- # 查看 NFS 共享日志
- tail -f /var/log/messages | grep nfs
复制代码
2. 客户端检查
- # 测试网络连通性
- ping 192.168.77.134
- telnet 192.168.77.134 2049
复制代码- # 查看挂载详情
- mount | grep nfs
复制代码- # 卸载目录(强制)
- umount -lf /mnt/nfs_data
复制代码
六、最终验证
服务端:
ls -l /data/nfs_share # 查看客户端创建的文件权限
客户端:
echo "test" > /mnt/nfs_data/test_write.txt # 写入测试
cat /mnt/nfs_data/test_write.txt # 读取测试
总结
权限最大化核心:
服务端 /etc/exports 使用 rw + no_root_squash。
本地目录权限 chmod 777。
持久化配置:
客户端 /etc/fstab 添加挂载条目。
防火墙与 SELinux:
确保防火墙放行 NFS 服务,按需调整 SELinux 策略。
按此流程操作后,Server A 将拥有 Server B 共享目录的完全读写权限。
|
|