搬瓦工 VPS PAM 身份认证系统配置教程
PAM(Pluggable Authentication Modules,可插拔认证模块)是 Linux 系统的核心认证框架,几乎所有需要身份验证的服务(SSH、sudo、login 等)都通过 PAM 来实现认证。通过合理配置 PAM,可以实现密码复杂度要求、登录失败锁定、双因素认证等多种安全策略。本文将详细介绍如何在搬瓦工 VPS 上配置 PAM 系统,全面提升身份认证安全性。
一、PAM 体系结构
PAM 采用模块化设计,将认证过程分为四个独立的管理组:
- auth:验证用户身份,例如检查密码、指纹或令牌。
- account:检查账户是否可用,例如账户是否过期、是否被锁定。
- password:管理密码修改,包括密码复杂度检查。
- session:管理会话的建立和销毁,例如挂载目录、设置环境变量。
每个模块有控制标志:required(必须通过但继续检查后续模块)、requisite(必须通过否则立即失败)、sufficient(通过则跳过后续模块)、optional(可选,通常用于会话管理)。
二、PAM 配置文件结构
2.1 配置文件位置
# 主配置目录
ls /etc/pam.d/
# 常见的配置文件
/etc/pam.d/sshd # SSH 登录认证
/etc/pam.d/sudo # sudo 命令认证
/etc/pam.d/login # 本地登录认证
/etc/pam.d/common-auth # 通用认证配置(Debian/Ubuntu)
/etc/pam.d/system-auth # 系统认证配置(CentOS/RHEL)
/etc/pam.d/common-password # 通用密码策略
2.2 配置文件格式
每行的格式为:类型 控制标志 模块路径 [模块参数]
# 示例:/etc/pam.d/sshd
auth required pam_sepermit.so
auth substack common-auth
auth required pam_env.so
account required pam_nologin.so
account include common-account
password include common-password
session required pam_loginuid.so
session include common-session
三、密码策略配置
3.1 安装 pam_pwquality 模块
# Ubuntu / Debian
apt install libpam-pwquality -y
# CentOS / RHEL
yum install pam_pwquality -y
3.2 配置密码复杂度
编辑密码质量配置文件:
vi /etc/security/pwquality.conf
添加以下配置:
# 密码最小长度
minlen = 12
# 最少包含大写字母数
ucredit = -1
# 最少包含小写字母数
lcredit = -1
# 最少包含数字数
dcredit = -1
# 最少包含特殊字符数
ocredit = -1
# 新密码与旧密码的最少不同字符数
difok = 5
# 禁止包含用户名
usercheck = 1
# 检测字典词
dictcheck = 1
# 拒绝回文密码
palindrome = 1
# 密码最大连续相同字符数
maxrepeat = 3
# 密码最大连续同类字符数
maxclassrepeat = 4
3.3 密码历史记录
防止用户重复使用旧密码:
# Ubuntu / Debian:编辑 /etc/pam.d/common-password
# 在 pam_unix.so 行添加 remember 参数
password required pam_unix.so obscure use_authtok try_first_pass yescrypt remember=12
四、登录失败锁定
4.1 使用 pam_faillock
pam_faillock 是现代 Linux 系统推荐的账户锁定模块,取代了旧的 pam_tally2:
# 编辑 /etc/security/faillock.conf
vi /etc/security/faillock.conf
# 失败次数阈值
deny = 5
# 锁定时间(秒),600 = 10 分钟
unlock_time = 600
# 失败计数窗口(秒)
fail_interval = 900
# 审计模式
audit
# 不锁定 root(生产环境慎用)
# even_deny_root
# root 锁定时间
# root_unlock_time = 60
4.2 配置 PAM 使用 faillock
# 编辑 /etc/pam.d/common-auth(Ubuntu/Debian)
# 在文件开头添加
auth required pam_faillock.so preauth
# 在 pam_unix.so 之后添加
auth [default=die] pam_faillock.so authfail
auth sufficient pam_faillock.so authsucc
4.3 管理锁定的账户
# 查看账户失败记录
faillock --user username
# 解锁账户
faillock --user username --reset
# 查看所有用户的锁定状态
faillock
五、配置 Google Authenticator 双因素认证
5.1 安装模块
# Ubuntu / Debian
apt install libpam-google-authenticator -y
# CentOS / RHEL
yum install google-authenticator -y
5.2 为用户初始化
# 以目标用户身份运行
google-authenticator -t -d -f -r 3 -R 30 -w 3
参数说明:-t 使用基于时间的令牌,-d 禁止重用令牌,-f 强制覆盖,-r 3 -R 30 每 30 秒限制 3 次尝试,-w 3 允许前后 3 个时间窗口。
5.3 配置 SSH 使用双因素认证
# 编辑 /etc/pam.d/sshd,添加以下行
auth required pam_google_authenticator.so nullok
# 编辑 /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
# 重启 SSH 服务
systemctl restart sshd
nullok 参数允许未配置 2FA 的用户照常登录,待所有用户都配置后可移除此参数。
六、访问时间限制
# 编辑 /etc/security/time.conf
# 格式:服务;终端;用户;时间
# 仅允许 admin 用户在工作时间通过 SSH 登录
sshd;*;admin;Wk0800-1800
# 编辑 /etc/pam.d/sshd,添加
account required pam_time.so
七、资源限制配置
# 编辑 /etc/security/limits.conf
# 限制用户最大进程数
* soft nproc 1024
* hard nproc 2048
# 限制最大打开文件数
* soft nofile 65535
* hard nofile 65535
# 限制 core dump
* hard core 0
# 确保 PAM 加载了 limits 模块
# 检查 /etc/pam.d/common-session 中是否包含:
session required pam_limits.so
八、安全审计与排查
# 查看认证日志
# Ubuntu / Debian
tail -f /var/log/auth.log
# CentOS / RHEL
tail -f /var/log/secure
# 测试 PAM 配置
pamtester sshd username authenticate
# 检查 PAM 模块是否可用
find /lib/x86_64-linux-gnu/security/ -name "*.so" | sort
九、最佳实践
- 备份配置文件:修改 PAM 配置前务必备份,错误的配置可能导致无法登录。
- 保持 root 会话:在修改 PAM 配置时,始终保持一个 root SSH 会话用于紧急恢复。
- 逐步测试:每次只修改一项配置,测试确认无误后再继续。
- 设置合理的密码策略:既要保证安全性又不能过于严格影响使用。
- 启用双因素认证:为所有可远程登录的账户启用 2FA。
总结
PAM 是 Linux 身份认证的基石,合理配置 PAM 可以从根本上提升搬瓦工 VPS 的安全性。建议至少配置密码复杂度要求和登录失败锁定,有条件的话再加上双因素认证。配合 Authelia 双因素认证网关 和 CrowdSec 安全引擎,可以构建企业级的身份认证安全体系。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 进入官网购买。