Linux PAM模块分为auth、account、password、session四类,分别负责身份验证、账户可用性检查、密码修改控制和登录环境管理;强化密码策略需用pam_pwquality.so并精准配置参数;防暴力破解须成对配置pam_faillock.so的preauth与authfail;SSH远程登录应结合PAM实现空密码禁止、root限制及IP/用户白名单管控。

Linux PAM 模块是账户认证安全加固的核心机制,不是加几行配置就完事,关键在模块类型匹配、调用顺序合理、策略参数精准。改错一行,可能全系统无法登录。
明确四类PAM模块作用,避免混用
PAM配置按功能划分为四个独立栈,每类模块承担不同职责,不能交叉替代:
-
auth:验证身份,如密码比对、双因素触发、失败计数(
pam_faillock.so、pam_unix.so) -
account:检查账户可用性,如过期时间、登录时段、IP白名单(
pam_time.so、pam_access.so) -
password:控制密码修改行为,如强度校验、历史禁止、root强制(
pam_pwquality.so、pam_pwhistory.so) -
session:管理登录环境,如家目录创建、资源限制、日志记录(
pam_limits.so、pam_umask.so)
强化密码策略:用好 pam_pwquality.so
该模块替代老旧的 pam_cracklib.so,需确保已安装 libpwquality 包(RHEL系执行 yum install libpwquality,Debian系执行 apt install libpwquality-tools)。
在 /etc/pam.d/system-auth(RHEL/CentOS)或 /etc/pam.d/common-password(Debian/Ubuntu)中,添加或修正这一行:
-
minlen=12:最低12位,但实际生效还取决于字符类别分布(d/u/l/o各至少1位) -
difok=5:新旧密码至少5个字符不同,防简单替换 -
maxrepeat=3:禁止连续4个相同字符(如aaaa拒绝,aaabbb允许) -
enforce_for_root:让 root 用户也受规则约束,不加则默认豁免
防暴力破解:启用 pam_faillock.so 锁定账户
必须成对配置 preauth 和 authfail 阶段,否则无效。编辑 /etc/pam.d/system-auth(RHEL)或 /etc/pam.d/common-auth(Debian),在 auth 段插入:
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=90
再在 account 段末尾添加:
-
deny=5:5次失败后锁定 -
unlock_time=900:15分钟自动解锁(单位秒) -
fail_interval=90:仅统计90秒内连续失败,防误判 - 首次启用后,失败记录存于
/var/run/faillock/,确保该目录存在且可写
限制远程登录权限:SSH层精细管控
不要只靠 /etc/ssh/sshd_config,PAM 可在认证流程中叠加控制:
- 禁止空密码:在
/etc/pam.d/sshd的auth段首行加auth [success=ok default=die] pam_deny.so(配合其他模块判断) - 限制 root 远程登录:加
auth required pam_securetty.so,并确保/etc/securetty中不含pts/* - 按 IP 或用户白名单控制:启用
pam_access.so,在/etc/pam.d/sshd加account required pam_access.so accessfile=/etc/security/access.conf,然后在/etc/security/access.conf写规则,例如:
+ : root : 10.10.1.0/24
- : root : ALL


















