Linux 用户密码策略配置与管理

1次阅读

linux密码策略生效位置取决于pam配置,需通过grep -r “pwquality|pam_pwquality” /etc/pam.d/确认是否加载pam_pwquality.so;若未加载,则/etc/login.defs仅影响新用户创建,chage -l可查看用户实际策略。

Linux 用户密码策略配置与管理

如何确认当前系统的密码策略生效位置

Linux 密码策略不是单点配置,它可能来自 PAM、shadow 工具、或 systemd 的 login 服务。直接改 /etc/login.defs 不一定生效,尤其在使用 pam_pwquality.so 的系统上(如 RHEL 8+/ubuntu 20.04+)。先运行 grep -r "pwquality|pam_pwquality" /etc/pam.d/,看是否在 /etc/pam.d/common-password/etc/pam.d/system-auth 中加载了该模块。如果没加载,改 /etc/login.defs 里的 PASS_MIN_LENPASS_MAX_DAYS 只影响新用户创建,不影响已有用户密码修改行为。

  • chage -l username 查看某用户实际生效的密码过期参数(来自 shadow 数据库,非配置文件)
  • authconfig --test | grep password(RHEL/centos)或 libuser-config --dump | grep -i pass 可辅助判断策略来源
  • Ubuntu 默认用 libpam-pwquality,但若未在 PAM 配置中显式启用,/etc/security/pwquality.conf 就是摆设

修改密码最小长度和复杂度时,pam_pwquality.so 的关键参数怎么设

真正起作用的是 PAM 模块的参数,不是 /etc/login.defs。比如要求至少 12 位、含大小写字母+数字+符号,得在 PAM 配置里写:

password requisite pam_pwquality.so retry=3 minlen=12 difok=5 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
  • minlen=12:不是“最少 12 位”,而是“基础分值 ≥12”,默认小写字母 1 分、大写 1 分、数字 1 分、符号 1 分;若加了 dictcheck=0maxrepeat=2,才更接近真实长度控制
  • ucredit=-1 表示“必须至少含 1 个大写字母”,负数才表示“强制最低数量”
  • difok=5 是新旧密码至少 5 个字符不同,不是“不能重用前 5 次密码”(那是 pam_pwhistory.so 干的)
  • 改完必须测试:passwd 切换到普通用户下试改密码,别只用 root 测试(root 默认绕过很多策略)

/etc/login.defs 还要不要动?哪些字段真有用

它只管用户创建时的默认值,且仅当创建命令(如 useradd)未显式指定参数时才生效。对已存在用户、或用 adduser(交互式封装)创建的用户,影响有限。

  • PASS_MAX_DAYS 90:新建用户密码 90 天后过期,但不会自动触发 chage -M 90 到已有用户
  • ENCRYPT_METHOD SHA512 必须设,否则新密码仍用 DES(极不安全),且不会覆盖已有用户的加密方式
  • SHA_CRYPT_MIN_ROUNDSSHA_CRYPT_MAX_ROUNDS 控制 salt 迭代轮数,建议设为 50000100000,提升暴力破解成本
  • PASS_WARN_AGE 7 有效,但只影响 login 时的警告提示,不阻止登录

为什么改了策略,用户还是能设弱密码?常见失效原因

最常踩的坑是 PAM 配置顺序不对。PAM 按行执行,requisite 类型一失败就立即返回,但若它前面有 sufficient 模块(如 pam_permit.so)先通过了,整个密码修改流程就跳过了质量检查。

  • 检查 /etc/pam.d/common-passworddebian/Ubuntu)或 /etc/pam.d/system-auth(RHEL),确认 pam_pwquality.sopam_unix.so 之前,且没有 sufficient 模块插队
  • ssh 密码登录走的是 auth ,不是 password 栈,所以改密码策略不影响 SSH 登录认证方式
  • 容器环境(如 docker)通常不加载完整 PAM 栈,passwd 命令可能完全忽略 pam_pwquality
  • 使用 sudo passwd 修改他人密码时,部分系统会跳过质量检查(取决于 passwd 是否以 root 权限调用 PAM)

策略真正落地,靠的是 PAM 加载顺序 + 模块类型 + 用户上下文,不是文件改了几行。漏掉任意一环,配置就形同虚设。

text=ZqhQzanResources