FreeIPA/OTP
Использование двухфакторной аутентификации (2FA) — это один из способов повысить безопасность аутентификации. Одним из наиболее популярных вариантов является использование одноразовых паролей (OTP). Существуют открытые стандарты механизмов OTP:
- HOTP (на основе счётчика): RFC 4226
- TOTP (на основе времени): RFC 6238
Методы аутентификации
Во FreeIPA способы аутентификации пользователей могут быть установлены глобально или отдельно для каждого пользователя. Установка нескольких способов аутентификации позволяет использовать любой из указанных методов (логическое ИЛИ).
Определены следующие методы аутентификации пользователей (но не все могут быть реализованы):
- Пароль
- RADIUS
- Двухфакторная аутентификация (пароль + OTP)
- PKINIT
- Пароль с усиленной защитой (SPAKE или FAST)
- External Identity Provider
- Отключить переопределение на уровне пользователя (только в глобальной конфигурации)
Если значение не задано, используется парольная аутентификация.
Только администраторы могут изменять тип аутентификации пользователя (глобально или для каждого пользователя).
Разрешения (Permissions)
У токена может быть либо ноль, либо один владелец. Если у токена нет владельца, он считается не назначенным. У владельца токена есть следующие права:
- чтение (read)
- аутентификация (authenticate)
- синхронизация (synchronize)
У токенов может быть ноль или более менеджеров. У менеджера токена есть следующие права:
- чтение (read)
- изменение (write)
- удаление (delete)
Администраторы могут создавать токены, которые либо не назначены/не управляемы, либо принадлежат и/или управляются любым пользователем. Пользователи могут создавать токены только себе (при этом они становятся владельцами и менеджерами созданного токена).
Управление функциями
Веб-интерфейс
Методы аутентификации
Глобальные методы аутентификации доступны на вкладке настроек сервера («IPA-сервер» -> «Конфигурация» -> «Стандартные типы аутентификации пользователей»).
Методы аутентификации для каждого пользователя будут доступны на странице пользователя («Идентификация» -> «Пользователи» -> «Пользователь» -> «Типы аутентификации пользователей»).
Конфигурация прокси-сервера RADIUS
Администраторам доступна вкладка «Аутентификация» -> «Серверы RADIUS» для управления прокси-серверами RADIUS. Эти серверы могут быть назначены отдельным пользователям на странице конкретного пользователя.
OTP-токены
Пользователям доступна вкладка для управления токенами («Токены OTP»), где можно добавлять, удалять и редактировать самоназначаемые/управляемые токены:
Администраторы на вкладке «Токены OTP» могут управлять токенами всех пользователей.
Ссылка на страницу синхронизации предоставляется на странице входа в систему FreeIPA.
Командная строка
Методы аутентификации
Описание | Команда | Опции |
---|---|---|
Изменение глобальных методов аутентификации | config-mod | --user-auth-type=password/otp/radius |
Изменение метода аутентификации пользователя | user-mod | --user-auth-type=password/otp/radius --radius=STR --radius-username=STR |
Примеры:
- установить глобально метод аутентификации «Двухфакторная аутентификация (пароль + OTP)»:
ipa config-mod --user-auth-type=otp
- установить для пользователя ivanov метод аутентификации «Двухфакторная аутентификация (пароль + OTP)»:
ipa user-mod ivanov --user-auth-type=otp
Конфигурация сервера RADIUS
Описание | Команда | Опции |
---|---|---|
Добавить сервер RADIUS | radiusproxy-add | NAME --desc=STR --server=STR --secret --timeout=INT --retries=INT --userattr=STR |
Найти сервер RADIUS | radiusproxy-find | --name=STR --desc=STR --server=STR --timeout=INT --retries=INT --userattr=STR |
Изменить сервер RADIUS | radiusproxy-mod | --rename=STR --desc=STR --server=STR --secret --timeout=INT --retries=INT --userattr=STR |
Удалить сервер RADIUS | radiusproxy-del | |
Показать информацию о сервере RADIUS | radiusproxy-show |
Примеры:
- добавить сервер RADIUS:
$ ipa radiusproxy-add freeradius_test --server=192.168.0.101 --secret Секрет: Введите Секрет ещё раз для проверки: ----------------------------------------------- Добавлен прокси-сервер RADIUS "freeradius_test" ----------------------------------------------- Имя прокси-сервера RADIUS: freeradius_test Сервер: 192.168.0.101 Секрет: cGFzc3dvcmQ=
- показать информацию о сервере RADIUS:
$ ipa radiusproxy-show freeradius_test Имя прокси-сервера RADIUS: freeradius_test Сервер: 192.168.0.101
OTP-токены
Описание | Команда | Опции |
---|---|---|
Добавить токен | otptoken-add | --type=STRENUM --desc=STR --owner=LOGIN --disabled=BOOL --not-before=STR --not-after=STR --vendor=STR --model=STR --serial=STR --key=STR --algo=STRENUM --digits=6/8 --offset=INT --interval=INT --no-qrcode |
Добавить менеджера для токена | otptoken-add-managedby | --users=STR |
Добавить токен yubikey | otptoken-add-yubikey | --desc=STR --owner=LOGIN --disabled=BOOL --notbefore=STR --not-after=STR --digits=6/8 --slot=1/2 |
Удалить токен | otptoken-del | |
Найти токен | otptoken-find | --type=STRENUM --desc=STR --owner=LOGIN --disabled=BOOL --not-before=STR --not-after=STR --vendor=STR --model=STR --serial=STR --algo=STRENUM --digits=6/8 --offset=INT --interval=INT --id=STR |
Изменить токен | otptoken-mod | --rename=STR --desc=STR --owner=LOGIN --disabled=BOOL --not-before=STR --not-after=STR --vendor=STR --model=STR --serial=STR |
Удалить менеджера токена | otptoken-remove-managedby | --users=STR |
Показать информацию о токене | otptoken-show | |
Выполнить синхронизацию токена | otptoken-sync | --user=STR --password --first-code --second-code |
Примеры:
- добавить токен для пользователя ivanov:
ipa otptoken-add ivanov_otp --type=TOTP --desc=ivanov_token --owner=ivanov --algo=sha1 --digits=6 --interval=30 --no-qrcode ------------------------------- Добавлен токен OTP "ivanov_otp" ------------------------------- Уникальный идентификатор: ivanov_otp Тип: TOTP Описание: ivanov_token Владелец: ivanov Ключ: mW+LBliuxKjy3PCb/JKOszbZGmTElSrhIg70E3QruXqu+W4= Алгоритм: sha1 Цифры: 6 Смещение времени: 0 Временной интервал: 30 Универсальный код ресурса (URI): otpauth://totp/ivanov@EXAMPLE.TEST:ivanov_otp?issuer=ivanov%40EXAMPLE.TEST&secret=TFXYWBSYV3CKR4W46CN7ZEUOWM3NSGTEYSKSVYJCB32BG5BLXF5K56LO&digits=6&algorithm=SHA1&period=30
- назначить пользователя ivanov менеджером токена:
$ ipa otptoken-add-managedby ivanov_otp --users=ivanov Уникальный идентификатор: ivanov_otp Описание: ivanov_token Владелец: uid=ivanov,cn=users,cn=accounts,dc=example,dc=test Руководитель: ivanov ----------------------------------- Количество добавленных участников 1 -----------------------------------
- удалить токен:
$ ipa otptoken-del Уникальный идентификатор: ivanov_otp ----------------------------- Удалён токен OTP "ivanov_otp" -----------------------------
Пример настройки двухфакторной аутентификации
Командная строка
Создать нового пользователя:
$ kinit admin
Password for admin@EXAMPLE.TEST:
$ ipa user-add otptest
Имя: OTP
Фамилия: test
-------------------------------
Добавлен пользователь "otptest"
-------------------------------
Имя учётной записи пользователя: otptest
Имя: OTP
Фамилия: test
Полное имя: OTP test
Отображаемое имя: OTP test
Инициалы: Ot
Домашний каталог: /home/otptest
GECOS: OTP test
Оболочка входа: /bin/bash
Имя учётной записи: otptest@EXAMPLE.TEST
Псевдоним учётной записи: otptest@EXAMPLE.TEST
Адрес электронной почты: otptest@example.test
UID: 587200007
ID группы: 587200007
Пароль: False
Участник групп: ipausers
Доступные ключи Kerberos: False
$ ipa passwd otptest
Новый пароль:
Введите Новый пароль ещё раз для проверки:
-------------------------------------
Изменён пароль "otptest@EXAMPLE.TEST"
-------------------------------------
$ kinit otptest
Password for otptest@EXAMPLE.TEST:
Password expired. You must change it now.
Enter new password:
Enter it again:
Включить тип аутентификации «Двухфакторная аутентификация» для созданного пользователя:
$ kinit admin
Password for admin@EXAMPLE.TEST:
$ ipa user-mod otptest --user-auth-type=otp
------------------------------
Изменён пользователь "otptest"
------------------------------
Имя учётной записи пользователя: otptest
Имя: OTP
Фамилия: test
Домашний каталог: /home/otptest
Оболочка входа: /bin/bash
Имя учётной записи: otptest@EXAMPLE.TEST
Псевдоним учётной записи: otptest@EXAMPLE.TEST
Адрес электронной почты: otptest@example.test
UID: 587200007
ID группы: 587200007
Типы аутентификации пользователей: otp
Учётная запись отключена: False
Пароль: True
Участник групп: ipausers
Доступные ключи Kerberos: True
Добавить токен:
$ ipa otptoken-add --type=TOTP --desc=otptest_token --owner=otptest --algo=sha1 --digits=6 --interval=30
---------------------
Добавлен токен OTP ""
---------------------
Уникальный идентификатор: 33014fa0-0d7f-4775-a05c-05f09c6ff8e6
Тип: TOTP
Описание: otptest_token
Владелец: otptest
Ключ: hzNKJClpoG/nB0aer4/XQRfh7deLpTj0WKvaxNcZqAWX9SY=
Алгоритм: sha1
Цифры: 6
Смещение времени: 0
Временной интервал: 30
Универсальный код ресурса (URI): otpauth://totp/otptest@EXAMPLE.TEST:33014fa0-0d7f-4775-a05c-05f09c6ff8e6?issuer=otptest%40EXAMPLE.TEST&secret=Q4ZUUJBJNGQG7ZYHI2PK7D6XIEL6D3OXROSTR5CYVPNMJVYZVACZP5JG&digits=6&algorithm=SHA1&period=30
Отсканировать полученный QR-код с помощью FreeOTP.
Веб-интерфейс
Для добавления новых пользователей можно воспользоваться веб-интерфейсом FreeIPA:
- Открыть в веб-браузере адрес https://ipa.example.test/ipa/ui/ и ввести данные администратора для входа в систему.
- В окне «Активные пользователи» нажать кнопку «Добавить»:
- В открывшемся окне ввести данные пользователя и нажать кнопку «Добавить»:
- Выбрать созданного пользователя в списке пользователей и установить отметку в поле «Двухфакторная аутентификация (пароль + OTP)»:
- Создать токен OTP. Это можно сделать, как под учётной записью администратора, так и авторизовавшись в веб-интерфейсе под учётной записью пользователя.
- Настроить токен, отсканировав полученный QR-код, например, с помощью FreeOTP.
Аутентификация
При аутентификации на клиенте после ввода логина учетной записи пользователя FreeIPA необходимо последовательно ввести пароль (первый фактор) и код токена (второй фактор):
При аутентификации в веб-интерфейсе FreeIPA в поле «Пароль» необходимо ввести пароль и код токена (в форме <пароль><код токена>):