linux下如何去掉密码过期
- Linux
- 2025-07-25
- 5
sudo passwd -x -1 用户名
、
sudo chage -m 0 -M 99999 -I -1 -E -1 用户名
或修改/etc/shadow文件将密码过期时间设为99999/-1来去掉
密码过期
Linux系统中,若需去掉密码过期限制(即设置密码永不过期),可通过多种方法实现,以下是详细的操作步骤及注意事项:
通过 chage
命令修改用户密码策略
-
查看当前配置
使用chage -l <用户名>
查看指定用户的密码过期策略。chage -l tmn
输出结果中会显示
maxdays
(最大有效天数)、lastday
(上次修改日期)等字段,若未设置永不过期,则这些值通常为具体数字或默认系统策略。 -
设置密码永不过期
执行以下命令将用户的密码有效期设为无限长:sudo chage -M -1 <用户名>
-M
表示修改最大生存周期,-1
代表永不过期,此命令还会同步更新/etc/shadow
文件中对应的字段。 -
验证生效结果
再次运行chage -l <用户名>
,若看到password expires : never
,则说明配置成功。 -
批量调整其他参数(可选)
如需同时禁用最小更改间隔、警告期等功能,可组合多个选项:sudo chage -m 0 -M -1 -I -1 -E -1 <用户名>
各参数含义:
-m 0
:取消最小密码使用天数限制;-I -1
:忽略密码失效前的预警期;-E -1
:移除账户自动失效日期。
直接编辑 /etc/shadow
文件
此方法直接操作存储用户认证信息的文本文件,风险较高但灵活性更强。
-
备份原始文件
修改前务必先备份:sudo cp /etc/shadow /etc/shadow.bak
-
用文本编辑器打开文件
推荐使用nano
或vim
:sudo nano /etc/shadow ``` 格式如下(以冒号分隔的多个字段): ```plaintext 用户名:加密后的密码哈希值:上次修改时间戳:最小间隔天数:最短存活时间:过期前警告天数:超期宽限天数:账号失效日期:保留字段
例如某行可能类似:
tmn:$6$randomhashedstring...:18723:0:99999:7:::
-
定位目标用户并修改关键字段
- 第5个字段(
max_age
):将其改为-1
表示密码永不过期,例如原值为99999
时,直接替换为-1
。 - 其他相关字段建议同步调整:如将
min_age
(第4个字段)也设为0
,避免因历史记录导致意外冲突。
- 第5个字段(
-
保存退出并重启PAM服务(部分发行版需要)
若基于Debian/Ubuntu系统,可能需要重新加载认证模块:sudo systemctl restart PAM
使用 usermod
命令快速配置
适用于熟悉命令行工具的管理员场景。
-
单步完成设置
sudo usermod -p "" -e -1 <用户名>
参数说明:
-p ""
:清空加密后的密码占位符(实际不改变原密码);-e -1
:将账户失效日期设为无穷大。
-
结合
passwd
确保一致性
如果后续仍需保留原有密码强度规则,可补充执行:sudo passwd -x -1 <用户名>
-x
明确指定不强制过期。
️ 重要注意事项与风险提示
潜在风险 | 应对建议 |
---|---|
安全隐患 | 仅对非交互式服务账户启用该策略;普通用户应保持定期改密习惯 |
误操作导致登录失败 | 始终先备份再修改;优先使用 chage 而非手动编辑文件 |
违反企业安全合规要求 | 确认组织的安全基线是否允许例外情况,必要时提交审批流程 |
SELinux策略干扰(少数环境) | 遇到权限错误时检查上下文标签,或尝试临时关闭SELinux进行调试 |
FAQs(常见问题解答)
Q1: 为什么修改后用户仍然收到密码过期提示?
可能原因:存在多个重叠的策略配置,例如某些发行版默认启用了PAM模块强制检查。
解决方案:检查 /etc/pam.d/common-password
(Debian系)或 /etc/pam.d/system-auth
(RHEL系),添加一行 password sufficient pam_unix.so nullok use_authtok
来覆盖默认行为。
Q2: 如何批量处理多个用户的密码过期策略?
高效脚本示例:
#!/bin/bash for user in $(cat userlist.txt); do sudo chage -M -1 "$user" >/dev/null 2>&1 done echo "All specified accounts have been configured with non-expiring passwords."
将需要处理的用户名逐行列在 userlist.txt
文件中