我每天会在一台服务器上看到以下系统日志条目一次或两次。该服务器使用 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
id 为 -1 的一个可能原因是令牌在该消息出现的同时被销毁。要么是有人“取消记录”了令牌,要么(更可能是)内核模块中的定期清理过程注意到令牌已过期并使其失效。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 分钟或 1 小时。或者,您可以使用 -a 选项在每次 k5start/krenew 唤醒时始终更新票证(这是我推荐的)。但是,对于最新发布的 k5start 版本,段落中的所有内容都是不可能的,因此为了做到这一点,您需要等待 k5start 的新版本,或者从 git 构建它。
解决此问题的另一种方法是不使用 k5start,而是让您自己的脚本kinit -kt /path/to/keytab && aklog
每小时运行一次,与将文件备份到 AFS 的过程在同一个 PAG 中。