pam_script 验证失败后 vsftpd 冻结

pam_script 验证失败后 vsftpd 冻结

我有一台 Ubuntu 14.04 服务器,使用 apt-get 安装了 vsftpd 和 pam_script。我已将 vsftpd 配置为使用 pam_script 进行虚拟用户身份验证,我的/etc/pam.d/vsftpd文件如下所示:

auth    sufficient      pam_script.so
account required        pam_permit.so

脚本pam_script_auth非常简单:

#!/bin/bash
echo "$PAM_USER" >> /home/me/pam_script.log

if [ "$PAM_USER" == "asdf" ]; then
  exit 0
fi

exit 1

我已确认该脚本使用正确(每次我尝试登录 vsftpd 时它都会记录用户名)。

理论上,这应该允许asdf用户访问,无论密码如何,并禁止其他任何人访问。但是每次我尝试使用不同的用户名时,vsftpd 都会冻结。我这样测试:

$ ftp localhost
Connected to ****
220 (vsFTPd 3.0.2)
Name (****:edziubudzik): [I type "asdf2"]
331 Please specify the password.
Password:

提供密码后什么也没有发生并且 vsftpd 冻结 - 在我重新启动它之前它不接受任何其他连接。

/var/log/vsftpd.log仅注册来自 IP 地址的连接(Tue Feb 17 15:50:01 2015 [pid 9517] CONNECT: Client [my IP address]"),并且在此测试期间根本不会发生变化/var/log/auth.log/var/log/syslog

但是,如果我将第一行更改/etc/pam.d/vsftpdauth required pam_deny.sovsftp,则会正确响应530 Authentication Failed任何身份验证尝试而出现错误。

有人知道会发生什么事吗?

编辑:我已使用 su 和 ssh 测试了相同的 pam 设置(通过将原始的/etc/pam.d/su和替换/etc/pam.d/ssh为我的/etc/pam.d/vsftpd),它们都正常工作 - 允许用户(asdf无论密码如何)并禁止任何其他用户。当我的 pam_script 脚本以 1 退出时,这些进程均未挂起。我还通过记录用户名并检查原始身份验证方法(unix)是否停止工作(它们确实停止工作)确认他们确实使用了我的脚本。

因此看起来 vsftpd 遇到了 pam_script 身份验证失败的问题。但仍不知道如何修复或解决...

答案1

我通常会测试我的答案,但这次没有,请原谅我。

我怀疑您无法退出两次。很可能当 ID 与“asdf”匹配时,您会在不知不觉中停止 vsftpd。

具体来说,可以尝试这样做:

/bin/bash #!/bin/bash
回显“$PAM_USER”>> /home/me/pam_script.log

如果 [ “$PAM_USER” == “asdf” ]; 然后
  出口 0
别的
  出口 1

相关内容