口令策略(Linux + Windows)
场景
等保或安全基线要求:口令长度、复杂度、有效期、登录失败锁定。
前置条件
- 知道现有策略(先查再改)
- 改动会影响所有用户,先小范围试
- 有应急账号或带外,防止全员被锁
配置
Linux(pwquality + faillock)
cat >/etc/security/pwquality.conf <<'EOF'
minlen = 10
minclass = 3
maxrepeat = 3
dictcheck = 1
EOF
# 三次失败锁定 300 秒
cat >>/etc/pam.d/system-auth <<'EOF'
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=300
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=300
EOF
# 口令有效期 90 天
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
chage -M 90 用户名
Windows(域策略)
# 查看
Get-ADDefaultDomainPasswordPolicy
# 修改(域级别,影响所有人)
Set-ADDefaultDomainPasswordPolicy -Identity corp.example.com `
-MinPasswordLength 10 -ComplexityEnabled $true `
-MaxPasswordAge (New-TimeSpan -Days 90) `
-LockoutThreshold 5 -LockoutDuration (New-TimeSpan -Minutes 30)
验证
chage -l 用户名
faillock --user 用户名
Get-ADDefaultDomainPasswordPolicy | Format-List
Get-ADUser 用户名 -Properties PasswordLastSet, PasswordNeverExpires
回滚
cp /etc/pam.d/system-auth.bak /etc/pam.d/system-auth
域策略改回去:
Set-ADDefaultDomainPasswordPolicy -Identity corp.example.com -LockoutThreshold 0
坑
- 改 PAM 前不备份,配错后普通用户全登不上。
- 服务账号设了「密码永不过期」,等于绕过策略,需要单独说明。
- 锁定阈值设太小,用户输错两次就被锁,运维电话被打爆。
- 域策略改完要等复制和客户端刷新(
gpupdate /force)。 - 复杂度要求太高,用户会把密码写在便签上,反而更不安全。
- 改有效期后,快过期的老账号会被强制改密,提前通知。