当前位置:首页 > Linux > 正文

linux下如何去掉密码过期

Linux下可通过 sudo passwd -x -1 用户名sudo chage -m 0 -M 99999 -I -1 -E -1 用户名或修改/etc/shadow文件将密码过期时间设为99999/-1来去掉 密码过期

Linux系统中,若需去掉密码过期限制(即设置密码永不过期),可通过多种方法实现,以下是详细的操作步骤及注意事项:

通过 chage 命令修改用户密码策略

  1. 查看当前配置
    使用 chage -l <用户名> 查看指定用户的密码过期策略。

    chage -l tmn

    输出结果中会显示 maxdays(最大有效天数)、lastday(上次修改日期)等字段,若未设置永不过期,则这些值通常为具体数字或默认系统策略。

  2. 设置密码永不过期
    执行以下命令将用户的密码有效期设为无限长:

    sudo chage -M -1 <用户名>

    -M 表示修改最大生存周期,-1 代表永不过期,此命令还会同步更新 /etc/shadow 文件中对应的字段。

  3. 验证生效结果
    再次运行 chage -l <用户名>,若看到 password expires : never,则说明配置成功。

  4. 批量调整其他参数(可选)
    如需同时禁用最小更改间隔、警告期等功能,可组合多个选项:

    linux下如何去掉密码过期  第1张

    sudo chage -m 0 -M -1 -I -1 -E -1 <用户名>

    各参数含义:

    • -m 0:取消最小密码使用天数限制;
    • -I -1:忽略密码失效前的预警期;
    • -E -1:移除账户自动失效日期。

直接编辑 /etc/shadow 文件

此方法直接操作存储用户认证信息的文本文件,风险较高但灵活性更强。

  1. 备份原始文件
    修改前务必先备份:

    sudo cp /etc/shadow /etc/shadow.bak
  2. 用文本编辑器打开文件
    推荐使用 nanovim

    sudo nano /etc/shadow
    ```  格式如下(以冒号分隔的多个字段):  
    ```plaintext
    用户名:加密后的密码哈希值:上次修改时间戳:最小间隔天数:最短存活时间:过期前警告天数:超期宽限天数:账号失效日期:保留字段

    例如某行可能类似:

    tmn:$6$randomhashedstring...:18723:0:99999:7:::
  3. 定位目标用户并修改关键字段

    • 第5个字段(max_age:将其改为 -1 表示密码永不过期,例如原值为 99999 时,直接替换为 -1
    • 其他相关字段建议同步调整:如将 min_age(第4个字段)也设为 0,避免因历史记录导致意外冲突。
  4. 保存退出并重启PAM服务(部分发行版需要)
    若基于Debian/Ubuntu系统,可能需要重新加载认证模块:

    sudo systemctl restart PAM

使用 usermod 命令快速配置

适用于熟悉命令行工具的管理员场景。

  1. 单步完成设置

    sudo usermod -p "" -e -1 <用户名>

    参数说明:

    • -p "":清空加密后的密码占位符(实际不改变原密码);
    • -e -1:将账户失效日期设为无穷大。
  2. 结合 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 文件中

0