3.9.2 NFS共享配置与权限控制

NFS(Network File System)用于在网络中共享目录与文件,服务端导出目录,客户端通过挂载访问。运维重点是导出配置、权限模型与故障定位。

原理草图(NFS共享与权限流向)

文章图片

1)服务端安装与基础配置
- 安装与启动(以 RHEL/CentOS 为例):

# 安装服务端组件
yum -y install nfs-utils rpcbind

# 启动并设置开机自启
systemctl enable --now rpcbind nfs-server

# 验证服务状态
systemctl status nfs-server --no-pager
  • 创建共享目录与权限(示例用户/组):
# 规划共享目录与专用用户
groupadd -g 9001 nfsgrp
useradd -u 9001 -g nfsgrp -M -s /sbin/nologin nfsuser

mkdir -p /srv/nfs/data
chown -R nfsuser:nfsgrp /srv/nfs/data
chmod 2770 /srv/nfs/data   # 2 代表继承组

2)/etc/exports 配置与命令解释
- 配置文件示例(完整可执行):

cat >/etc/exports <<'EOF'
/srv/nfs/data 10.0.0.0/24(rw,sync,root_squash,no_subtree_check)
/srv/nfs/pub  *(ro,async,all_squash,anonuid=65534,anongid=65534)
EOF

# 生效导出
exportfs -r

# 查看生效条目
exportfs -v
  • 关键参数说明(与上面示例一致):
  • rw/ro:读写/只读。
  • sync/async:同步/异步写入。
  • root_squash:客户端 root 映射为匿名用户。
  • all_squash:所有用户映射为匿名用户。
  • anonuid/anongid:匿名用户 UID/GID。
  • no_subtree_check:避免子目录校验性能损耗。

3)客户端挂载与参数含义
- 安装与手动挂载:

yum -y install nfs-utils

# 查看可导出目录
showmount -e 10.0.0.1

# 挂载
mkdir -p /mnt/data
mount -t nfs -o vers=4,hard,timeo=600,retrans=2 10.0.0.1:/srv/nfs/data /mnt/data
  • 参数解释:
  • vers=3/4:指定协议版本。
  • hard/soft:硬/软挂载,硬挂载更可靠。
  • timeo/retrans:超时与重试策略。
  • rsize/wsize:读写缓冲大小(性能调优时使用)。

  • 持久挂载(/etc/fstab):

cat >>/etc/fstab <<'EOF'
10.0.0.1:/srv/nfs/data /mnt/data nfs vers=4,hard,_netdev,nofail 0 0
EOF

# 验证
mount -a

4)权限与身份映射示例
- UID/GID 一致性检查(服务端与客户端都执行):

# 检查 UID/GID 是否一致
id nfsuser
getent group nfsgrp
  • 验证 root_squash 行为:
# 客户端以 root 写入测试
touch /mnt/data/root_test
ls -l /mnt/data/root_test
# 预期:文件属主映射为 nfsnobody 或匿名用户

5)常见故障排查(步骤+命令)
- 导出与网络:

# 服务端检查导出
exportfs -v
showmount -e localhost

# 服务状态
systemctl status nfs-server rpcbind --no-pager

# 防火墙放行(示例)
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload
  • 客户端挂载失败:
# 查看系统日志
journalctl -u nfs-server --no-pager | tail -n 50
journalctl -k --no-pager | tail -n 50

# 重新挂载并输出详细信息
mount -v -t nfs 10.0.0.1:/srv/nfs/data /mnt/data
  • 权限异常排查顺序:
    1. /etc/exports 是否匹配客户端网段
    2. exportfs -r 是否生效
    3. 防火墙与 SELinux(必要时执行 setenforce 0 验证)
    4. 目录权限与 UID/GID 是否一致

6)练习题(动手验证)
1. 在服务端创建 /srv/nfs/project,仅允许 10.0.0.0/24 读写,启用 root_squash
2. 客户端使用 vers=4 挂载并写入文件,验证属主是否被映射。
3. 修改导出为只读,客户端重新挂载后验证写入失败现象,并记录报错信息。
4. 配置 /etc/fstab 持久挂载,重启后确认自动挂载成功。