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, используйте одну из следующих конфигураций:

  1. Чтобы запросить пароль и Google Auth OTP:

    авторизационный реквизит pam_google_authenticator.so forward_pass
    требуется авторизация pam_unix.so use_first_pass
    требуется учетная запись pam_unix.so аудит
    требуется учетная запись pam_permit.so

  2. Чтобы запросить ТОЛЬКО для 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, и даже если бы вы могли, вы, вероятно, не должны. И чтобы выполнить авторизацию, вам всегда нужно будет модифицировать приложение, если вы не внедрили какой-нибудь ужасный прокси-сервер посредник, который полностью скомпрометировал бы безопасность.

Другие вопросы по тегам