Linux 检查用户密码到期日期和时间
在 Linux 上,可以轻松检查用户帐户密码过期信息。/etc/shadow文件以加密格式存储用户帐户的实际密码。您需要使用 chage 命令。它可以显示密码过期信息,以及更改密码之间的天数和上次更改密码的日期。系统使用此信息来确定用户何时必须更改其密码。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 终端 |
类别 | 用户信息 |
操作系统兼容性 | Alma • Alpine • Arch • CentOS • Debian • Fedora • Linux • Mint • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • WSL |
预计阅读时间 | 5 分钟 |
Linux 使用 chage 检查用户密码过期时间
- 打开终端应用程序
- 键入chage -l userName命令以显示 Linux 用户帐户的密码过期信息。
- -l传递给更改的选项显示帐户老化信息。
- 检查tom用户的密码过期时间,运行:sudo chage -l tom
让我们详细了解一些示例和使用信息。
如何在 Linux 中列出用户
在/etc/passwd上使用grep 命令或cat 命令如下:
$ grep -w '^username' /etc/passwd
# search for a user named 'emilia' #
$ grep -w '^emilia' /etc/passwd
$ cat /etc/passwd
$ bat /etc/passwd
在 Linux 上再次查看帐户信息
要查看帐户时效信息(如到期日期和时间),请输入:
要查看用户名为 vivek 的帐户时效信息,请输入:
示例输出:
$ chage -l {userNameHere}
$ chage -l userNameHere
$ chage -l vivek
Last password change : Jan 10, 2012 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
以上输出表明密码老化已禁用。
检查 Linux 上用户账户密码过期信息
让我们再尝试一个例子:
$ sudo chage -l raj
示例输出:
Last password change : May 21, 2012 Password expires : Jun 20, 2012 Password inactive : never Account expires : Jan 01, 2013 Minimum number of days between password change : 7 Maximum number of days between password change : 30 Number of days of warning before password expires : 7
看来用户帐户将于 2013 年 1 月 1 日到期。您也可以使用grep 命令来过滤信息:
$ sudo chage -l raj | grep 'Password expires'
更改密码到期日期
您可以设置密码有效的最大天数。例如,确保名为 jerry 的用户的密码有效期为 90 天:
请注意,传递该数字将删除对密码有效性的检查:
您还可以设置密码更改之间的最小天数:
但是,零值表示用户可以随时更改其密码:
$ sudo chage -M 90 jerry
$ sudo chage -l jerry
-1
$ sudo chage -M -1 tom
$ sudo chage -m 30 jerry
$ sudo chage -m 0 marlena
设置到期日期
语法是:
$ sudo chage -E EXPIRE_DATE userName
可以设置自 1970 年 1 月 1 日起用户帐户将不再可访问的日期或天数。日期也可以用 YYYY-MM-DD 格式表示(或您所在地区更常用的格式)。帐户被锁定的用户必须联系系统管理员才能再次使用系统。将
$ sudo chage -E 2020-03-31 sai
数字-1作为 EXPIRE_DATE 传递将删除帐户到期日期:
$ sudo chage -E -1 tristan
设置密码过期前对用户发出警告
尝试使用以下语法来设置需要更改密码之前的警告天数:
WARN_DAYS 选项是在密码到期前多少天警告用户其密码即将到期。使用以下命令验证信息:
$ sudo chage -W WARN_DAYS userName
$ sudo chage -W 30 raj
$ sudo chage -l raj
chage 命令用来检查 Linux 用户密码过期的文件
/ etc/passwd文件存储 Linux 下每个用户帐户的信息。/etc/shadow文件包含以哈希格式表示的密码以及 Linux 系统帐户的其他信息(包括可选的老化信息)。/ etc/group文件定义 Linux 系统上的组。
使用bash for 循环打印所有用户的到期日期
运行以下命令:
for a in $(awk -F':' '{ print $1}' /etc/passwd) do echo -n "$a - "; sudo chage -l "$a" | grep 'Password expires' done
以下是更新后的脚本(感谢HAL):
#!/bin/bash for account in $(awk -F':' '{ print $1}' /etc/passwd) do expiers_string="$(sudo chage -l "$account" | grep 'Account expires' | awk '{print $4, $5, $6}')" changed_date="$(sudo chage -l "$account" | grep 'Last password change' | awk '{print $5, $6, $7}')" echo "ACCOUNT: $account , EXPIRES: $expiers_string, CHANGED: $changed_date" done
示例输出:
ACCOUNT: root , EXPIRES: never , CHANGED: Mar 21, 2022 ACCOUNT: daemon , EXPIRES: never , CHANGED: Feb 23, 2022 ACCOUNT: bin , EXPIRES: never , CHANGED: Feb 23, 2022 ACCOUNT: sys , EXPIRES: never , CHANGED: Feb 23, 2022 ... .. ACCOUNT: backup , EXPIRES: never , CHANGED: Feb 23, 2022 ACCOUNT: list , EXPIRES: never , CHANGED: Feb 23, 2022 .... ACCOUNT: vivek , EXPIRES: never , CHANGED: Mar 21, 2022 ACCOUNT: systemd-coredump , EXPIRES: never , CHANGED: Mar 21, 2022 ACCOUNT: lxd , EXPIRES: never , CHANGED: Mar 21, 2022 ACCOUNT: sshd , EXPIRES: never , CHANGED: Mar 28, 2022 ACCOUNT: _flatpak , EXPIRES: never , CHANGED: Apr 05, 2022 ACCOUNT: libvirt-qemu , EXPIRES: never , CHANGED: Apr 19, 2022 ACCOUNT: libvirt-dnsmasq , EXPIRES: never , CHANGED: Apr 19, 2022 ACCOUNT: raj , EXPIRES: never , CHANGED: May 01, 2022 ACCOUNT: nvidia-persistenced , EXPIRES: never , CHANGED: Aug 18, 2022 ... ..
示例
使用 useradd 命令创建一个名为“elizabeth”的新用户,如下所示:使用 passwd 命令
# useradd elizabeth
设置用户帐户密码
# passwd elizabeth
:
接下来,使用 chage 命令为用户设置密码过期策略,如下所示:
其中,
# chage -E "$(date -d "+90days" +%F)" elizabeth
# chage -m 0 -M 90 -W 7 -I 14 elizabeth
- chage:运行 chage 命令设置 Linux 密码老化策略。
- -E "$(date -d "+90days" +%F)":将用户elizabeth的密码过期日期设置为从今天起 90 天
- -m 0:设置更改密码间隔的最小天数。当我将其设置为天数时0,这意味着用户可以根据需要随时更改密码。
- -M 90:设置密码过期前可以使用的最大天数。我设置为90天,这意味着用户的密码将在90天后过期。
- -W 77 :用户密码过期前几天会收到警告
- -I 14:如果用户不更改密码,其帐户将在 14 天后被锁定。
- elizabeth:Linux 用户名。
最后确认所有细节:
# chage -l elizabeth
打印 Linux 用户帐户和密码剩余的到期天数
以下是如何使用 shell kung fu 脚本打印距离帐户到期还剩 X 天的时间:
#!/bin/bash # Name: days.sh # Purpose: Find days left to expire the Linux user account # Author: Vivek Gite {https://www.example.com/} under GPL v2.x+ # ---------------------------------------------------------------- _user="${1?:User name missing. Bye}" current_date="$(date +"%b %d, %Y")" # Check for the root user if [[ $EUID -ne 0 ]] then echo "Error: $0 - script must be run as root." 1>&2 exit 1 fi # Calculate the days between two Linux dates calculate_days(){ local e_date t1 t2 t_diff xdays # input e_date="$1" # convert the dates to Unix timestamps: t1=$(date -d "$current_date" +%s) t2=$(date -d "$e_date" +%s) # calculate the difference in Unix timestamps t_diff=$((t2 - t1)) # convert the difference to days: xdays=$((t_diff / 86400)) # print it echo "$xdays" } # Ensure user exits else die if grep -q -w "^${_user}" /etc/passwd then account_expire_date=$(chage -l "$_user" | awk -F':' '/Account expires/{ gsub(/^ /, "", $2); print $2}') password_expire_date=$(chage -l "$_user"| awk -F':' '/Password expires/{ gsub(/^ /, "", $2); print $2}') if [ "$account_expire_date" == "never" ] then echo "Warning: $0 - account aging [account expire date] not set for the $_user account." else output=$(calculate_days "$account_expire_date") echo "The $_user account has $output day(s) left to expire their account." fi if [ "$password_expire_date" == "never" ] then echo "Warning: $0 - account aging [password expire date] not set for the $_user account." else output=$(calculate_days "$password_expire_date") echo "The $_user account has $output day(s) left to expire their password." fi else echo "Error: $0 - $_user username not found in the /etc/passwd file." fi
# chmod +x -v days.sh
测试一下:
# ./days.sh elizabeth
# ./days.sh
结论
chage 命令会更改密码更改间隔天数和上次更改密码的日期。同一命令还会检查 Linux 上的用户密码到期日期和时间。使用 man 命令/help 命令查看 chage 手册页,了解更多信息:
$ man chage
$ chage --help
Options: -d, --lastday LAST_DAY set date of last password change to LAST_DAY -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE -h, --help display this help message and exit -i, --iso8601 use YYYY-MM-DD when printing dates -I, --inactive INACTIVE set password inactive after expiration to INACTIVE -l, --list show account aging information -m, --mindays MIN_DAYS set minimum number of days before password change to MIN_DAYS -M, --maxdays MAX_DAYS set maximum number of days before password change to MAX_DAYS -R, --root CHROOT_DIR directory to chroot into -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS