Как настроить аутентификацию PAM, чтобы объединить пароль + токен OTP

Я пытаюсь реализовать PAM-аутентификацию сервера OpenVPN для пользователей, хранящихся на сервере IPA. Мой вариант использования требует аутентификации PAM, а не аутентификации LDAP.

При тестировании пользователь, настроенный в IPA для аутентификации только с паролем, может успешно пройти аутентификацию. Но аутентификация не выполняется, когда пользователь IPA настроен на аутентификацию с паролем + токеном OTP.

Как описано в ссылке @ https://sourceforge.net/p/openvpn/mailman/message/35969399/

Я настроил /etc/pam.d/openvpn так:

   auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
   auth        sufficient    pam_sss.so otp_in_password
   auth        required      pam_deny.so
   account     [default=bad success=ok user_unknown=ignore] pam_sss.so
   account     required      pam_permit.so

Но аутентификация не выполняется, и в журнале IPA отображаются недопустимые учетные данные.

Я читал в другом месте, чтобы настроить SSSD для принятия значения 2FA как части поля пароля, потому что OpenVPN не имеет возможности запрашивать несколько запросов для разговора PAM. Но я не уверен, как это сделать.


person Bob C.    schedule 30.06.2020    source источник


Ответы (1)


Я решил это!

Ключ использовал более позднюю версию sssd. В версии 2.0.x стала доступна конфигурация запроса аутентификации - re: https://sssd.io/docs/design_pages/prompting_configuration.html

К сожалению, мой экземпляр OpenVPN работал на Centos 7.8, которая поддерживает только до версии 1.16. Итак, я создал виртуальную машину Centos 8 с уже загруженной версией sssd 2.2.3. Fedora 29 или выше также подойдет.

На виртуальной машине Centos 8 я установил и настроил openVPN и free-ipa-client. Затем я настроил sssd для объединения пароля и токена OTP в одно значение.

vi /etc/sssd/sssd.conf

Добавьте следующие разделы в конец файла:

[prompting/password]
password_prompt = Please enter LDAP password:

[prompting/2fa]
single_prompt = True
first_prompt = Please enter LDAP password + OTP token value:

При необходимости измените слова подсказки. На самом деле это проявляется только при тестировании из cli. Но самое главное, через много часов я узнал, что необходимы ОБА раздела в указанном порядке.

Затем настройте pam.d, отредактировав файл, используемый для службы OpenVPN - в моем случае файл называется openvpn.

vi /etc/pam.d/openvpn

Добавьте следующее:

auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so
auth        required      pam_deny.so
account     [default=bad  success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

Перезапустите sssd и openvpn

systemctl restart sssd
systemctl restart openvpn-server@server

Я также выполнил шаги, описанные в ссылке @ https://sourceforge.net/p/openvpn/mailman/message/35969399/ для настройки FreeIPA.

Чтобы протестировать локально:

  • Настройте пользователя в FreeIPA на использование только пароля. В моем случае идентификатор пользователя - test5
  • Переключитесь на локального пользователя на сервере, у которого нет прав sudo
  • su testuser
  • Теперь попробуйте переключиться на пользователя ipa
  • su test5
  • Должен появиться запрос - Введите пароль LDAP:
  • Подтвердите, что вы можете войти в систему только с паролем, а затем вернитесь к testuser
  • Теперь настройте пользователя (test5) в FreeIPA на использование пароля + OTP.
  • Создайте токен в FreeIPA для пользовательского test5
  • Попытка снова переключиться на пользователя ipa
  • su test5
  • Теперь вам должно быть предложено - Введите пароль LDAP + значение токена OTP:
  • Попробуйте войти только с паролем. Попытка должна потерпеть неудачу.
  • Попытка переключиться на пользователя ipa еще раз
  • su test5
  • Должен появиться запрос - Введите пароль LDAP + значение токена OTP:
  • Попробуйте снова войти в систему с паролем + значением токена OTP. (Я использовал Google Authenticator для генерации значения токена). Вход должен быть успешным

Затем я протестировал с помощью клиента OpenVPN - с токеном OTP и без него.

Все заработало!

person Bob C.    schedule 05.07.2020
comment
есть ошибка bugzilla.redhat.com/show_bug.cgi?id=1749279 Про необходимость второго раздела подсказки. - person abbra; 06.07.2020
comment
Я не уверен, что это отслеживается как ошибка, но два новых раздела отмечены в файле журнала как «недопустимые». Я локально добавил их в [rule / allowed_sections] cfg_rules.ini, а затем перестроил и установил. Два новых раздела больше не отображаются в файле журнала как недопустимые. - person Bob C.; 07.07.2020