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

Настройка google-Authenticator-libpam (TOTP / HOTP) для аутентификации в сочетании с pam-mysql для vsftpd

У меня есть установка, в которой виртуальные пользователи vsftpd (последняя версия, 3.0.3) аутентифицируются в базе данных MySQL с использованием pam-MySQL [1]. Это отлично работает, настроено так:

auth required /lib/security/pam_mysql.so user=vsftpd passwd=password host=localhost db=dbname table=users usercolumn=username passwdcolumn=password crypt=1 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime
account required /lib/security/pam_mysql.so user=vsftpd passwd=password host=localhost db=dbname table=users usercolumn=username passwdcolumn=password crypt=1 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime

Теперь я хотел бы добавить TOTP / HOTP с помощью модуля pam_google_authenticator [2]. Для обратной совместимости с FTP-клиентом (-ами) [3] я хотел бы сделать это в режиме «пароль + токен», например «password123456».

Согласно сторонней документации [4], это возможно с помощью параметра forward_pass в модуле, эффективно удаляющего последние 6 цифр данного пароля, их обработки и пересылки обычного пароля следующему заданному модулю pam следующим образом:

auth required pam_google_authenticator.so secret=/tmp/{USER}/.google_authenticator no_strict_owner user=vsftpd forward_pass
auth required /lib/security/pam_mysql.so [...] use_first_pass=1
account required /lib/security/pam_mysql.so [...]

В этом случае настройки аутентификатора Google правильно созданы в /tmp/user1/.google_authenticator. Однако войти в систему с помощью пользователя и его комбинации пароль-otp-невозможно (режимы отладки включены для pam-MySQL и pam_google_authenticator):

vsftpd(pam_google_authenticator[131]: debug: start of google_authenticator for "user1"
vsftpd(pam_google_authenticator[131]: pam_mysql - option debug is set to ""
vsftpd(pam_google_authenticator[131]: pam_mysql - option verbose is set to "1"
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_close_db() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_sm_authenticate() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_open_db() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_open_db() returning 0.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_check_passwd() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_format_string() called
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_quick_escape() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - SELECT password FROM users WHERE username = 'user1'
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_check_passwd() returning 6.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_sql_log() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_format_string() called
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_quick_escape() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_quick_escape() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_quick_escape() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_quick_escape() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - INSERT INTO logs (msg, user, host, rhost, pid, logtime) VALUES ('AUTHENTICATION FALURE (FIRST_PASS)', 'user1', '172.17.0.2', '172.17.0.1', '131', NOW())
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_sql_log() returning 5.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_sm_authenticate() returning 7.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_release_ctx() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_destroy_ctx() called.
vsftpd(pam_google_authenticator[131]: pam_mysql - pam_mysql_close_db() called.

Вопросы:

  1. Как дальше отлаживать это?
  2. Мне кажется, что модуль pam-MySQL получает неправильный пароль, отсюда и сообщение об ошибке "AUTHENTICATION FALURE (FIRST_PASS)"?
  3. Есть ли какой-либо рекомендуемый альтернативный способ достижения максимальной совместимости с клиентами, но все же реализовать OTP для FTP с vsftpd?

Источники: