Мы используем FreeRadius, Kerberos и Google Authenticator для реализации двухфакторной аутентификации. Двухфакторная аутентификация отлично работает как из radtest, так и из брандмауэра Watchguard. Чтобы войти в систему, пользователь вводит свой пароль Kerberos и объединяет PIN-код, предоставленный Google Authenticator. Radius использует pam для связи с GAuth, а затем с Kerberos. Стек pam
/etc/pam.d/radiusd
auth requisite pam_google_authenticator.so forward_pass
auth required pam_krb5.so use_first_pass
Директива forward_pass сообщает pam_google_authenticator.so, что нужно удалить шесть завершающих символов, проверить их, а затем передать оставшуюся строку на следующий шаг в качестве пароля.
Проблема возникает, когда политика Kerberos устаревает для пароля, требуя сброса (или + needchange установлено для принципала). Когда это происходит, пользователь не уведомляется. Они вводят свой пароль и пин-код как обычно, и им разрешается входить. Затем что-то в фоновом режиме обновляет пароль Kerberos, добавляя старый пароль и добавленный пин-код (например, mypasswrd123456). Я проверил, что этот новый пароль действительно существует в базе данных Kerberos и может использоваться для дальнейшей аутентификации, но, конечно, вам нужно понять, что изменение произошло, и сохранить объединенную строку. Маловероятно, что это произойдет в производстве.
Мне не удалось определить причину изменения. Единственное сообщение журнала - подтверждение того, что пароль был обновлен. Кажется, что Kerberos должен предупреждать Radius о необходимости изменения, Radius видит, что у него новый пароль, и передает его обратно.
Я пробовал добавить
password required deny.so
в /etc/pam.d/radiusd, но это не помогло.
ОС - Ubuntu, а пакеты устанавливались с помощью apt-get.
Любые мысли приветствуются.