首页/安全/安全加固速查/NFS 导出最小化(exports 白名单)
服务与端口收敛50 条

NFS 导出最小化(exports 白名单)

NFS 天然信任客户端:exports 必须限定网段并启用 root_squash,绝不用通配符对全网导出。

安全加固速查安全更新于 2026-10-13

NFS 的信任模型决定了加固方式

NFS 的访问控制建立在客户端标识上,服务器信任客户端上报的 UID 与 GID,因此 exports 里的来源限定与 root_squash 是第一道也是最重要的防线。正确做法是把导出限定到具体网段、启用 root_squash 阻止客户端 root 直接映射为服务端 root,对只读共享显式写 ro。出现对全网通配符导出时,等于把文件系统交给任何能连到 2049 端口的主机。

基本信息

适用平台Linux(nfs-utils 或 nfs-kernel-server)
配置文件/etc/exports 与 /etc/exports.d/*.exports
关键选项ro/rw、sync、root_squash/no_root_squash、all_squash、no_subtree_check
生效方式exportfs -ra 重新导出,exportfs -v 查看生效结果
风险等级高

典型使用场景

  • 共享存储加固:把导出范围从全网收敛到应用网段
  • 合规核查:确认所有导出均启用 root_squash
  • 权限最小化:只读共享统一写 ro,避免误写
  • 故障排查:客户端挂载失败时对比导出选项与网段
  • 变更评估:新增共享前确认来源网段与读写需求

核查与收紧

核查与收紧
exportfs -v                          # 查看当前生效的导出与选项
cat /etc/exports; ls /etc/exports.d/ 2>/dev/null
# 示例(限定网段、只读可选、启用 root_squash):
# /data 10.0.1.0/24(rw,sync,no_subtree_check,root_squash,no_all_squash)
# /backup 10.0.1.0/24(ro,sync,root_squash)
exportfs -ra                         # 重新导出,使配置生效
showmount -e localhost                # 从本机确认对外暴露的共享列表

常用选项读法

选项含义正常与异常
rw读写导出仅在确有写入需求时使用
ro只读导出备份与只读数据推荐
root_squash客户端 root 映射为匿名基线要求,缺失即高危
no_root_squash保留客户端 root 权限等于把 root 权限交出,必须整改
sync写入落盘后再应答比 async 更安全,性能换安全
exports 里出现 *(rw,no_root_squash) 等于把 root 权限白送:发现即整改,并回溯历史访问记录评估数据影响。

落地要点

  • 来源一律写成网段或具体地址,避免使用通配符
  • 只读共享显式写 ro,减小误删与勒索加密的影响面
  • 导出变更后用 exportfs -v 复核生效结果,而不是只看配置文件
  • NFSv3 环境注意端口放行:除 2049 外还涉及 rpcbind 与辅助端口
  • 把导出台账纳入变更管理,记录用途、责任人与复核时间
NFSv4 只需 2049 端口且不再依赖 rpcbind;混用版本时按实际版本规划防火墙规则,避免偶发挂载失败。

易错点

  • 为图方便写 no_root_squash:任何客户端都能以 root 身份写入文件,权限模型失效
  • 使用通配符导出:内网任意主机都可挂载,横向移动成本极低
  • 只改配置文件不重新导出:exportfs -v 显示的仍是旧选项,排查容易被误导
  • 防火墙只放 2049 而环境仍用 NFSv3:rpcbind 与辅助端口被挡,表现为偶发挂载失败

数据来源与参考

  • man 5 exports
  • CIS Benchmark:NFS 条目

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌