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

如何确认当前系统的密码策略生效位置
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_LEN 或 PASS_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=0和maxrepeat=2,才更接近真实长度控制 -
ucredit=-1表示“必须至少含 1 个大写字母”,负数才表示“强制最低数量” -
difok=5是新旧密码至少 5 个字符不同,不是“不能重用前 5 次密码”(那是pam_pwhistory.so干的) - 改完必须测试:
passwd切换到普通用户下试改密码,别只用 root 测试(root 默认绕过很多策略)
/etc/login.defs 还要不要动?哪些字段真有用
它只管用户创建时的默认值,且仅当创建命令(如 useradd)未显式指定参数时才生效。对已存在用户、或用 adduser(交互式封装)创建的用户,影响有限。
一个经过完善设计的经典网上购物系统,适用于各种服务器环境的高效网上购物系统解决方案,shopxp购物系统Html版是我们首次推出的免费购物系统源码,完整可用。我们的系统是免费的不需要购买,该系统经过全面测试完整可用,如果碰到问题,先检查一下本地的配置或到官方网站提交问题求助。 网站管理地址:http://你的网址/admin/login.asp 用户名:admin 密 码:admin 提示:如果您
-
PASS_MAX_DAYS 90:新建用户密码 90 天后过期,但不会自动触发chage -M 90到已有用户 -
ENCRYPT_METHOD SHA512必须设,否则新密码仍用 DES(极不安全),且不会覆盖已有用户的加密方式 -
SHA_CRYPT_MIN_ROUNDS和SHA_CRYPT_MAX_ROUNDS控制 salt 迭代轮数,建议设为50000和100000,提升暴力破解成本 -
PASS_WARN_AGE 7有效,但只影响login时的警告提示,不阻止登录
为什么改了策略,用户还是能设弱密码?常见失效原因
最常踩的坑是 PAM 配置顺序不对。PAM 按行执行,requisite 类型一失败就立即返回,但若它前面有 sufficient 模块(如 pam_permit.so)先通过了,整个密码修改流程就跳过了质量检查。
- 检查
/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL),确认pam_pwquality.so在pam_unix.so之前,且没有sufficient模块插队 - SSH 密码登录走的是
auth栈,不是password栈,所以改密码策略不影响 SSH 登录认证方式 - 容器环境(如 Docker)通常不加载完整 PAM 栈,
passwd命令可能完全忽略pam_pwquality - 使用
sudo passwd修改他人密码时,部分系统会跳过质量检查(取决于passwd是否以 root 权限调用 PAM)
策略真正落地,靠的是 PAM 加载顺序 + 模块类型 + 用户上下文,不是文件改了几行。漏掉任意一环,配置就形同虚设。









