在 linux 系统中,设置用户账号密码永不过期可以通过多种方式实现。以下是详细的操作指南:
方法一:使用chage命令(推荐)
1. 设置密码永不过期
# 设置用户密码永不过期 sudo chage -m 99999 username # 同时设置账户永不过期 sudo chage -e -1 username
2. 验证设置结果
# 查看用户密码策略 sudo chage -l username # 输出示例: last password change : jan 01, 2023 password expires : never password inactive : never account expires : never minimum number of days between password change : 0 maximum number of days between password change : 99999 number of days of warning before password expires : 7
方法二:直接修改/etc/shadow文件
1. 备份原始文件
# 备份shadow文件 sudo cp /etc/shadow /etc/shadow.backup
2. 编辑shadow文件
# 使用vipw命令安全编辑(推荐) sudo vipw -s # 或者使用文本编辑器 sudo vi /etc/shadow
3. 修改密码过期字段
找到对应用户行,将第5个字段(密码最大天数)改为 99999:
# 修改前: username:$6$xyz...:18687:0:90:7:30:: # 修改后: username:$6$xyz...:18687:0:99999:7:30::
shadow文件字段说明:
- 用户名
- 加密密码
- 最后修改密码的天数(从1970-1-1开始)
- 最小密码年龄(0表示可立即修改)
- 最大密码年龄(99999表示永不过期)
- 密码过期前的警告天数
- 密码过期后的宽限天数
- 账户过期日期
- 保留字段
方法三:使用usermod命令
# 设置密码永不过期 sudo usermod -e "" username # 或者设置过期日期为永不过期 sudo usermod -e -1 username
方法四:全局密码策略配置
1. 修改/etc/login.defs文件
sudo vi /etc/login.defs
修改以下参数:
# 密码最大天数(永不过期) pass_max_days 99999 # 密码最小天数 pass_min_days 0 # 密码最小长度 pass_min_len 8 # 密码过期前警告天数 pass_warn_age 7
注意:此配置仅对新创建的用户有效,已有用户需要单独设置。
2. 批量修改现有用户
# 修改所有现有用户的密码策略
for user in $(getent passwd | cut -d: -f1); do
sudo chage -m 99999 $user
done
# 或者只修改有登录shell的用户
for user in $(getent passwd | grep -v "/nologin\|/false" | cut -d: -f1); do
sudo chage -m 99999 $user
done
方法五:使用图形化工具(如可用)
# 使用gnome用户管理工具 sudo gnome-users-admin # 使用kde用户管理工具 sudo kuser
验证和监控
1. 检查密码策略
# 检查所有用户密码过期设置
sudo awk -f: '{print $1 ":" $5}' /etc/shadow
# 检查即将过期的密码
sudo chage -l $(getent passwd | cut -d: -f1) | grep -e "password expires|account expires" | grep -v "never"
2. 创建监控脚本
#!/bin/bash
# check_password_expiry.sh
today=$(date +%s)
warn_days=30
while ifs=: read -r user _ _ _ max _ _ _; do
if [[ "$max" -ne 99999 && "$max" -ne -1 ]]; then
expire_date=$(($(date -d "1970-01-01 + $max days" +%s)))
days_left=$(( (expire_date - today) / 86400 ))
if [[ "$days_left" -le "$warn_days" ]]; then
echo "警告: 用户 $user 的密码将在 $days_left 天后过期"
fi
fi
done < <(sudo awk -f: '{print $1 ":" $5}' /etc/shadow)
恢复密码过期策略
如果需要恢复密码过期策略:
# 恢复默认密码过期策略(90天) sudo chage -m 90 username # 设置特定过期日期 sudo chage -e "2024-12-31" username
安全注意事项
风险评估:
- 永不过期密码降低了安全性
- 适用于服务账户或特定场景
- 不建议对普通用户账户使用
替代方案:
# 使用ssh密钥认证替代密码 ssh-keygen -t rsa -b 4096 ssh-copy-id user@host # 禁用密码登录 sudo sed -i 's/#passwordauthentication yes/passwordauthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd
审计要求:
# 记录密码策略变更
echo "$(date): 设置用户 $user 密码永不过期" | sudo tee -a /var/log/security_changes.log
# 定期审计永不过期账户
sudo awk -f: '$5 == "99999" {print $1}' /etc/shadow | tee /tmp/never_expire_users.txt
总结
| 方法 | 适用场景 | 持久性 | 影响范围 |
|---|---|---|---|
chage 命令 | 单个用户设置 | 永久 | 仅指定用户 |
| 修改shadow文件 | 批量或精确控制 | 永久 | 系统范围 |
usermod 命令 | 简单设置 | 永久 | 仅指定用户 |
| login.defs配置 | 新用户默认设置 | 永久 | 所有新用户 |
推荐做法:
- 生产环境使用
chage命令进行精确控制 - 服务账户可以设置密码永不过期
- 定期审计永不过期账户
- 结合其他安全措施(如密钥认证、多因素认证)
通过以上方法,您可以灵活地管理 linux 系统中的用户密码过期策略,根据实际需求平衡安全性和便利性。
到此这篇关于linux设置账号密码永不过期的方法汇总的文章就介绍到这了,更多相关linux设置账号密码永不过期内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论