FreeIPA/OTP

Материал из ALT Linux Wiki

Использование двухфакторной аутентификации (2FA) — это один из способов повысить безопасность аутентификации. Одним из наиболее популярных вариантов является использование одноразовых паролей (OTP). Существуют открытые стандарты механизмов OTP:

  • HOTP (на основе счётчика): RFC 4226
  • TOTP (на основе времени): RFC 6238

Методы аутентификации

Во FreeIPA способы аутентификации пользователей могут быть установлены глобально или отдельно для каждого пользователя. Установка нескольких способов аутентификации позволяет использовать любой из указанных методов (логическое ИЛИ).

Определены следующие методы аутентификации пользователей (но не все могут быть реализованы):

  • Пароль
  • RADIUS
  • Двухфакторная аутентификация (пароль + OTP)
  • PKINIT
  • Пароль с усиленной защитой (SPAKE или FAST)
  • External Identity Provider
  • Отключить переопределение на уровне пользователя (только в глобальной конфигурации)

Если значение не задано, используется парольная аутентификация.

Примечание: Двухфакторная аутентификация означает «использовать пароль и значение OTP». Если установлено это значение, аутентификация только по паролю будет разрешена только в том случае, если у пользователя не определены токены.


Примечание: При выборе значения «Отключить переопределение на уровне пользователя» (может быть установлено только глобально), для всех пользователей, независимо от их собственных настроек, будет требоваться парольная аутентификация: Запрошен пароль, второй фактор необязателен


Только администраторы могут изменять тип аутентификации пользователя (глобально или для каждого пользователя).

Разрешения (Permissions)

У токена может быть либо ноль, либо один владелец. Если у токена нет владельца, он считается не назначенным. У владельца токена есть следующие права:

  • чтение (read)
  • аутентификация (authenticate)
  • синхронизация (synchronize)

У токенов может быть ноль или более менеджеров. У менеджера токена есть следующие права:

  • чтение (read)
  • изменение (write)
  • удаление (delete)
Примечание: Нельзя удалить последний активный токен (если токен принадлежит текущему пользователю).


Администраторы могут создавать токены, которые либо не назначены/не управляемы, либо принадлежат и/или управляются любым пользователем. Пользователи могут создавать токены только себе (при этом они становятся владельцами и менеджерами созданного токена).

Управление функциями

Веб-интерфейс

Методы аутентификации

Глобальные методы аутентификации доступны на вкладке настроек сервера («IPA-сервер» -> «Конфигурация» -> «Стандартные типы аутентификации пользователей»).

Методы аутентификации для каждого пользователя будут доступны на странице пользователя («Идентификация» -> «Пользователи» -> «Пользователь» -> «Типы аутентификации пользователей»).

Конфигурация прокси-сервера RADIUS

Администраторам доступна вкладка «Аутентификация» -> «Серверы RADIUS» для управления прокси-серверами RADIUS. Эти серверы могут быть назначены отдельным пользователям на странице конкретного пользователя.

OTP-токены

Пользователям доступна вкладка для управления токенами («Токены 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:

  1. Открыть в веб-браузере адрес https://ipa.example.test/ipa/ui/ и ввести данные администратора для входа в систему.
  2. В окне «Активные пользователи» нажать кнопку «Добавить»:
    FreeIPA. Окно «Активные пользователи»
  3. В открывшемся окне ввести данные пользователя и нажать кнопку «Добавить»:
    FreeIPA. Создание нового пользователя
  4. Выбрать созданного пользователя в списке пользователей и установить отметку в поле «Двухфакторная аутентификация (пароль + OTP)»:
    FreeIPA. Включение двухфакторной аутентификации для пользователя
  5. Создать токен OTP. Это можно сделать, как под учётной записью администратора, так и авторизовавшись в веб-интерфейсе под учётной записью пользователя.
    FreeIPA. Добавление токена OTP для пользователя
    FreeIPA. Добавление токена OTP
  6. Настроить токен, отсканировав полученный QR-код, например, с помощью FreeOTP.
Примечание: Окно добавления токена под учётной записью администратора («Аутентификация» -> «Токены OTP» -> «Добавить»): FreeIPA. Добавление токена OTP под учётной записью администратора


Аутентификация

При аутентификации на клиенте после ввода логина учетной записи пользователя FreeIPA необходимо последовательно ввести пароль (первый фактор) и код токена (второй фактор):

Запрос пароля и токена

При аутентификации в веб-интерфейсе FreeIPA в поле «Пароль» необходимо ввести пароль и код токена (в форме <пароль><код токена>):

Аутентификации в веб-интерфейсе

Ссылки

https://www.freeipa.org/page/V4/OTP