У меня есть сервер Ubuntu 14.04 с vsftpd и pam_script, установленным с помощью apt-get. Я настроил 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
ошибка в ответ на любую попытку аутентификации.
Кто-нибудь знает, что может происходить?
редактировать: Я тестировал ту же настройку pam как с su, так и с ssh (заменив исходный /etc/pam.d/su
и /etc/pam.d/ssh
с моим /etc/pam.d/vsftpd
), и оба они работали правильно - разрешил пользователю asdf
независимо от пароля и запрета любому другому пользователю. Ни одна из этих процедур не зависла, когда мой скрипт pam_script завершился с 1. Я также подтвердил, что они действительно использовали мой скрипт, зарегистрировав имя пользователя и проверив, перестали ли работать оригинальные методы аутентификации (unix) (они работали).
Похоже, что у vsftpd проблемы с ошибкой аутентификации pam_script. Тем не менее, до сих пор нет идей для исправления или обходного пути ...
Обычно я проверяю свои ответы, но на этот раз я этого не сделал, простите меня.
Подозреваю, что дважды выйти нельзя. Скорее всего, когда ID совпадает с asdf, вы останавливаете vsftpd, не осознавая этого.
В частности, попробуйте вместо этого:
#!/bin/bash echo "$PAM_USER" >> /home/me/pam_script.log if [ "$PAM_USER" == "asdf" ]; then exit 0 else exit 1 fi