2014-05-09 41 views
5

我有一臺使用Kerberos進行用戶身份驗證的Linux服務器,以及面向用戶家的AFS。當我用可轉發的Kerberos票證登錄到計算機時,(我想)PAM也會照顧我的AFS身份驗證,因此登錄後我會自動訪問我的AFS主頁。如何使用Kerberos和AFS票據提供已運行的進程?

比方說,我登錄,並創建一個屏幕會話,並在其中啓動一個應用程序。然後我分離我的屏幕會話,並從機器註銷。我的Kerberos票證會自動刪除,因此我的屏幕會話在後臺運行,並且運行在其中的應用程序無法再訪問我的AFS主目錄。這很正常,而且很好。

下一次當我登錄到機器中時,如何使用新的Kerberos票證「提供」我已在運行的屏幕會話和運行在其中的應用程序(進程本身),並使其能夠再次訪問我的AFS主目錄而不必重新啓動它?

感謝, 丹尼爾

回答

2

「正確」的答案是使用類似krenew或KSTART監視你的屏幕 會議,並確保它具有有效TGT和AFS令牌。大多數網站將允許您續訂最多7天的門票。

但是,這不是你問的問題。票證部分很簡單。環境變量KRB5CCNAME存儲您的kerberos票據的位置。 一般來說它看起來是這樣的

KRB5CCNAME=FILE:/tmp/krb5cc_7472_lIwDv27056 

所以閒逛在/ proc系統,找到KRB5CCNAME的價值爲你的屏幕流程和現有的售票複製到該文件的位置。

如果您可以在複製票證之後以某種方式運行aklog,那麼這是最直接的 解決方案,AFS令牌部分要棘手得多。

有一些提取和設置令牌的工具。 gettoken和settoken,但我知道沒有直接的方法來使用它們來設置任意進程的標記。 AFS令牌作爲內核中的進程數據的一部分存儲。這就是爲什麼當您在使用AFS的計算機上使用groups命令時,您會看到有趣的高編號組。

+0

感謝您的回答!不幸的是,我不能讓這個進程運行aklog,因爲它是一個編譯好的二進制文件,並且觸及源代碼,重新編譯它等都會非常複雜,特別是因爲我沒有這些服務器的所有權,所以部署將會是也很複雜。事實上,如果我能做到這一點,我也可以運行kinit,這將解決問題,但我不能。所以你說沒有辦法將當前的AFS令牌傳遞給正在運行的進程?再次感謝,Daniel – PDani

+0

總有一種方法,這只是一個你願意寫多少代碼以及你是否擁有root權限的問題。我知道使用標準工具無法做到這一點,即使使用我不知道的非標準工具,我也不確定AFS api是否支持它。 –

5

您應該能夠附加到屏幕會話,在其內部創建一個新窗口/'屏幕'(使用默認配置,您可以通過按C-a C-c執行此操作),然後運行kinit && aklog。您不需要在現有的正在運行的應用程序或類似的東西中「運行」你只需要在同一個屏幕會話中的某處運行它。之後,您可以分離屏幕並註銷,並且屏幕會話應該仍然擁有您的憑據(直到它們過期;您可以使用krenew使它們持續更長時間,但不會永遠持續)。

如果您想知道更詳細的說明,請點擊這裏。我假設你通過ssh登錄並使用PAM,但同樣的一般流程也適用於其他設置:

當你第一次登錄時,PAM會爲你指定一個PAG(一種容器AFS令牌),並運行一些與kinitaklog相當的東西,爲您提供該PAG內的AFS令牌。然後,您的shell將在該PAG中運行,因此您在該shell中運行的所有內容都與該PAG及其憑據相關聯。這包括您創建的screen會話。

註銷時,PAM配置會破壞您的憑證,這意味着它會銷燬與該PAG關聯的AFS令牌。這就是爲什麼屏幕會話丟失憑據並失去對主目錄的訪問權限:該PAG的令牌已被銷燬。

稍後,如果您再次登錄,則會爲您分配一個新的單獨PAG,並再次獲得AFS令牌。舊的屏幕會話仍然與另一個PAG相關聯,PAG是銷燬令牌的那個。因此,如果您附加到該屏幕會話,並在其中運行kinitaklog,那麼將會創建與第一次登錄時與舊PAG關聯的新令牌。然後您可以從屏幕會話中退出並註銷,並且當前PAG中的令牌將被銷燬。但是屏幕會話的PAG是未觸及的,因爲PAM和其他任何東西都不知道該PAG了。所以它的標記在它到期之前將繼續有效。

相關問題