rpm系统:
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth required pam_faillock.so preauth audit silent deny=5 even_deny_root unlock_time=300
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=5 even_deny_root unlock_time=300
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_faillock.so authsucc audit deny=5 even_deny_root unlock_time=300
auth required pam_deny.so
account required pam_faillock.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8 enforce_for_root
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
debian系统:
解释:
🛡️ 1. auth(认证阶段)
这个阶段负责验证“你是谁”,也就是校验密码或生物特征。
auth required pam_env.so:加载用户的环境变量。auth required pam_faildelay.so delay=2000000:如果认证失败,系统会强制延迟 2000000 微秒(即 2 秒)再返回失败结果。这能有效拖慢暴力破解者的尝试速度。auth required pam_faillock.so preauth audit silent deny=5 even_deny_root unlock_time=300:(核心安全策略) 这是登录前的预检查。
preauth:在密码校验前检查账户是否已被锁定。deny=5:连续失败 5 次就触发锁定。even_deny_root:连 root 超级管理员也不例外,失败 5 次同样会被锁定。unlock_time=300:锁定 300 秒(5 分钟)后自动解锁。auth sufficient pam_fprintd.so:尝试使用指纹识别。sufficient的意思是,如果指纹验证成功,直接通过,不再往下执行;如果失败,则继续往下走密码验证。auth sufficient pam_unix.so try_first_pass:使用传统的本地密码(/etc/shadow)进行验证。try_first_pass表示优先使用前面模块(如指纹)已经获取的密码,避免重复输入。auth [default=die] pam_faillock.so authfail audit deny=5 even_deny_root unlock_time=300:如果上面的密码验证失败了,就会走到这一行。它负责记录失败次数,一旦达到 5 次,就正式将账户锁定 5 分钟。auth requisite pam_succeed_if.so uid >= 1000 quiet_success:限制 UID 小于 1000 的系统账户不能通过常规方式登录(通常只有普通用户的 UID 是 1000 及以上)。requisite表示如果条件不满足,立刻返回失败。auth sufficient pam_faillock.so authsucc audit deny=5 even_deny_root unlock_time=300:如果密码验证成功,走到这一行。它的作用是清除该用户之前的失败记录,将计数器归零。auth required pam_deny.so:最后的兜底模块。如果前面所有的认证方式都走不通,直接拒绝登录。📋 2. account(账户检查阶段)
认证通过后,检查这个账户当前是否被允许登录。
account required pam_faillock.so:(核心联动) 再次检查账户的锁定状态。如果前面 auth 阶段发现账户已经被锁,这里会直接拦截登录。account required pam_unix.so:检查账户的常规状态,比如密码是否过期、账户是否被手动禁用等。account sufficient pam_localuser.so:如果是本地用户(存在于/etc/passwd),直接放行。account sufficient pam_succeed_if.so uid < 1000 quiet:如果是 UID 小于 1000 的系统账户,直接放行(系统服务运行需要)。account required pam_permit.so:兜底放行,允许通过。🔑 3. password(密码修改策略阶段)
当用户执行
passwd命令修改密码时,由这个模块接管。
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8 enforce_for_root:(密码复杂度强制要求)
minlen=8:密码长度至少 8 位。dcredit=-1:至少包含 1 个数字。lcredit=-1:至少包含 1 个小写字母。ucredit=-1:至少包含 1 个大写字母。ocredit=-1:至少包含 1 个特殊字符。enforce_for_root:即使是 root 用户修改密码,也必须遵守上述复杂度要求。retry=3:输错格式允许重试 3 次。password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok:使用 SHA512 强加密算法将新密码写入/etc/shadow文件。password required pam_deny.so:兜底拒绝。🖥️ 4. session(会话管理阶段)
用户成功登录后,系统为其建立运行环境。
session optional pam_keyinit.so revoke:初始化用户的内核密钥环,退出时撤销。session required pam_limits.so:加载/etc/security/limits.conf中的资源限制(如最大打开文件数等)。-session optional pam_systemd.so:将用户会话注册到 systemd 中,方便系统管理用户进程。前面的-表示即使该模块加载失败,也不会影响登录。session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid:如果当前服务是crond(定时任务),则跳过下一行(pam_unix.so),避免定时任务执行时产生不必要的日志或干扰。session required pam_unix.so:常规的会话设置,如记录登录日志等。
debian系统:
common-auth
auth [default=ignore] pam_faillock.so preauth silent audit deny=5 even_deny_root unlock_time=300
auth [success=1 default=ignore] pam_unix.so nullok
auth [default=die] pam_faillock.so authfail audit deny=5 even_deny_root unlock_time=300
auth sufficient pam_faillock.so authsucc audit
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
common-password
password requisite pam_pwquality.so retry=3 minlen=8 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 enforce_for_root
password [success=1 default=ignore] pam_unix.so obscure sha512
password requisite pam_deny.so
password required pam_permit.so
common-account
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
account required pam_faillock.so
解释:
一、 /etc/pam.d/common-auth(认证与登录失败锁定)
此文件控制用户的身份验证过程以及登录失败后的锁定策略。auth [default=ignore] pam_faillock.so preauth silent audit deny=5 even_deny_root unlock_time=300
作用:预检模块(Pre-authentication)。在用户输入密码之前执行,检查该用户是否因为之前连续失败 5 次而处于锁定状态。
参数解析:
preauth:表示这是认证前的检查。
silent:静默模式,不向用户提示“账号已锁定”等详细信息(防止攻击者通过提示信息枚举用户名)。
audit:将详细的锁定信息记录到系统日志中。
deny=5:连续失败 5 次触发锁定。
even_deny_root:即使是 root 用户,连续失败 5 次也会被锁定。
unlock_time=300:锁定 300 秒(5分钟)后自动解锁。
[default=ignore]:控制标志。如果该模块返回非成功状态(例如发生错误),PAM 会忽略这个结果,继续向下执行下一行。auth [success=1 default=ignore] pam_unix.so nullok
作用:标准的 Linux 密码验证模块,负责核对用户输入的密码与 /etc/shadow 中加密后的密码是否匹配。
参数解析:
[success=1 default=ignore]:这是 PAM 栈跳转的核心。如果密码验证成功(success),则跳过接下来的 1 行(即跳过下面的 authfail 记录失败模块),直接执行 authsucc;如果失败,则忽略该结果,继续向下执行。
nullok:允许密码为空的用户登录(如果不想要这个特性,可以删掉它)。auth [default=die] pam_faillock.so authfail audit deny=5 even_deny_root unlock_time=300
作用:失败处理模块。只有当上一行的 pam_unix.so 验证密码失败时,才会执行到此行。
参数解析:
authfail:表示这是认证失败后的处理。它会将本次失败记录到 /var/run/faillock/ 目录下的用户计数文件中。
[default=die]:控制标志。如果记录失败时发生任何错误,PAM 会立即终止整个认证流程(die),直接拒绝登录。auth sufficient pam_faillock.so authsucc audit
作用:成功处理模块。只有当 pam_unix.so 验证密码成功时,才会执行到此行。
参数解析:
authsucc:表示认证成功。它的核心作用是清除该用户之前的失败登录计数,防止历史失败记录导致误锁定。
sufficient:控制标志。表示只要这一行执行成功,整个认证栈就立刻返回成功,不再向下执行后面的 pam_deny.so 等兜底模块。auth requisite pam_deny.so
作用:兜底拒绝模块。如果前面的密码验证失败,且 authsucc 没有被执行到,流程就会走到这里。requisite 表示无条件拒绝访问,并立即返回失败结果。auth required pam_permit.so
auth optional pam_cap.so
作用:系统默认的兜底允许模块和 Linux 能力(Capabilities)模块。在正常的 faillock 流程中,这两行通常不会被执行到(因为成功被 authsucc 拦截,失败被 pam_deny.so 拦截)。二、 /etc/pam.d/common-password(密码复杂度策略)
此文件仅在用户修改密码(如执行 passwd 命令)时生效。password requisite pam_pwquality.so retry=3 minlen=8 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 enforce_for_root
作用:密码复杂度检查模块。在写入新密码前,强制校验新密码是否符合安全规范。
参数解析:
requisite:如果密码不符合要求,立即拒绝修改,不再往下执行。
retry=3:允许用户有 3 次机会输入符合要求的新密码。
minlen=8:密码最小长度为 8 位。
dcredit=-1:必须包含至少 1 个数字。
lcredit=-1:必须包含至少 1 个小写字母。
ucredit=-1:必须包含至少 1 个大写字母。
ocredit=-1:必须包含至少 1 个特殊字符。
enforce_for_root:即使是 root 用户修改密码,也必须遵守上述复杂度要求。password [success=1 default=ignore] pam_unix.so obscure sha512
作用:实际的密码写入模块。将符合复杂度的新密码加密(sha512)后写入 /etc/shadow。
参数解析:
[success=1 default=ignore]:如果密码修改成功,跳过下一行(pam_deny.so),直接结束流程。password requisite pam_deny.so
password required pam_permit.so
作用:标准的兜底拒绝与允许模块。三、 /etc/pam.d/common-account(账户有效性检查)
此文件在用户通过密码验证后,进一步检查账户是否具备访问权限。account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
作用:检查账户是否过期、是否被锁定(如 passwd -l 锁定)等基础状态。account requisite pam_deny.so
account required pam_permit.so
作用:标准的兜底拒绝与允许模块。account required pam_faillock.so
作用:账户锁定状态二次校验。
为什么需要它? 在 common-auth 阶段,preauth 检查了锁定状态;但当用户成功登录后,系统还需要在 account 阶段再次确认该账户没有被锁定,这是 pam_faillock 完整生效的必要条件。

336

被折叠的 条评论
为什么被折叠?



