You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7 GUI环境下点击取消按钮后pam_faildelay.so不生效问题排查

问题成因
  • GDM PAM事务未正确重置:CentOS 7默认使用的GNOME显示管理器(GDM)在用户点击「取消」按钮中断登录流程时,没有调用pam_end()接口销毁当前的PAM会话上下文,而是复用了之前的事务实例。pam_faildelay.so的延迟计数逻辑绑定在PAM会话上下文中,复用旧上下文会导致模块跳过延迟逻辑,直接进入密码校验流程。
  • GDM内置延迟逻辑冲突:GDM自身集成了防暴力破解的延迟机制,默认会拦截PAM返回的延迟请求,在你中断第一次登录后,GDM会判定本次用户交互不属于「连续失败请求」,直接屏蔽了pam_faildelay.so的规则生效。
  • PAM配置覆盖范围不全:你修改的system-auth-ac和password-auth-ac是通用PAM配置,GDM的登录流程会读取专属配置文件/etc/pam.d/gdm-password,如果该配置中没有显式加载pam_faildelay.so,或者引用通用配置的顺序不对,也会导致规则不生效。
问题定位步骤
  1. 验证GDM专属PAM配置
    首先查看/etc/pam.d/gdm-password的内容,确认其auth段是否正确加载了pam_faildelay.so,如果该文件是直接引用system-auth,需要确认pam_faildelay.so的配置在auth段的最顶部,在所有认证模块之前。你可以直接在gdm-password的auth段开头添加如下配置临时测试:
auth required pam_faildelay.so delay=60000000 debug
  1. 开启PAM调试日志排查调用链路
    修改/etc/rsyslog.conf,添加如下行开启PAM调试日志落盘:
auth.debug /var/log/pam_debug.log

重启rsyslog服务systemctl restart rsyslog,然后复现你的测试场景,对比第一次失败、取消、第二次失败三个阶段的日志:

  • 检查第一次失败时是否有pam_faildelay的延迟触发日志
  • 检查点击取消时是否有pam_end的调用日志
  • 检查第二次失败时是否有pam_faildelay的模块加载、延迟计算日志
    如果第二次请求没有调用pam_faildelay的记录,即可确认是GDM没有触发PAM模块重新加载的问题。
  1. 对比终端登录验证场景边界
    切换到tty终端(Ctrl+Alt+F2),模拟同样的操作:输入错误密码后按Ctrl+C中断,再次输入错误密码,观察是否有1分钟延迟。如果tty下规则正常生效,即可100%确认问题出在GDM的登录逻辑,而非通用PAM配置错误。
  2. 跟踪GDM进程调用逻辑
    使用ps aux | grep gdm-session-worker找到GDM会话进程的PID,用strace -p [PID] -e trace=signal,pam跟踪系统调用,观察点击取消时GDM是否正确销毁了PAM会话。
临时修复方案
  • 如果确认是GDM的bug导致,可以将pam_faildelay.so的配置直接写入/etc/pam.d/gdm-password的auth段最顶部,同时给所有pam_unix.so行添加nodelay参数,避免内置延迟覆盖自定义配置
  • 若仍未生效,可以替换GDM为轻量显示管理器LightDM,该管理器不存在PAM会话复用的问题
  • 注意不要直接修改*-auth-ac文件,这类文件是authconfig自动生成的,重启或者执行authconfig命令后会被覆盖,建议修改/etc/pam.d/system-auth-local和/etc/pam.d/password-auth-local后执行authconfig --updateall固化配置

内容的提问来源于stack exchange,提问作者yyilmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:05