NFS 与 2049 端口
2049 是 NFS(网络文件系统)的服务端口。NFSv3 依赖 rpcbind(111)做端口发现,还需要 mountd、statd 等辅助服务配合;NFSv4 把这些收敛到 2049 单端口,且不再依赖 rpcbind 与锁服务。默认的认证方式是 AUTH_SYS,它只根据客户端上报的 UID 与 GID 判断权限,客户端可以自行伪造,因此 NFS 只能放在可信网络内,并配合 root_squash 等参数使用。
基本信息
| 服务 | NFS(内核 nfsd、NAS 设备、商业存储) |
|---|---|
| 协议 | TCP/UDP(NFSv4 统一使用 2049) |
| 版本差异 | v3 依赖 111 与辅助端口,v4 收敛到单端口 |
| 配置文件 | /etc/exports,配合 exportfs 生效 |
| 权限模型 | 默认 AUTH_SYS 基于 UID,可选 sec=krb5 系列 |
| 安全等级 | 仅限受控网段 |
典型使用场景
- 多台 Linux 主机共享数据目录,避免各自维护副本
- 虚拟化平台存放镜像与虚机磁盘,由集中存储统一供给
- NAS 设备向业务网段提供共享盘,用于文件与备份存放
- 容器或计算节点挂载共享数据卷,运行期间读取同一份数据
- 跨主机日志与中间件数据目录共享,便于统一切换节点
导出列表与挂载检查
导出列表与挂载检查
showmount -e 10.0.0.20 # 列出对端导出目录与允许网段(常见的枚举入口)
exportfs -v # 在服务端复核生效的导出参数
mount -t nfs4 10.0.0.20:/data /mnt/data # NFSv4 挂载
mount -t nfs -o vers=4.2 10.0.0.20:/data /mnt/data # 明确指定版本
mount | grep /mnt/data # 确认挂载选项与版本是否与预期一致导出参数与作用
| 参数 | 作用 | 注意事项 |
|---|---|---|
| rw / ro | 读写或只读导出 | 只读能满足就只读,减少被篡改与勒索面 |
| sync | 写操作落盘后返回 | 比 async 安全,性能略有代价 |
| root_squash | 远程 root 映射为匿名用户 | 默认必须保留,否则等于交出文件所有权 |
| no_subtree_check | 关闭子树检查 | 提升稳定性,但需自行保证目录结构一致 |
| sec=krb5p | 启用 Kerberos 并加密传输 | 需域环境支持,配置成本较高 |
NFSv4 单端口收敛
NFSv4 单端口收敛
# NFSv4 只需放行 2049,不再需要 111 与动态端口
rpcinfo -p localhost | grep -E 'nfs|mountd' # 确认本机仍在注册的 RPC 服务
systemctl disable --now rpcbind rpcbind.socket # 无 NFSv3 需求时可停用 rpcbind
firewall-cmd --add-service=nfs --permanent && firewall-cmd --reload导出配置示例(/etc/exports)
导出配置示例(/etc/exports)
/data 10.0.0.0/24(rw,sync,root_squash,no_subtree_check) # 按网段授权,不要写通配
/backup 10.0.0.31(ro,sync) # 只读给备份主机
# 改完执行 exportfs -ra 生效,再用 exportfs -v 复核exports 中写成通配符或关闭 root_squash 时,任意可达客户端都能挂载并写入共享目录,这也是勒索病毒在共享存储上快速蔓延的常见路径。
版本差异带来的排查差异:NFSv3 需要 111、mountd 与 statd 多个端口同时可达,只放行 2049 会出现挂载卡死;NFSv4 只需要 2049,且锁管理内置,排查时先确认客户端实际协商到哪个版本。
改完 /etc/exports 必须执行 exportfs -ra 才生效,配置改动未生效却当成权限问题来查,是这类故障里最常见的误判。