Linux

從特定客戶端伺服器上的守護程序訪問 Kerberised NFS 伺服器

  • March 30, 2017

我有一個從使用 Kerberos 保護並使用 LDAP 進行身份驗證和 uid/gid 管理的文件伺服器導出的 NFS 樹。一切都適用於每台客戶端機器和每個單獨的使用者,但我不確定如何將部分共享的訪問權限授予守護程序。

守護程序通常使用本地系統帳戶的 setuid 執行,因此伺服器上沒有任何特定的憑據。如果我可以進入並弄亂原始碼,我通常可以讓他們使用密鑰表文件為他們啟動時存在於 kerberos 中的使用者呼叫 kinit,但這並不總是可能的。

我們的環境禁止我通過使它們成為世界可讀的方式來打開它們,或者禁止我從 NFS 中完全刪除 Kerberos。

我在/etc/exportswith和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 轉換。

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