如何在Linux/Unix中查看用户的上次密码更改日期
chage命令
" chage"命令可更改密码更改和上次密码更改日期之间的天数。系统使用此信息来确定用户何时必须更改其密码。它使用/etc/passwd
和/etc/shadow
来获取用户密码相关的详细信息,例如检查上次密码更改日期,密码到期和老化相关的信息。
检查上次密码更改日期
对于系统用户
chage
命令从文件/etc/shadow
中读取最后的密码更改日期。上次更改密码的日期存储在文件/etc/shadow
的第3个字段中,以便使用chage
命令查看用户hynman
的帐户帐龄信息
# chage -l hynman Last password change : Nov 09, 2019 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
了解影子文件格式和字段。
信息存储的日期和时间不完全相同,而是自1970年1月1日以来的天数。下面给出了示例。
test::16681:0:99999:7::19691002: ^ |---------- 这里
/etc/shadow
中有9个字段。每个字段按其出现顺序的含义:
sp_namp-指向以空值结尾的用户名的指针
sp_pwdp-指向以空字符结尾的密码的指针
sp_lstchg
-自1970年1月1日以来密码更改的天数sp_min
-不能更改密码的天数sp_max
-必须更改密码的天数sp_warn
-密码过期前几天,警告用户密码即将过期sp_inact
-密码过期后几天,该帐户就被视为无效和已禁用sp_expire
-自1970年1月1日起,帐户将被禁用的天数sp_flag-保留供将来使用
如我们所见,第一部分可用于检查用户的上次密码更改日期
# chage -l hynman | head -n 1 Last password change : Nov 09, 2019
但是这里的缺点是root用户还可以使用-d更改上次密码更改日期。其中:我将用户hynman
的上次密码更改日期更改为2019年11月23日
。
# chage -d 2019-11-23 hynman
说明:
如我们所见,此选项在某些情况下可能不太可靠,因此我们可以依靠/var/log/*
文件来检查用户的密码更改历史记录。我们可以根据分布搜索诸如passwd或者相关匹配之类的字符串,以获取用户的密码更改历史记录。无论如何,在生产环境中,普通用户将无权更改上次密码更改日期。
接下来检查用户" hynman"的上次密码更改日期
# chage -l hynman | head -1 Last password change : Nov 23, 2019
对于Active Directory用户
但是,如果Linux系统连接到Windows Active Directory,该怎么办?要检查AD用户的上次密码更改日期,我们将需要访问Windows Active Directory节点。
我不知道有任何工具可以显示Linux上与Active Directory用户的密码更改相关的详细信息。如果我们熟悉任何工具,请通过评论部分让我知道。在Windows AD上,我们可以使用使用powershell的网络用户来检查AD用户的密码过期时间。
语法:
net user USERNAME /domain
我的RHEL 7 Linux客户端上有一个AD用户amit
,该客户端已连接到Windows Active Directory。
# id theitroad.com\amit uid=1407601118(amit) gid=1407600513(domain users) groups=1407600513(domain users)
例如,从Windows Server 2012的Powershell CLI检查Active Directory用户amit
的上次密码更改日期。
PS C:\Users\Administrator> net user amit /domain User name amit Full Name admit Comment User's comment Country/region code 000 (System Default) Account active Yes Account expires Never Password last set 11/24/2019 12:20:58 PM Password expires 1/5/2017 12:20:58 PM Password changeable 11/25/2019 12:20:58 PM Password required Yes User Jan change password Yes Workstations allowed All Logon script User profile Home directory Last logon Never Logon hours allowed All Local Group Memberships Global Group memberships *Domain Users The command completed successfully.
在Linux中检查密码到期
使用chage
命令,我们还可以检查Linux中用户的密码到期日期,当然可以更改它。现在检查用户" hynman"的密码到期日期
# chage -l hynman | head -n2 Last password change : Nov 23, 2019 Password expires : never
因此,现在将密码设置为" hynman"永不过期。要更改用户" hynman"的密码到期日期,我们将使用-M。使用-M
我们可以弄清密码有效的最大天数。因此,我们其中设置30天后的密码有效期
# chage -M 30 hynman
现在检查" hynman"的密码到期日期
# chage -l hynman | head -n2 Last password change : Nov 23, 2019 Password expires : Dec 23, 2019
passwd命令
我们在Linux中还有另一个工具passwd命令,我们大多数人通常用来更改用户密码。
但是" passwd"命令可以做更多的事情,例如检查密码状态,重置密码失败的登录尝试,锁定和解锁用户等等。
检查密码状态
我们也可以使用" passwd"命令检查用户的密码状态。这里的-S将输出有关给定帐户密码状态的简短信息
# passwd -S hynman hynman PS 2019-08-31 0 99999 7 -1 (Password set, SHA512 crypt.)
我们还可以使用passwd -S检查用户的上次密码更改日期。观察下面输出的第三个字段,以检查上面提供的用户的上次密码更改日期,该日期与同一Linux计算机上的chage
命令输出同步。
# chage -l hynman | head -n 1 Last password change : Aug 31, 2019
如果用户" hynman"的密码被锁定,则检查密码状态输出如下所示
# passwd -S hynman hynman LK 2019-11-23 0 30 7 -1 (Password locked.)