【Linux知识】Linux 设置账号密码永不过期

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. 检查密码策略](#1. 检查密码策略)
      • [2. 创建监控脚本](#2. 创建监控脚本)
    • 恢复密码过期策略
    • 安全注意事项
    • 总结

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文件字段说明

  1. 用户名
  2. 加密密码
  3. 最后修改密码的天数(从1970-1-1开始)
  4. 最小密码年龄(0表示可立即修改)
  5. 最大密码年龄(99999表示永不过期)
  6. 密码过期前的警告天数
  7. 密码过期后的宽限天数
  8. 账户过期日期
  9. 保留字段

方法三:使用 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

安全注意事项

  1. 风险评估

    • 永不过期密码降低了安全性
    • 适用于服务账户或特定场景
    • 不建议对普通用户账户使用
  2. 替代方案

    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
  3. 审计要求

    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 系统中的用户密码过期策略,根据实际需求平衡安全性和便利性。

相关推荐
AlfredZhao1 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao16 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩2 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈2 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫2 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++