我有一台 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/vsftpd
为auth required pam_deny.so
vsftp,则会正确响应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 菲