
我在我的一台伺服器上每天大約會看到一次或兩次以下系統日誌條目。此伺服器使用 Kerberos 服務主體將檔案備份到 AFS 空間:
Dec 6 04:01:06 myserver kernel: [3681180.757245] afs: Tokens for user of AFS id -1 for cell realm.example.com have expired (server 192.168.22.24)
伺服器運行 Debian wheezy 64 位元。我該如何找出可能導致此訊息的原因?
答案1
-1 id 的一個可能原因是令牌在訊息出現的同時被銷毀。要么有人「註銷」了令牌,要么(更有可能)內核模組中的定期清理進程注意到令牌已過期並使它們失效。 id 為 -1 是令牌被標記為無效的一種方式(這是 openafs 核心模組中「unixuser」結構中的 ViceId)。如果您總是在該訊息中看到 id -1,則實際上不可能知道是什麼專門觸發了這些訊息,除非當時只有少數正在運行的事物經過了 AFS 的身份驗證。
如果您還沒有使用它,您應該使用 k5start 或 krenew(兩者都在 Debian 中的「kstart」套件中)和 -t 選項來確保您的備份檔案進程具有用於存取 AFS 的未過期令牌。
但是,如果您使用 k5start,由於 -K 選項工作方式的一些邊緣情況,仍然可能會因令牌過期而導致存取失敗:http://permalink.gmane.org/gmane.comp.encryption.kerberos.general/18343。由於帶有 -K 的 k5start 僅保證其 krb5 票證在未來 2 分鐘內有效,因此可以獲得未來 2 分鐘或更短時間內有效的 AFS 代幣。如果這些 2 分鐘有效令牌用於聯繫 AFS 檔案伺服器,且通訊時間超過 2 分鐘,則存取可能會失敗,並顯示「令牌已過期」。或者,如果 AFS 服務主體的最大票據生命週期小於 TGT 的最大票據生命週期,則 AFS 令牌可能會在您的票據之前過期,因此 k5start 會讓它們過期。
您可以透過將 -H 選項與 -K 選項一起使用來增加保證票證生命週期,以確保不會發生這種情況。只需將 -H 設定為高於 2 分鐘預設值即可;也許30分鐘或一個小時。或者您可以使用 -a 選項在每次 k5start/krenew 喚醒時始終更新票證(這是我推薦的)。然而,該段落中的所有內容對於最新發布的 k5start 版本都是不可能的,因此為了做到這一點,您需要等待 k5start 的新版本,或從 git 建立它。
解決此問題的另一種方法是不使用 k5start,並讓您自己的腳本運行kinit -kt /path/to/keytab && aklog
在與將檔案備份到 AFS 的進程相同的 PAG 中,例如每小時執行一次。