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

PAM, RADIUS, Google Authenticator и двухфакторная аутентификация

Я установил FreeRADIUS, PAM и Google Authtenicator. FreeRADIUS вызывает PAM, который, в свою очередь, вызывает библиотеку Google pam_google_authenticator.so. Все это работает успешно.

Однако на самом деле это не двухфакторная аутентификация, поскольку все, что нужно, - это OTP из приложения Google. Чтобы получить два 2FA, я хочу использовать локальный пароль Linux. Поскольку это происходит через RADIUS, я не могу запрашивать оба пароля, и мне нужно объединить их в один. Согласно Google Auth README и различным блогам, которые я нашел, я должен сделать это в PAM:

   auth requisite pam_google_authenticator.so forward_pass
   auth required pam_unix.so use_first_pass  

И затем я могу ввести пароль и OTP в одно и то же приглашение, например MyPass123456

Но это никогда не работает. При включенной отладке я вижу, что pam_unix.so проверяет и принимает пароль от пользователя, но все равно терпит неудачу. Если я удалю эту вторую строку или изменю «auth» на «account» (одно предложение, которое я нашел), auth будет работать, но локальный пароль просто игнорируется.

Мне что-то не хватает в моей конфигурации PAM?

Многочисленные поисковые запросы привели меня к https://bugs.launchpad.net/percona-server/+bug/1274821 который описывает аналогичную проблему. Как описано там, это сработало:

 auth requisite pam_google_authenticator.so forward_pass
 auth required pam_unix.so use_first_pass  
 account required pam_unix.so audit
 account required pam_permit.so

Хотя почему это работает, для меня остается загадкой, поскольку проблема MySQL связана с использованием PAM без полномочий root, и у меня есть установка FreeRADIUS для работы с правами root.

Можете ли вы дать свой файл конфигурации pam целиком? Если вы используете pam_deny.so после pam_unix.so, вам нужно изменить свою конфигурацию на:

auth [success=1 default=ignore]    pam_unix.so use_first_pass

Он указывает, что следующая строка должна быть пропущена, если модуль вернул успешный результат.

Весь конфиг для авторизации:

auth requisite       pam_google_authenticator.so forward_pass
auth [success=1 default=ignore]    pam_unix.so use_first_pass
auth requisite           pam_deny.so
auth required            pam_permit.so

Сначала модуль pam_google_authenticator извлекает TOTP и проверяет его.

Во-вторых, модуль pam_unix проверяет пароль и, если успешно, пропускает третью строку.

Попробуйте эту конфигурацию:

   auth requisite  pam_google_authenticator.so forward_pass
   auth sufficient pam_unix.so use_first_pass 

Однако трудно сказать, не видя всего auth записи в вашем конфигурационном файле pam.

Если вы меняете "auth" на "account", тогда pam_unix больше не используется для аутентификации.

Что ты имеешь в виду с

pam_unix.so проверяет и принимает пароль от пользователя, но все равно терпит неудачу

Как выглядит ваша конфигурация pam для этого сервиса? Поскольку "требуется" означает, что стек обработан до конца, возможно, он сломается после pam_unix.

Вы также можете подумать об использовании другого бэкэнда двухфакторной аутентификации, который сам обрабатывает эти два фактора ... https://www.howtoforge.com/two-factor-authentication-with-otp-using-privacyidea-and-freeradius-on-centos