![kinit 密码过期警告](https://linux22.com/image/775570/kinit%20%E5%AF%86%E7%A0%81%E8%BF%87%E6%9C%9F%E8%AD%A6%E5%91%8A.png)
我有一个加入 Active Directory 2008 R2 域的 Ubuntu 桌面客户端。
我需要在 Linux 上使用“kinit”命令来确定用户密码何时过期。这是我的做法,因为系统上运行着其他脚本,所以不能/不想改变这种方法。
但是,据我所知,kinit 返回的密码过期警告为 7 天或更短。我可以改变这种态度吗?是什么让 kinit 返回的密码过期警告消息为 7 天或更短的时间跨度?
答案1
它可能取决于 Active Directory 中的设置 - 它在组策略中设置,位于:交互式登录:提示用户在密码到期前更改密码。
因此,请咨询 AD 管理员。可以将此策略的范围限定到 OU,因此,如果您的帐户位于特定 OU 中,则可能可以在那里设置更长的警告。技术上至少是可能的。但可能会存在操作限制。
另外,机器是通过 连接的吗sssd
?值得阅读这篇文章,看看是否有东西sssd.conf
可能会覆盖 AD 发送的值。如果根本没有设置sssd.conf
,它只会继承 AD 发送的内容。https://access.redhat.com/articles/3027531
如果域管理员说将其设置为 7 天并且不会更改,则不清楚您是否能够配置sssd.conf
以提供更长的警告间隔 - 我怀疑它是否可以以这种方式覆盖 AD。
或者,您可以对 AD 用户帐户执行 LDAP 查询并获取一个名为的属性msDS-UserPasswordExpiryTimeComputed
- 该值是 Windows 纪元日期之后的刻度。
要计算 Linux 系统上的日期,Windows 纪元日期为 1601-01-01T00:00:00Z,比 *nix 纪元 (1970-01-01T00:00:00Z) 早 11644473600 秒。Windows 刻度以 100 纳秒为单位。因此,进行简单的计算:
$tickInterval = 10000000
$unixEpochDiff = 11644473600
# interval captured from msDS-UserPasswordExpiryTimeComputed
$ADPasswordExpiryTime = 132985454614249065
$unixTime = ($userPasswordExpiryTime / $tickInterval) - $unixEpochDiff
目前,我无法测试从基于 Linux 的系统到 AD 的 LDAP 查询,但如果没有其他帮助,还是值得尝试一下。