Я установил 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