2FA через freeRADIUS, игнорируя пароль

Мне было поручено настроить freeRADIUS, чтобы запрашивать у пользователя их второй фактор аутентификации (например, Google Authenticator OTP), НО без предварительной проверки пароля пользователя.

I ' m входит в это полностью слепым, без предварительного опыта работы с RADIUS. У нас есть веб-приложение, которое предлагает пользователю войти в систему, поэтому аутентификация по паролю уже выполнена. Затем нам нужно запросить у пользователя второй фактор аутентификации, чтобы выполнить определенные действия. Мы не хотим постоянно просить пользователя ввести свой пароль (а кэширование его локально, по всей видимости, недопустимо), поэтому мы хотели бы каким-то образом настроить freeRADIUS так, чтобы он:

  • Игнорировать значение который мы передаем в качестве пароля в начальном запросе
  • Возвращаем ответ на запрос, который побуждает пользователя ввести свой второй фактор аутентификации (например, OTP)

Возможно ли это вообще? Как я уже сказал, у меня нет предыдущего опыта работы с RADIUS, поэтому извиняюсь, если это глупый вопрос.

5
задан 1 October 2018 в 16:38
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:

    auth Requisite pam_google_authenticator.so forward_pass
    требуется авторизация pam_unix.so use_first_pass
    требуется учетная запись pam_unix.so audit
    требуется учетная запись pam_permit.so

  2. Чтобы запросить ТОЛЬКО для Google Auth OTP (т.е. без пароля):

    auth required pam_google_authenticator.so
    необходим аккаунт pam_unix.так аудит
    требуется учетная запись pam_permit.so

Обратите внимание, что это не отправляет ответ на запрос - это просто означает, что пароль не нужно вводить в первую очередь.

2
ответ дан 3 December 2019 в 01:49

Radius - это сетевой протокол аутентификации / авторизации / учета. В модели OSI он работает на уровне 3.

Ваше веб-приложение работает на уровне 7.

Так что здесь есть некоторая несогласованность. Вы можете использовать Radius для аутентификации сетевых подключений, таких как Wi-Fi или сетевые порты, но вам нужно что-то на основе http для вашего веб-приложения.

Я делаю некоторые предположения, но похоже, что у вас есть сервер Radius для аутентификации пользователей. в вашей сети и использовали ту же базу данных пользователей для аутентификации пользователей в вашем веб-приложении. Независимо от того, использует ли веб-приложение протокол Radius для аутентификации пользователей, ваши пользователи не говорят Radius, когда они вводят имя пользователя и пароль на веб-страницу, поэтому Radius не собирается вам в этом помогать - это нужно делать в веб-приложение.

Если ваше веб-приложение имеет доступ к серверу RADIUS, можно было бы определить, какой пользователь аутентифицирован, и на основании этого запросить / OTP, но это логика веб-приложения. Никакая конфигурация FreeRadius не может вам помочь.

Поэтому я бы рекомендовал сделать шаг назад и подумать, где хранятся ваши пользовательские данные. Хотя вы можете проходить аутентификацию на сервере freeRadius, Radius - это всего лишь протокол, а на бэкэнде есть база данных пользователей. Это может быть сервер LDAP, база данных SQL, pam или просто текстовый файл.

Предполагая, что у вас есть общая база данных пользователей, вы можете добавить какое-то приложение единого входа Oauth / SAML (Okta и PingID - это некоторые коммерческие примеры) для потока аутентификации каждой службы, так что вход в одном месте действует в другом. При наличии единого входа вы можете либо изменить свое веб-приложение, чтобы в определенных точках потребовать второй фактор (он должен знать существующий секрет OTP пользователя, или вы можете потребовать, чтобы они настроили другой для этой цели), либо вы можете использовать какая-то политика и повторная авторизация, если используемая вами технология SSO поддерживает это.

В заключение, я не вижу способа сделать это только в freeRadius, и даже если бы вы могли, вероятно, не стоит. А для выполнения части авторизации вам всегда нужно будет модифицировать приложение, если только вы не реализуете какой-нибудь ужасный прокси-сервер типа «человек посередине», который полностью ставит под угрозу безопасность.

1
ответ дан 3 December 2019 в 01:49

Теги

Похожие вопросы