Nfs

使用 sec=krb5i 在 nfs 上提供服務

  • December 9, 2019

我正在嘗試在 ArchLinuxARM 機器上安裝 nextcloud,並希望將上傳的數據儲存在 NFS 伺服器上(debian 測試)。NFS 伺服器用於sec=krb5i導出共享。

我有 SSSD 執行,NFS 對普通使用者執行順利。

但是,我無法為 user 完成這項工作http

我正在測試

sudo -u http ls /mount/http-folder

接下來,我嘗試將 http 的密鑰導出到 keytab,但遇到了sudo -u http KRB5_CLIENT_KTNAME=/etc/httpd/conf/krb5.keytab ls /mount/http-folder同樣的問題。

更新(2 - 解決了!):

應用程序需要了解 kerberos 和 Honor KRB5_CLIENT_KTNAME

或者更好的是,當客戶端密鑰表位於其預設位置時(如 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 文件,它應該使用它在客戶端密鑰表文件中找到的第一個主體——客戶端密鑰表包含所需的主體,所以……?正如 Piotr P. Karwasz 正確指出的那樣,%{euid] 是數字id,而不是使用者名(太糟糕了!),所以客戶端 keytab不在預設位置!

(2) 確保票證記憶體為空

所以,問題解決了。謝謝,彼得!

當一個程序訪問您的 NFS 掛載時,核心會向上呼叫rpc.gssd以建立憑據。我沒有進一步探索 upcall 機制,但我相信rpc.gssd無法訪問該KRB5_CLIENT_KTNAME變數或只是忽略它並使用預設位置。

該文件/var/lib/krb5/user/http/client.keytab不是系統上的預設位置。嘗試用使用者http的數字uidhttp替換:

getent passwd http | cut -d : -f 3

引用自:https://serverfault.com/questions/994749