当前位置:首页>Linux>Linux 密码策略、安全认证与 PAM 机制深度解析

Linux 密码策略、安全认证与 PAM 机制深度解析

  • 2026-10-11 07:15:38
Linux 密码策略、安全认证与 PAM 机制深度解析

Linux 密码策略、安全认证与 PAM 机制深度解析

一、Linux 密码策略基础配置

密码策略是控制密码复杂度、有效期和生命周期的核心。

1.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
  1. /etc/pam.d/ 目录下的 PAM 配置文件(下一节重点)
  2. /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:必须成功,否则最终失败,但继续其他模块。
  • requisite:失败立即返回,不再继续。
  • sufficient:成功即通过,不再继续(若前面无 required 失败)。
  • optional:不影响最终结果。

PAM 类型(四种主要):

  • auth:认证(验证身份)
  • account:账户检查(过期、锁定等)
  • password:密码更新
  • session:会话管理(打开/关闭会话)

2.2 常用 PAM 模块

  • pam_unix.so:传统 /etc/passwd + /etc/shadow 认证
  • pam_pwquality.so:密码复杂度检查
  • pam_tally2.so / pam_faillock.so:登录失败锁定
  • pam_limits.so:资源限制
  • pam_mkhomedir.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

参数解释:

  • deny=5:5 次失败后锁定
  • 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)

  1. 安装:
yum install google-authenticator -y    # RHEL
apt install libpam-google-authenticator -y  # Ubuntu
  1. 配置 PAM: 在 /etc/pam.d/sshd 顶部添加:
auth       required     pam_google_authenticator.so
  1. 配置 SSH:
vi /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,password publickey,keyboard-interactive
  1. 用户端生成密钥:
google-authenticator -t -d -f -r 3 -R 30 -W

扫描二维码到手机 App,后续 SSH 登录需输入验证码。

生产注意:

  • 先在测试环境验证,避免锁死自己。
  • 结合密钥认证:公钥 + 2FA 双保险。

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

运维最佳实践:

  • 使用 ssh-agent 管理私钥。
  • 定期轮换密钥。
  • 使用 sshd_config 的 Match User 块实现不同用户不同策略。

六、账户锁定、过期与生命周期管理

# 锁定账户
passwd -l username
usermod -L username

# 解锁
passwd -u username
usermod -U username

# 完全禁用登录(推荐离职)
usermod -s /sbin/nologin username

自动化生命周期: 使用 cron + 脚本定期扫描过期账户,或集成 CMDB/HR 系统。

七、故障排查与常见问题解决

常见故障:

  1. PAM 配置错误导致无法登录:

    • 保留一个 root 会话,修改配置后 pam_tally2 --reset 或重启 sshd。
    • 使用 pamtester 测试模块。
  2. 密码修改失败:

    • 检查 pwquality.conf 和 pam 顺序。
    • 日志:journalctl -u sshd 或 /var/log/secure
  3. 2FA 配置后锁死:

    • 本地控制台登录恢复,或使用 rescue 模式。

排查命令大全:

pamtester -a username sshd authenticate
getent shadow username
journalctl -xe | grep pam
ausearch -m user_auth

性能与兼容性:PAM 模块过多会略微增加延迟,但安全收益远大于此。

八、安全最佳实践与合规

  1. 最小必要原则:禁用不必要认证方式。
  2. 定期审计:lastb(失败登录)、lastlog。
  3. 集中管理:避免每台机器单独配置(后续 LDAP 篇)。
  4. 监控告警:异常登录、多次失败使用 Fail2Ban 或 OSSEC。
  5. 等保/合规要求:密码复杂度、有效期、审计留痕、MFA 等。
  6. 零信任认证:持续验证而非一次性。

推荐运维工具:

  • fail2ban
  • aide / tripwire 文件完整性
  • logwatch 或 ELK 集中日志分析

最新文章

随机文章