Linux 设置账号密码永不过期
- [Linux 设置账号密码永不过期](#Linux 设置账号密码永不过期)
-
- [方法一:使用 `chage` 命令(推荐)](#方法一:使用
chage
命令(推荐)) -
- [1. 设置密码永不过期](#1. 设置密码永不过期)
- [2. 验证设置结果](#2. 验证设置结果)
- [方法二:直接修改 `/etc/shadow` 文件](#方法二:直接修改
/etc/shadow
文件) -
- [1. 备份原始文件](#1. 备份原始文件)
- [2. 编辑shadow文件](#2. 编辑shadow文件)
- [3. 修改密码过期字段](#3. 修改密码过期字段)
- [方法三:使用 `usermod` 命令](#方法三:使用
usermod
命令) - 方法四:全局密码策略配置
-
- [1. 修改 `/etc/login.defs` 文件](#1. 修改
/etc/login.defs
文件) - [2. 批量修改现有用户](#2. 批量修改现有用户)
- [1. 修改 `/etc/login.defs` 文件](#1. 修改
- 方法五:使用图形化工具(如可用)
- 验证和监控
-
- [1. 检查密码策略](#1. 检查密码策略)
- [2. 创建监控脚本](#2. 创建监控脚本)
- 恢复密码过期策略
- 安全注意事项
- 总结
- [方法一:使用 `chage` 命令(推荐)](#方法一:使用
Linux 设置账号密码永不过期
在 Linux 系统中,设置用户账号密码永不过期可以通过多种方式实现。以下是详细的操作指南:
方法一:使用 chage
命令(推荐)
1. 设置密码永不过期
bash
# 设置用户密码永不过期
sudo chage -M 99999 username
# 同时设置账户永不过期
sudo chage -E -1 username
2. 验证设置结果
bash
# 查看用户密码策略
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. 备份原始文件
bash
# 备份shadow文件
sudo cp /etc/shadow /etc/shadow.backup
2. 编辑shadow文件
bash
# 使用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
命令
bash
# 设置密码永不过期
sudo usermod -e "" username
# 或者设置过期日期为永不过期
sudo usermod -e -1 username
方法四:全局密码策略配置
1. 修改 /etc/login.defs
文件
bash
sudo vi /etc/login.defs
修改以下参数:
properties
# 密码最大天数(永不过期)
PASS_MAX_DAYS 99999
# 密码最小天数
PASS_MIN_DAYS 0
# 密码最小长度
PASS_MIN_LEN 8
# 密码过期前警告天数
PASS_WARN_AGE 7
注意:此配置仅对新创建的用户有效,已有用户需要单独设置。
2. 批量修改现有用户
bash
# 修改所有现有用户的密码策略
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
方法五:使用图形化工具(如可用)
bash
# 使用GNOME用户管理工具
sudo gnome-users-admin
# 使用KDE用户管理工具
sudo kuser
验证和监控
1. 检查密码策略
bash
# 检查所有用户密码过期设置
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. 创建监控脚本
bash
#!/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)
恢复密码过期策略
如果需要恢复密码过期策略:
bash
# 恢复默认密码过期策略(90天)
sudo chage -M 90 username
# 设置特定过期日期
sudo chage -E "2024-12-31" username
安全注意事项
-
风险评估:
- 永不过期密码降低了安全性
- 适用于服务账户或特定场景
- 不建议对普通用户账户使用
-
替代方案:
bash# 使用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
-
审计要求:
bash# 记录密码策略变更 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 系统中的用户密码过期策略,根据实际需求平衡安全性和便利性。