NFS 导出配置的风险点
NFS 是类 Unix 系统间共享目录的常用方式,服务端默认监听 2049(通常还依赖 rpcbind 的 111),导出范围由 /etc/exports 控制。配置不当时风险很直接:对全网段导出、使用 no_root_squash、读写权限放开,任何可达主机都能挂载共享目录,客户端 root 还能在服务端保持 root 身份,形成提权路径。
基本信息
| 端口 | 2049(NFS),111(rpcbind) |
|---|---|
| 配置文件 | /etc/exports |
| 关键选项 | rw/ro、sync、root_squash、no_subtree_check、sec |
| 核查命令 | showmount -e 目标地址 |
| 主要风险 | 任意挂载、越权读写、no_root_squash 提权 |
典型使用场景
- 共享盘评估:确认哪些目录被导出、授权给哪些主机
- 配置审计:逐条核对 /etc/exports 的授权范围与选项
- 快照与备份:确认备份主机是否有必要使用读写权限
- 容器与虚拟化:宿主向容器挂载 NFS 时的权限传递
- 迁移核查:老系统下线时确认导出关系已清理,不留悬空挂载点
加固示例(/etc/exports)
加固示例(/etc/exports)
/data/share 10.0.0.12(rw,sync,root_squash,no_subtree_check)
# 仅授权特定主机;root_squash 将客户端 root 映射为匿名用户
# 只读场景使用 ro;避免使用 no_root_squash
/data/backup 10.0.0.20(ro,sync,root_squash)
# 导出后重载:exportfs -ra (先 exportfs -v 查看生效结果)核查命令
核查命令
showmount -e 10.0.0.12 # 列出导出目录(仅限本方授权目标)
cat /proc/fs/nfs/exports # 本机当前导出情况
exportfs -v # 查看实际生效的选项
rpcinfo -p 10.0.0.12 # 查询注册的 RPC 服务与端口常用导出选项
| 选项 | 含义 | 安全取值建议 |
|---|---|---|
| rw / ro | 读写或只读 | 按最小需要,优先 ro |
| sync | 同步写入后再返回 | 保持 sync 避免数据丢失 |
| root_squash | 客户端 root 映射为匿名 | 默认保持开启 |
| no_root_squash | 客户端 root 保持 root | 避免使用 |
| subtree_check | 子目录检查 | 性能考虑可关闭,无安全收益 |
no_root_squash 会让客户端 root 在服务端保持 root 身份:一旦导出的是系统目录或可写目录,等于把服务端的一部分交给了客户端,涉及系统目录导出时风险尤其明显。
导出范围写通配(如 0.0.0.0/0 或 *)在审计里属于重点不合格项:任何可达主机都能挂载,且挂载后往往能读写共享内容。
NFSv3 依赖 rpcbind 的 111 端口,NFSv4 通常只需 2049:收敛前先确认协议版本,不同版本的端口与加固方式并不相同。