Linux设置账号密码永不过期的方法汇总

 更新时间:2025年12月23日 08:49:36   作者:问道飞鱼  
在Linux系统中,设置用户账号密码永不过期可以通过chage、编辑/etc/shadow文件、usermod命令、修改/etc/login.defs文件或使用图形化工具来实现,每种方法都有其适用场景和优缺点,建议根据实际需求选择合适的方法,需要的朋友可以参考下

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

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

方法三:使用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设置账号密码永不过期内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux常用命令之grep命令用法详解

    Linux常用命令之grep命令用法详解

    这篇文章主要介绍了Linux常用命令grep命令用法详解,grep命令用于对文件和文本执行重复搜索任务的Unix工具,可以通过grep命令指定特定搜索条件来搜索文件及其内容以获取有用的信息。对此感兴趣可以了解一下
    2020-07-07
  • Linux上读取或设置环境和shell变量的教程

    Linux上读取或设置环境和shell变量的教程

    当通过 shell 会话与服务器交互时,有许多信息会被 shell 编译以确定其行为和对资源的访问,其中一些设置包含在配置设置中,而其他一些则由用户输入确定,在本指南中,我们将讨论如何与环境进行交互,并通过配置文件以及交互方式读取或设置环境和 shell 变量
    2024-10-10
  • Linux libdrm中drm_syncobj的实现原理

    Linux libdrm中drm_syncobj的实现原理

    本文分析libdrm中drm_syncobj的API实现,涵盖创建销毁、跨进程同步、信号重置及时间线操作,支持多阶段异步任务同步,适用于DMA与GPU渲染等复杂场景,提升同步灵活性与效率
    2025-09-09
  • 在Linux和Windows下查看文件MD5值的几种方法

    在Linux和Windows下查看文件MD5值的几种方法

    MD5是一种常见的哈希算法,用于生成文件的唯一“指纹”,它在文件传输和验证过程中非常有用,能够确保文件未被篡改,本文将介绍在 Linux 和 Windows 下查看文件 MD5 值的几种方法,并分别列出不同操作系统下的命令,需要的朋友可以参考下
    2025-06-06
  • Linux中的awk命令全解析

    Linux中的awk命令全解析

    这篇文章主要介绍了Linux中的awk命令全解析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Win10 + Ubuntu 16.04双系统完美安装教程【详细】

    Win10 + Ubuntu 16.04双系统完美安装教程【详细】

    这篇文章主要介绍了Win10 + Ubuntu 16.04双系统完美安装教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • ssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下
    2017-01-01
  • Linux中date命令转换日期提示date: illegal time format问题解决

    Linux中date命令转换日期提示date: illegal time format问题解决

    date命令是显示或设置系统时间与日期,最近在使用中发现了一个问题,所以下面这篇文章主要给大家介绍了关于Linux中date命令转换日期提示date: illegal time format错误的解决方法,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2017-12-12
  • Linux服务器磁盘空间清理方法汇总

    Linux服务器磁盘空间清理方法汇总

    在长时间运行过程中,Linux服务器上的磁盘空间可能会被各种文件和目录占用,导致磁盘空间不足,所以我们定期清理磁盘空间是非常必要的,本文将介绍一些常见的Linux服务器磁盘空间清理方法,需要的朋友可以参考下
    2024-04-04
  • 在Apache服务器上添加虚拟主机功能的方法

    在Apache服务器上添加虚拟主机功能的方法

    这篇文章主要介绍了在Apache服务器上添加虚拟主机功能的方法,文中以CentOS系统为示例环境,需要的朋友可以参考下
    2015-08-08

最新评论