首页/系统与基础设施/存储速查/Kerberos 认证下的 NFS 安全访问
NAS 与文件共享50 条

Kerberos 认证下的 NFS 安全访问

NFS 的 sec=krb5 系列用 Kerberos 票据替代「相信 IP 与 UID」的信任模型,提供认证、完整性校验或全链路加密。落地难点集中在主体名、keytab、时钟同步与身份映射四处。

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

为什么需要 Kerberos 版的 NFS

sec=sys 模式下服务端无条件相信客户端报上来的 UID:只要网络可达、伪造请求的 UID,就能以别人身份读写共享。Kerberos 把这一步换成可验证的票据:客户端先向 KDC 证明自己是谁,服务端再用自己的 keytab 验证票据,最后通过 idmap 把 Kerberos 主体映射成本地 UID。它同时解决了「对端是谁」和「流量是否被篡改」两个问题。

基本信息

适用平台Linux NFSv4 服务端与客户端 + MIT Kerberos(或 AD 提供的 KDC)
服务端要件rpc.gssd、rpc.svcgssd、nfs/<主机名> 主体与 keytab
客户端要件kinit 可获取票据、rpc.gssd、nfsidmap 在运行
挂载参数sec=krb5、sec=krb5i 或 sec=krb5p
关键前提双向 DNS 解析正确、主机时钟偏差在阈值内

三种安全级别对照

sec 值提供的能力适用场合
krb5身份认证内网共享,只关心「谁在访问」
krb5i认证加完整性校验需要防止流量被篡改
krb5p认证、完整性加全载荷加密跨不可信网络访问数据

服务端与客户端要点

服务端与客户端要点
# 服务端导出必须显式声明 sec,否则客户端协商会回落到 sys
/data/secure *(rw,sync,sec=krb5p,root_squash)
# 服务端确认主体与 keytab(键表路径以实际发行版为准)
klist -k /etc/krb5.keytab | grep nfs
# 客户端取票据后再挂载,并确认协商到的安全模式
kinit -k -t /etc/krb5.keytab host/client01.example.com@EXAMPLE.COM
mount -t nfs -o vers=4.2,sec=krb5p 10.0.0.10:/data/secure /mnt/secure
cat /proc/mounts | grep secure

身份映射检查

身份映射检查
mount -t nfs -o vers=4.2,sec=krb5 10.0.0.10:/data/secure /mnt/secure
ls -ln /mnt/secure    # 若属主显示 nobody,说明 idmap 没映射到本地账号
nfsidmap -c           # 清理映射缓存后重试,避免旧映射干扰判断
systemctl status rpc-gssd nfs-idmapd   # 确认相关守护进程在运行
服务端导出里的 sec 列表与客户端挂载参数必须覆盖到同一个安全级别。只写 sec=krb5p 而客户端请求 krb5,协商会失败;也不要把 sec 省略后依赖默认值,否则可能静默回落到 sys,加密等于没开。
keytab 里含服务端的长期密钥,泄露即等于任何主机都能冒充这台 NFS 服务器。文件权限要限制到只有相关守护进程可读,不要复制到业务目录或纳入普通代码备份。

易错点

  • 主机时钟偏差过大:Kerberos 票据被判定无效,挂载直接失败,而报错通常只提认证失败,容易被误判成网络问题
  • 客户端与服务端主机名、DNS 正反向解析不一致:主体名对不上,认证无法通过
  • 导出与挂载的 sec 级别不匹配或漏写:协商失败或静默回落到 sys,安全目标落空却没有任何告警
  • idmap 未配置或缓存陈旧:认证成功但文件属主全是 nobody,业务按属主划分的权限设计失效
  • 只给服务端配 keytab 而忽略了客户端的票据获取方式:手工 kinit 的票据过期后访问中断,需要配合 gssd 的 keytab 能力

数据来源与参考

  • RFC 4120《Kerberos V5 网络认证协议》
  • RFC 2203《RPCSEC_GSS 协议规范》
  • MIT Kerberos 官方文档与红帽《sec=krb5 NFS 配置》指南

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/kerberos-nfs-secure-access.html

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