Linux设置用户密码过期时间或永不过期的具体方法
在Linux系统运维过程中,合理设置用户密码的过期时间是保障系统安全的重要措施。密码过期可以强制用户定期更新密码,降低密码泄露带来的安全风险;而针对一些特殊场景(如服务账户、自动化脚本使用的账户),设置密码永不过期则可以避免因为密码过期导致服务中断。本文将详细介绍不同场景下设置用户密码过期时间的操作方法。
一、查看当前用户密码过期信息
在修改密码过期时间之前,我们可以先查看当前用户的密码过期相关配置,常用的查看命令有两个:
chage -l 用户名:查看指定用户的密码策略详细信息,包括密码最后修改时间、过期时间、过期前警告天数等。passwd -S 用户名:查看用户密码的状态,包含密码是否设置、密码过期相关的基础信息。
例如查看用户test的密码策略,执行以下命令:
chage -l test
命令输出会包含以下信息:
Last password change:密码最后修改时间
Password expires:密码过期时间
Password inactive:密码失效时间(过期后多久账户被禁用)
Account expires:账户过期时间
Minimum number of days between password change:密码最短使用天数,即修改密码后多少天内不能再次修改
Maximum number of days between password change:密码最长使用天数,即密码过期周期
Number of days of warning before password expires:密码过期前警告天数
二、设置用户密码永不过期
如果需要将某个用户的密码设置为永不过期,有两种常用方法:
方法1:使用chage命令设置
chage命令是管理用户密码过期策略的专用工具,通过修改密码最长使用天数为99999(Linux系统中通常将99999视为永不过期的标识),即可实现密码永不过期。
执行以下命令设置用户test密码永不过期:
chage -M 99999 test
参数说明:-M后面跟的参数是密码的最大使用天数,设置为99999后,密码基本不会过期。
设置完成后,可以再次执行chage -l test查看配置,此时Password expires项会显示为never。
方法2:修改/etc/shadow文件
/etc/shadow文件存储了系统所有用户的密码相关策略信息,每一行对应一个用户,格式为:
用户名:加密密码:最后修改密码的天数:密码最短使用天数:密码最长使用天数:警告天数:失效天数:账户过期天数:保留字段
要将用户密码设置为永不过期,只需要将第5个字段(密码最长使用天数)修改为99999即可。例如用户test在/etc/shadow中的行原本为:
test:$6$xxxxxx:19800:0:90:7:10::
将第5个字段的90修改为99999:
test:$6$xxxxxx:19800:0:99999:7:10::
注意:修改/etc/shadow文件需要root权限,且修改前建议备份该文件,避免误操作导致用户无法登录。
三、设置用户密码指定时间后过期
如果需要让用户密码在指定的天数后过期,同样可以使用chage命令或者修改/etc/shadow文件实现。
方法1:使用chage命令设置
假设需要设置用户test的密码在30天后过期,执行以下命令:
chage -M 30 test
如果需要同时设置密码过期前7天开始警告,密码过期后3天账户失效,可以执行:
chage -M 30 -W 7 -I 3 test
参数说明:
-M:密码最大使用天数
-W:密码过期前警告天数
-I:密码过期后多少天账户失效
方法2:修改/etc/shadow文件
例如设置用户test密码30天后过期,过期前7天警告,过期后3天失效,只需要将/etc/shadow中test对应的行第5个字段改为30,第6个字段改为7,第7个字段改为3即可:
test:$6$xxxxxx:19800:0:30:7:3::
四、批量设置用户密码过期策略
如果需要批量修改多个用户的密码过期时间,可以通过shell脚本实现。例如批量将用户列表中的用户密码设置为90天过期:
#!/bin/bash # 用户列表文件,每行一个用户名 USER_LIST="user_list.txt" if [ ! -f "$USER_LIST" ]; then echo "用户列表文件不存在" exit 1 fi while read -r user; do if id "$user" >/dev/null 2>&1; then chage -M 90 "$user" echo "已设置用户 $user 密码90天过期" else echo "用户 $user 不存在,跳过设置" fi done < "$USER_LIST"
将上述脚本保存为set_password_expire.sh,创建user_list.txt文件写入需要设置的用户名,赋予脚本执行权限后运行即可:
chmod +x set_password_expire.sh ./set_password_expire.sh
五、注意事项
所有修改密码过期策略的操作都需要root权限,普通用户无权限执行。
修改/etc/shadow文件前务必备份,避免格式错误导致所有用户无法登录。
服务账户、自动化任务使用的账户建议设置密码永不过期,避免密码过期导致服务中断。
普通用户账户建议设置合理的密码过期周期(如30-90天),平衡安全性和使用便利性。