2FA через freeRADIUS, игнорируя пароль
Мне было поручено настроить freeRADIUS, чтобы запрашивать у пользователя второй фактор аутентификации (например, Google Authenticator OTP), НО без предварительной проверки пароля пользователя.
Я вхожу в это полностью слепым, без предварительного опыта RADIUS. У нас есть веб-приложение, которое предлагает пользователю выполнить вход, поэтому аутентификация по паролю уже выполнена. Затем нам нужно запросить у пользователя второй фактор аутентификации для выполнения определенных действий. Мы не хотим постоянно просить пользователя ввести свой пароль (а локальное его кэширование, по-видимому, нет-нет), поэтому мы хотели бы как-то настроить freeRADIUS так, чтобы он:
- Проигнорируйте значение, которое мы передаем для пароля в начальном запросе
- Вернуть ответ на запрос, который побудит пользователя ввести свой второй коэффициент аутентификации (например, OTP)
Это вообще возможно? Как я уже сказал, у меня нет опыта работы с RADIUS, поэтому прошу прощения, если это глупый вопрос.
2 ответа
Я понял это сам. Если кому-то интересно, это связано с настройкой в /etc/pam.d/radiusd
Во-первых, следуйте одному из этих руководств, чтобы настроить Google Authenticator в качестве второго фактора на вашем сервере freeRADIUS:
https://networkjutsu.com/freeradius-google-authenticator/ https://www.supertechguy.com/help/security/freeradius-google-auth/
Когда дело доходит до внесения изменений в /etc/pam.d/radiusd, используйте одну из следующих конфигураций:
Чтобы запросить пароль и Google Auth OTP:
авторизационный реквизит pam_google_authenticator.so forward_pass
требуется авторизация pam_unix.so use_first_pass
требуется учетная запись pam_unix.so аудит
требуется учетная запись pam_permit.soЧтобы запросить ТОЛЬКО для OTP Google Auth (т.е. без пароля):
требуется авторизация pam_google_authenticator.so
требуется учетная запись pam_unix.so аудит
требуется учетная запись pam_permit.so
Обратите внимание, что это не отправляет ответ на вызов - это просто означает, что пароль не нужно вводить в первую очередь.
Радиус - это сетевой протокол аутентификации / авторизации / учета. Он работает на уровне 3 в модели OSI.
Ваше веб-приложение работает на уровне 7.
Так что здесь есть небольшое несоответствие. Вы можете использовать Radius для аутентификации сетевых подключений, таких как WiFi или сетевые порты, но вам нужно что-то на основе http для вашего веб-приложения.
Я делаю некоторые предположения, но, похоже, у вас есть сервер Radius для аутентификации пользователей в вашей сети, и вы использовали ту же базу данных пользователей для аутентификации пользователей в вашем веб-приложении. Независимо от того, использует ли веб-приложение протокол Radius для аутентификации пользователей, ваши пользователи не говорят Radius, когда вводят имя пользователя и пароль на веб-странице, поэтому Radius не поможет вам в этом - это нужно сделать в веб-приложение.
Если ваше веб-приложение имеет доступ к серверу радиуса, возможно, можно определить, какой пользователь прошел проверку подлинности, и на основании этого авторизовать /OTP-запрос, но это логика веб-приложения. Никакое количество настроек в FreeRadius не может достичь этого за вас.
Поэтому я бы рекомендовал сделать шаг назад и подумать, где хранятся ваши пользовательские данные. Хотя вы можете проходить аутентификацию на сервере freeRadius, Radius - это просто протокол, а на бэкэнде есть база данных пользователей. Это может быть сервер LDAP, база данных SQL, pam или просто текстовый файл.
Предполагая, что у вас есть общая пользовательская база данных, вы можете затем добавить какое-то приложение единого входа Oauth/SAML (Okta и PingID - некоторые коммерческие примеры) к потоку аутентификации каждой службы, так что вход в одно место занимает эффект в другом. Имея единый вход, вы можете либо изменить свое веб-приложение, чтобы оно требовало второго фактора в определенные моменты (ему нужно было знать существующий секрет OTP пользователя, либо вы могли бы потребовать, чтобы он настроил другой для этой цели), либо вы могли бы использовать какая-то политика и реал, если используемая вами технология SSO ее поддерживает.
В заключение, я не вижу способа сделать это в одном только FreeRadius, и даже если бы вы могли, вы, вероятно, не должны. И чтобы выполнить авторизацию, вам всегда нужно будет модифицировать приложение, если вы не внедрили какой-нибудь ужасный прокси-сервер посредник, который полностью скомпрометировал бы безопасность.