使用 sec=krb5i 在 nfs 上提供服務
我正在嘗試在 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