
1. chage命令基础解析chage是Linux系统中用于管理用户密码时效性的核心命令全称为change age。这个看似简单的命令实际上承担着系统安全策略的重要角色。作为系统管理员我几乎每天都会用到它来维护服务器用户账号的安全状态。1.1 命令基本语法与参数chage的标准调用格式非常直接chage [选项] 用户名但别被它的简单语法迷惑了 - 每个选项背后都对应着关键的安全策略。让我拆解几个最常用的参数-m最小天数这个参数设定了密码修改的最小间隔。设为0表示随时可以改密码设为7则意味着修改密码后7天内不能再改。这在防止用户频繁更换密码逃避历史记录检查时特别有用。-M最大天数决定了密码的有效期。比如设为90就是强制用户每3个月必须更换密码。这是很多金融系统的基础安全要求。-W警告天数在密码到期前多少天开始提醒用户。设为7的话用户会在密码到期前一周收到警告。-I不活跃天数这个参数经常被忽视但它其实很关键。它设定了密码过期后账号被锁定的宽限期。比如设为5表示密码过期后还能用5天之后账号就被锁了。1.2 查看当前密码策略使用-l选项可以查看用户的完整密码策略chage -l username输出会包含7个关键信息点上次密码修改日期密码过期日期密码失效日期宽限期后账号过期日期最小修改间隔最大有效期警告提前天数在实际运维中我习惯用这个命令快速检查所有特权账号的状态特别是root和数据库账号。2. chage命令实战应用2.1 强制首次登录修改密码新员工入职时我通常会这样设置他们的初始账号useradd newuser passwd newuser chage -d 0 newuser这个-d 0的魔法在于它将上次修改密码时间设为1970年1月1日Unix纪元起点相当于强制用户第一次登录时必须改密码。这在企业环境中是标准做法。2.2 企业级密码策略配置假设公司安全政策要求密码至少每90天更换一次更换后7天内不能再次修改到期前7天提醒过期后立即锁定对应的chage命令会是chage -M 90 -m 7 -W 7 -I 0 username特别注意修改这些参数需要root权限。普通用户只能查看自己的密码策略(chage -l $USER)但不能修改。2.3 特殊日期格式处理-E和-d参数支持多种日期格式YYYY-MM-DD推荐MM/DD/YYYYDD-MM-YYYY或者从1970年1月1日至今的天数例如设置账号在2025年底过期chage -E 2025-12-31 username3. 高级技巧与排错指南3.1 与/etc/login.defs的配合系统默认密码策略在/etc/login.defs中定义主要参数包括PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 7但要注意修改login.defs只影响新创建的用户。已有用户的策略需要用chage单独调整。3.2 密码永不过期的隐患设置-M -1会让密码永不过期这看似方便但极其危险。我见过太多服务器因为服务账号密码永不过期而被入侵的案例。如果确实需要至少要配合强密码策略。3.3 常见错误排查问题1用户抱怨密码未过期就被要求修改检查-m值是否设得太大确认/etc/shadow中相关字段是否与chage显示一致问题2密码过期后账号未被锁定检查-I参数是否为0确认pam模块配置正确/etc/pam.d/system-auth问题3修改不生效确保执行时使用了root权限检查selinux是否阻止了修改查看/var/log/secure日志获取详细错误4. 企业环境最佳实践4.1 批量修改用户策略用这个for循环可以批量更新所有普通用户for user in $(awk -F: $3 1000 $3 60000 {print $1} /etc/passwd); do chage -M 90 -m 7 -W 7 $user done4.2 自动化监控脚本我常用的密码过期监控脚本框架#!/bin/bash WARNING_DAYS14 current_date$(date %s) awk -F: {print $1} /etc/passwd | while read user; do expiry_date$(chage -l $user | grep Password expires | cut -d: -f2) if [[ $expiry_date ! never ]]; then expiry_epoch$(date -d $expiry_date %s) days_left$(( (expiry_epoch - current_date) / 86400 )) if [ $days_left -le $WARNING_DAYS ]; then echo 用户 $user 密码将在 $days_left 天后过期 # 这里可以添加邮件通知逻辑 fi fi done4.3 与LDAP的集成在LDAP环境中chage命令可能无法直接修改远程账号。这时需要改用ldapmodify -x -D cnadmin,dcexample,dccom -W修改shadowAccount对象的以下属性shadowLastChangeshadowMinshadowMaxshadowWarningshadowInactiveshadowExpire5. 安全加固建议5.1 特权账号的特殊处理对于root和sudo用户我建议采用更严格的策略chage -M 30 -m 1 -W 5 -I 0 root同时配合passwd -l root # 禁止直接root登录5.2 密码历史控制chage不直接支持密码历史需要配合pam_pwhistory.so模块。在/etc/pam.d/system-auth中添加password required pam_pwhistory.so remember5这样系统会记住最近5次密码防止用户循环使用旧密码。5.3 审计与合规定期检查密码策略合规性awk -F: $5 90 {print $1} /etc/shadow # 找出密码有效期超过90天的账号配合cronjob生成周报满足等保2.0等合规要求。6. 替代方案与扩展工具6.1 passwd命令的局限性虽然passwd -e可以强制用户下次登录改密码但它无法设置复杂的时效策略。chage才是专业选择。6.2 图形化工具对于不习惯命令行的管理员可以安装yum install gnome-system-tools # RHEL/CentOS apt install gnome-system-tools # Debian/Ubuntu然后使用users-admin工具进行可视化设置。6.3 企业级解决方案在大型环境中可以考虑FreeIPA/Red Hat IDMMicrosoft Active Directory各类PAM模块这些方案提供了更完善的密码策略管理和审计功能。