直接修改 /etc/login.defs 是设置新用户密码生命周期最基础有效的手段,需配置 pass_max_days 90、pass_min_days 7、pass_warn_age 14,且仅对 useradd 新建用户生效,已有用户须用 chage 单独或批量更新。

直接改 /etc/login.defs 是设置新用户密码生命周期最基础也最有效的手段。它不作用于已有用户,但能确保每个用 useradd 创建的账号从诞生起就符合安全基线。
核心密码生命周期参数及推荐值
编辑该文件后,重点配置以下三行(已有则修改,无则添加):
-
PASS_MAX_DAYS 90:密码最长可用 90 天。避免设为
-1或99999,否则等于默认永不过期 - PASS_MIN_DAYS 7:两次改密至少间隔 7 天。防止用户反复重置来绕过密码历史检查
- PASS_WARN_AGE 14:提前 14 天在登录时提示“Your password will expire in X days”
这些设置只影响新用户,老用户需单独处理
/etc/login.defs 不会自动更新已存在用户的策略。比如你今天改完配置,明天新建的用户 alice 会自动继承 90/7/14 规则;但 bob 这个上周建的账号依然沿用旧规则,必须手动执行:
chage -M 90 -m 7 -W 14 bob- 或批量处理:用
getent passwd | awk -F: '$3 >= 1000 {print $1}'筛出普通用户,再循环调用chage
顺手加固其他关联项
密码生命周期不是孤立的,建议同步检查这几项,避免策略形同虚设:
- ENCRYPT_METHOD SHA512:确保新用户密码用强哈希加密,而非老旧的 DES 或 MD5
-
PASS_MIN_LEN 10:设最低长度为 10,作为密码强度兜底(实际复杂度由 PAM 的
pam_pwquality模块最终控制) -
CREATE_HOME yes:保证家目录自动创建,否则用户可能因找不到
$HOME而无法正常登录 - UID_MIN 1000 和 GID_MIN 1000:避开系统账号范围,降低 UID/GID 冲突风险
验证与生效确认
改完保存后,新建一个测试用户验证是否生效:
useradd -m testuser && chage -l testuser- 输出中应显示:
Maximum number of days between password changes : 90、Minimum number of days between password changes : 7、Number of days of warning before password expires : 14
注意:修改 /etc/login.defs 后无需重启服务,useradd 下次调用时立即生效。











