nfs 上的服务,sec=krb5i

nfs 上的服务,sec=krb5i

我正在尝试在 ArchLinuxARM 机上安装 nextcloud,并希望将上传的数据存储在 NFS 服务器上(debian 测试)。NFS 服务器用于sec=krb5i导出共享。

我已经运行了 SSSD,并且 NFS 对普通用户来说运行顺利。

但是,我无法让用户完成这项工作http

我正在测试

sudo -u http ls /mount/http-folder

接下来,我尝试将 http 的密钥导出到密钥表,但sudo -u http KRB5_CLIENT_KTNAME=/etc/httpd/conf/krb5.keytab ls /mount/http-folder遇到了同样的问题。

更新(2-已解决!):

应用程序需要了解 kerberos 和 honor KRB5_CLIENT_KTNAME

或者更好的是,当客户端 keytab 位于其默认位置时(正如 Piotr P. Karwasz 指出的那样,可以通过 来识别krb5-config --defcktname),它将被自动拾取rpc.gssd

[root]> su -l http -s /usr/sbin/bash
[http]> ls /mount/http-folder
ls: cannot open directory '/mount/http-folder': Stale file handle
[http]> krb5-config --defcktname
FILE:/var/lib/krb5/user/%{euid}/client.keytab
[http]> export KRB5_CLIENT_KTNAME=/var/lib/krb5/user/http/client.keytab 
[http]> ls /mount/http-folder
ls: cannot access '/mount/http-folder': Permission denied

# note the difference (1)

[http]> $ kinit -t $KRB5_CLIENT_KTNAME http
keytab specified, forcing -k
[http]> ls /mount/http-folder
this_is_www-data
[http]> exit

# solution:

[root]> mv /var/lib/krb5/user/http /var/lib/krb5/user/`id -u http`
[root]> su -l http -s /usr/sbin/bash
[http]> kdestroy  # (2)
[http]> ls /mount/http-folder
this_is_www-data

(1)不确定是什么原因造成的 - 根据 kerberos 文档,它应该使用在客户端 keytab 文件中找到的第一个主体 - 客户端 keytab 包含仅有的所需的主体,所以...?正如 Piotr P. Karwasz 正确指出的那样,%{euid] 是数字id,而不是 usename(真倒霉!),所以客户端 keytab 是不是在默认位置!

(2)确保票证缓存为空

所以,问题解决了。谢谢,Piotr!

答案1

当一个进程访问你的 NFS 挂载时,内核会调用rpc.gssd建立凭证。我没有进一步探讨上行调用机制,但我相信rpc.gssd无法访问该KRB5_CLIENT_KTNAME变量或只是忽略它并使用默认位置。

该文件/var/lib/krb5/user/http/client.keytab不是您系统上的默认位置。尝试http用数字替换用户ID用户http

getent passwd http | cut -d : -f 3

相关内容