Назад | Перейти на главную страницу

vsftpd зависает после неудачной аутентификации pam_script

У меня есть сервер 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