Kerberos认证的NFSv4导出目录仅首次挂载成功,客户端重启后无法挂载,提示权限拒绝与额外预认证要求
Kerberos认证的NFSv4导出目录仅首次挂载成功,客户端重启后无法挂载,提示权限拒绝与额外预认证要求
问题场景
用户在两台Ubuntu 22.04主机上配置Kerberos加密(krb5p)的NFSv4服务:
- 服务器:
enya.colonelpanic.local(物理机,全新Ubuntu Server 22.04) - 客户端:
imogen.colonelpanic.local(虚拟机,从18.04升级到22.04)
首次配置完成后能成功挂载NFS目录,但客户端重启后再执行挂载命令,会提示:
mount.nfs4: access denied by server while mounting enya.colonelpanic.local:/mnt/foo
同时服务器Kerberos日志(/var/log/kerberos/krb5kdc.log)出现:
NEEDED_PREAUTH: nfs/imogen.colonelpanic.local@COLONELPANIC.LOCAL for krbtgt/COLONELPANIC.LOCAL@COLONELPANIC.LOCAL, Additional pre-authentication required
排查过程
用户做了一系列针对性排查:
修复Kerberos日志写入权限
发现/var/log为只读文件系统,导致Kerberos日志无输出。修改/lib/systemd/system/krb5-kdc.service和/lib/systemd/system/krb5-admin-server.service,将/var/log加入ReadWriteDirectories列表,解决日志写入问题。同步主机时钟
发现服务器时钟比客户端慢10分钟,将两台主机都配置为NTP同步,避免Kerberos因时钟偏差导致的认证失败。验证Kerberos凭证与Keytab
- 检查服务器和客户端的keytab,确认
nfs/主机名@REALM等principal存在且KVNO匹配:# 服务器端检查 sudo klist -k # 客户端端检查 sudo klist -k - 尝试删除并重建keytab、用户principal,问题依旧。
- 检查服务器和客户端的keytab,确认
加载必要内核模块
确保两台主机都加载了rpcsec_gss_krb5模块:sudo modprobe rpcsec_gss_krb5检查NFS与Kerberos配置文件
/etc/hosts:手动指定所有主机的FQDN和IP,规避DNS不稳定问题。/etc/krb5.conf:正确配置默认域COLONELPANIC.LOCAL、KDC地址krb.colonelpanic.local。- NFS服务配置:
- 服务器端
/etc/default/nfs-kernel-server设置NEED_SVCGSSD="yes",开启Kerberos认证所需的服务。 - 客户端
/etc/default/nfs-common设置NEED_GSSD=yes,启用客户端Kerberos认证服务。 - 服务器
/etc/exports指定导出目录使用gss/krb5p安全模式:/mnt/foo gss/krb5p(rw,sync,no_subtree_check)
- 服务器端
检查关键进程状态
发现服务器端虽然配置了NEED_SVCGSSD="yes",但rpc.svcgssd服务并未自动启动,仅运行了rpc.gssd:ps aux | grep gss
解决方案
手动启动服务器端的rpc-svcgssd服务:
sudo service rpc-svcgssd start
启动后客户端即可正常挂载Kerberos认证的NFSv4目录。
为了避免服务器重启后该服务再次无法自动启动,可以设置开机自启:
sudo systemctl enable rpc-svcgssd
备注:内容来源于stack exchange,提问作者Ansel Pol
相关产品推荐
相关产品推荐

