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