從特定客戶端伺服器上的守護程序訪問 Kerberised NFS 伺服器
我有一個從使用 Kerberos 保護並使用 LDAP 進行身份驗證和 uid/gid 管理的文件伺服器導出的 NFS 樹。一切都適用於每台客戶端機器和每個單獨的使用者,但我不確定如何將部分共享的訪問權限授予守護程序。
守護程序通常使用本地系統帳戶的 setuid 執行,因此伺服器上沒有任何特定的憑據。如果我可以進入並弄亂原始碼,我通常可以讓他們使用密鑰表文件為他們啟動時存在於 kerberos 中的使用者呼叫 kinit,但這並不總是可能的。
我們的環境禁止我通過使它們成為世界可讀的方式來打開它們,或者禁止我從 NFS 中完全刪除 Kerberos。
我在
/etc/exports
with和set 中添加了一個子樹all_squash
,但這只是讓它對每台客戶端機器都具有可讀性。它只需要特定的機器才能訪問。anonuid=...``anongid=...
我嘗試過使用 samba,但我們有一些守護程序具有“NFS 或破壞”方法來處理共享(例如,任何涉及 mercurial 的東西)。
我們的大多數伺服器都執行 Ubuntu 10.04 LTS,儘管這個問題也影響了我們擁有的 12.04 LTS 客戶端。
有沒有辦法可以為整個系統授予特定 Kerberos 使用者的系統範圍票證,以便該系統上的任何使用者始終可以訪問共享?或者是否有其他方法可以實現我可以調查的這種訪問?
執行此操作的“正確”方法將涉及重寫 init 腳本以在守護程序模式和每個守護程序密鑰表中使用 k5start 。這將確保正在執行的守護程序在執行時可以訪問有效的憑證記憶體。
您可能需要 daemon/hostname.domain.tld 樣式原則。它們更容易跟踪和管理 keytabs。將密鑰添加到密鑰表會自動增加密鑰版本號 (KVNO) 並隨機化該主體的“密碼”。
如果您正在執行 gssproxy,則使用標準的 nfs-client 配置,例如:
[service/nfs-client] mechs = krb5 cred_store = keytab:/etc/krb5.keytab cred_store = ccache:FILE:/var/lib/gssproxy/clients/krb5cc_%U cred_store = client_keytab:/var/lib/gssproxy/clients/%U.keytab cred_usage = initiate allow_any_uid = yes trusted = yes euid = 0
您可以將服務的密鑰表放在 /var/lib/gssproxy/clients/%UID%.keytab 中,gssproxy 將為您處理創建票證。這可能比使用 k5start 更可取,因為 k5start 會干擾 SELinux 轉換。