好的,在 Linux 系统中,有多种方法可以设置用户账号的密码永不过期。这在服务器环境中为特定服务账号或管理员账号提供了便利,但在生产环境中需格外谨慎,因为它会带来安全风险。
![图片[1]_Linux设置用户账号的密码永不过期_知途无界](https://zhituwujie.com/wp-content/uploads/2025/12/d2b5ca33bd20251223095348.png)
下面我将为您汇总从临时到永久、从单个用户到全局策略的各种方法。
方法一:使用 chage 命令(最常用、最推荐)
chage 命令是专门用于修改用户密码过期信息的工具。它的 -M 选项可以设置密码的最大有效期(天数)。
核心原理:将密码最大有效期设置为 99999(一个很大的数字,约等于 273 年),或者设置为 -1(在某些系统上表示永不过期)。
1. 为指定用户设置密码永不过期
# 方法 A: 使用一个大数值 (推荐,兼容性更好)
sudo chage -M 99999 username
# 方法 B: 使用 -1 (如果系统支持)
sudo chage -M -1 username
示例:将用户 deployuser 的密码设置为永不过期
sudo chage -M 99999 deployuser
2. 验证设置结果
使用 chage -l 命令查看用户的密码过期策略详情。
sudo chage -l username
输出示例:
Last password change : Oct 26, 2023
Password expires : never # <--- 这里显示 never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999 # <--- 或者这里显示 99999
Number of days of warning before password expires : 7
当 Maximum number of days between password change 显示为 99999 或 never 时,即表示密码永不过期。
方法二:使用 passwd 命令
passwd 命令主要用于修改密码,但也提供了设置密码过期策略的选项。
-n:设置密码最短使用天数(默认 0)。-x:设置密码最长使用天数(默认 99999)。-w:设置密码过期前的警告天数。-i:设置密码过期后的宽限天数。
为指定用户设置密码永不过期
通过将最长使用天数 (-x) 设置为 99999 来实现。
sudo passwd -x 99999 username
示例:将用户 dbadmin 的密码设置为永不过期
sudo passwd -x 99999 dbadmin
验证:
同样可以使用 chage -l dbadmin 来确认设置已生效。
方法三:直接编辑 /etc/shadow 文件(不推荐新手)
/etc/shadow 文件存储了用户的加密密码和相关的过期信息。每行对应一个用户,字段之间用冒号分隔。
字段格式:username:password:last_change:min_age:max_age:warn:inactive:expire
max_age:密码最长使用天数。将其设置为99999即表示永不过期。
操作步骤:
- 备份文件(至关重要!):
sudo cp /etc/shadow /etc/shadow.bak - 使用
vipw -s命令安全编辑(推荐):vipw -s会锁定文件并调用默认编辑器,防止多人同时编辑导致损坏。sudo vipw -s找到对应用户的行,将第 5 个字段(从 0 开始计数)修改为99999。
**例如,将deployuser:...:180:...修改为deployuser:...:99999:...** - 或者使用
sed命令直接修改(快捷但有风险):sudo sed -i.bak -E 's/^([^:]+):[^:]*:[^:]*:[^:]*:)[0-9]+:/\199999:/' /etc/shadow-i.bak:直接修改文件并创建一个.bak备份。- 这个正则表达式比较复杂,建议优先使用
vipw -s。
警告:直接编辑 /etc/shadow 风险较高,容易因格式错误导致用户无法登录。除非你非常熟悉其格式,否则请优先使用前两种方法。
方法四:设置新创建的用户默认密码永不过期
如果你希望所有新创建的用户默认密码都永不过期,可以修改 /etc/login.defs 文件。
操作步骤:
- 编辑
/etc/login.defs文件:sudo nano /etc/login.defs - 找到
PASS_MAX_DAYS这一行,并将其值修改为99999:# Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 - 保存并退出。
注意:此方法只对新创建的用户生效,对已存在的用户无效。已存在用户的策略仍需用 chage 或 passwd 命令单独设置。
方法五:使用 usermod 命令(间接方法)
usermod 命令主要用于修改用户属性,它本身没有直接设置密码过期天数的选项。但是,我们可以结合 -e(--expiredate)选项来间接实现。
-e YYYY-MM-DD:设置账号的过期日期。-e ""或-e 0:有些资料说这能取消账号过期,但对密码过期策略影响不大。
更标准的做法是先用 usermod 修改其他属性,再用 chage 设置密码策略。 因此,usermod 通常不被视为设置密码永不过期的直接方法。
总结与安全建议
| 方法 | 命令 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
**chage** | sudo chage -M 99999 user | 官方推荐,功能专一,安全可靠 | 需单独为每个用户设置 | 绝大多数情况下的首选 |
**passwd** | sudo passwd -x 99999 user | 命令简单,易于记忆 | 功能不如 chage 丰富 | 快速为单个用户设置 |
**编辑 /etc/shadow** | sudo vipw -s | 可批量、精确修改 | 高风险,易出错,不推荐 | 高级用户,脚本批量处理 |
**修改 /etc/login.defs** | 编辑文件 | 可设置新用户默认策略 | 不影响现有用户 | 需要为新系统或所有新用户设定默认规则 |
安全建议
- 最小权限原则:只为确实需要永不过期的服务账号或特定管理员账号设置此策略。切勿为普通用户账号设置密码永不过期。
- 加强其他安全措施:对于设置了密码永不过期的账号,应加强监控和审计,并确保其密码足够强壮。可以考虑结合使用 SSH 密钥认证来代替密码登录,从根本上提升安全性。
- 定期审查:定期使用
chage -l命令审查这些账号的策略,确保其必要性依然存在。 - 文档化:将设置了密码永不过期的账号记录在案,并告知团队成员,避免遗忘和管理混乱。

























暂无评论内容