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

RedHat 8.7的vsFTPd配置Google Authenticator PAM遇阻求助

在RedHat 8.7的vsFTPd上配置TOTP认证的排查求助

已在Debian/Ubuntu的vsFTPd上成功配置TOTP认证,RedHat系统的SSH登录TOTP认证(含SELinux开启状态)也已实现,但RedHat 8.7服务器上的vsFTPd无论SELinux是否禁用,PAM配置均未成功。

RedHat默认/etc/pam.d/vsftpd文件内容如下:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

尝试添加配置auth required pam_google_authenticator.so secret=/home/${USER}/.google_authenticator nullok:

  • 放在文件开头时无法登录FTP,输入TOTP码或Unix密码均无效;
  • 放在结尾时该配置不生效,仅需Unix密码即可登录。

目标配置:若登录用户存在.google_authenticator配置文件,则使用TOTP认证替代Unix密码;若无该文件,则使用常规Unix密码登录(FTP通常不支持MFA,仅能输入一个密码项)。

排查方向建议:

  • 梳理PAM认证链执行逻辑:PAM的auth模块按顺序执行,required要求模块必须验证通过才能继续。默认配置中auth include password-auth会调用密码验证模块,导致TOTP模块位置不当时代码逻辑冲突。需调整模块顺序与控制标志,让存在TOTP文件时跳过密码验证,无文件时走密码流。
  • 优化pam_google_authenticator的条件逻辑:结合pam_succeed_if模块判断用户家目录下是否存在.google_authenticator文件,动态控制认证流程。例如先判断文件存在则仅验证TOTP,不存在则执行密码验证。
  • 检查vsFTPd核心配置:确认vsftpd.conf中pam_service_name=vsftpd(默认配置)、local_enable=YES已正确设置,无其他禁用PAM或强制密码的配置项干扰。
  • 查看认证日志定位错误:检查/var/log/secure和/var/log/messages中的PAM、vsFTPd认证日志,明确是TOTP模块读取密钥失败,还是密码模块强制验证导致的冲突。
  • 调整PAM模块控制标志:将TOTP模块的required改为requisite(验证失败直接终止流程),或配合optional与条件判断,同时修改password-auth的调用逻辑,实现TOTP验证通过后跳过密码步骤。
  • 用pamtester工具测试认证流程:通过pamtester vsftpd <用户名> authenticate命令,模拟不同配置下的PAM认证过程,直观看到各模块的验证结果与执行顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:05:25