Linux 密码策略、安全认证与 PAM 机制深度解析
一、Linux 密码策略基础配置
密码策略是控制密码复杂度、有效期和生命周期的核心。
1.1 核心配置文件
- /etc/login.defs —— 系统级默认策略
# 密码过期相关
PASS_MAX_DAYS 90 # 密码最长有效期
PASS_MIN_DAYS 0 # 最小修改间隔
PASS_MIN_LEN 12 # 最小长度(新版推荐结合 pam_pwquality)
PASS_WARN_AGE 7 # 到期前警告天数
# 用户创建默认
CREATE_HOME yes
USERGROUPS_ENAB yes
- /etc/pam.d/ 目录下的 PAM 配置文件(下一节重点)
- /etc/security/pwquality.conf —— 密码复杂度策略
1.2 chage 命令实战(单个用户密码策略管理)
# 查看用户密码策略
chage -l username
# 设置密码 90 天过期
chage -M 90 username
# 设置最小间隔 7 天
chage -m 7 username
# 设置警告期 14 天
chage -W 14 username
# 强制用户下次登录必须修改密码
chage -d 0 username
# 设置账户过期日期(离职常用)
chage -E 2026-12-31 username
批量处理脚本示例(运维常用):
#!/bin/bash
# batch_password_policy.sh
for user in $(cat /tmp/users.txt); do
chage -M 90 -m 1 -W 14 -d 0 $user
echo"用户 $user 密码策略已更新"
done
1.3 /etc/shadow 文件字段深度解析
回顾 shadow 格式: username:password:lastchg:min:max:warn:inactive:expire:reserved
lastchg:自 1970-01-01 以来的天数,可用 chage 修改。inactive:密码过期后,账户自动锁定的宽限天数。
运维建议:定期执行审计脚本:
awk -F: '$5 < 90 || $5 == "" {print $1}' /etc/shadow | grep -v '^root$'
二、PAM 机制详解 —— 可插拔认证模块
PAM 是 Linux 认证体系的灵魂,它将认证、授权、会话管理等功能模块化,便于灵活配置。
2.1 PAM 工作原理
PAM 配置文件位于 /etc/pam.d/,常见服务对应文件:
sshd、login、su、sudo、passwd 等。
PAM 控制标志(重要):
required:必须成功,否则最终失败,但继续其他模块。sufficient:成功即通过,不再继续(若前面无 required 失败)。
PAM 类型(四种主要):
2.2 常用 PAM 模块
pam_unix.so:传统 /etc/passwd + /etc/shadow 认证pam_tally2.so / pam_faillock.so:登录失败锁定pam_sss.so / pam_ldap.so:集成 LDAP/FreeIPA(后续篇)
三、PAM 配置实战 —— 构建强认证策略
3.1 密码复杂度配置(推荐现代方式)
编辑 /etc/security/pwquality.conf:
minlen = 12
dcredit = -1 # 至少1位数字
ucredit = -1 # 至少1位大写
lcredit = -1 # 至少1位小写
ocredit = -1 # 至少1位特殊字符
difok = 4 # 与旧密码不同字符数
retry = 3
修改 /etc/pam.d/passwd 和 /etc/pam.d/system-auth(CentOS/RHEL)或 /etc/pam.d/common-password(Ubuntu):
password requisite pam_pwquality.so try_first_pass local_users_only retry=3
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
3.2 登录失败锁定策略(防暴力破解)
使用 pam_faillock.so(推荐,新版系统):
在 /etc/pam.d/sshd 和 system-auth 中添加:
# auth 部分前添加
auth required pam_faillock.so preauth silent audit deny=5 unlock_time=300
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=300
# account 部分
account required pam_faillock.so
参数解释:
unlock_time=300:300 秒(5 分钟)后自动解锁
手动解锁:
faillock --user username --reset
3.3 su 和 sudo 的 PAM 强化
/etc/pam.d/su:
auth required pam_wheel.so use_uid
限制只有 wheel 组成员才能 su。
四、双因素认证(2FA/MFA)部署实战
单因素密码已不足以应对现代威胁,推荐部署 Google Authenticator 或 Duo 等 2FA。
4.1 Google Authenticator 部署(SSH)
yum install google-authenticator -y # RHEL
apt install libpam-google-authenticator -y # Ubuntu
- 配置 PAM: 在
/etc/pam.d/sshd 顶部添加:
auth required pam_google_authenticator.so
vi /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,password publickey,keyboard-interactive
google-authenticator -t -d -f -r 3 -R 30 -W
扫描二维码到手机 App,后续 SSH 登录需输入验证码。
生产注意:
4.2 企业级方案:Duo Security 或 Keycloak
后续文章会结合 FreeIPA/LDAP 详细介绍集中 MFA。
五、SSH 密钥认证与安全强化
密码登录是高风险方式,推荐完全禁用密码,强制密钥 + 2FA。
sshd_config 关键配置:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
生成密钥对:
ssh-keygen -t ed25519 -C "ops@company.com"
ssh-copy-id user@server
运维最佳实践:
- 使用 sshd_config 的
Match User 块实现不同用户不同策略。
六、账户锁定、过期与生命周期管理
# 锁定账户
passwd -l username
usermod -L username
# 解锁
passwd -u username
usermod -U username
# 完全禁用登录(推荐离职)
usermod -s /sbin/nologin username
自动化生命周期: 使用 cron + 脚本定期扫描过期账户,或集成 CMDB/HR 系统。
七、故障排查与常见问题解决
常见故障:
- 保留一个 root 会话,修改配置后
pam_tally2 --reset 或重启 sshd。
- 检查 pwquality.conf 和 pam 顺序。
- 日志:
journalctl -u sshd 或 /var/log/secure
排查命令大全:
pamtester -a username sshd authenticate
getent shadow username
journalctl -xe | grep pam
ausearch -m user_auth
性能与兼容性:PAM 模块过多会略微增加延迟,但安全收益远大于此。
八、安全最佳实践与合规
- 定期审计:
lastb(失败登录)、lastlog。 - 集中管理:避免每台机器单独配置(后续 LDAP 篇)。
- 监控告警:异常登录、多次失败使用 Fail2Ban 或 OSSEC。
- 等保/合规要求:密码复杂度、有效期、审计留痕、MFA 等。
推荐运维工具: