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
相关产品推荐
相关产品推荐

