如何在Linux/Unix中查看用户的上次密码更改日期

时间:2020-01-09 10:37:38  来源:igfitidea点击:

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.)