Настройка 2FA для RedOS/RHEL
Автор Viktor Barmakov, Last modified by Viktor Barmakov на 15 апреля 2024 10:31 AM

Оглавление

  1. Предварительные требования
  2. Настройка на стороне NPS сервера и Indeed AM
  3. Установка и настройка модуля PAM
  4. Включение PAM в SSH
    1. Настройка 2fa в SSH
    2. Настройка 1fa в SSH
  5. Включение PAM для локального входа
    1. Настройка 2fa для локального входа
    2. Настройка 1fa для локального входа
  6. Включение PAM для rdp подключения
    1. Настройка 2fa для rdp подключения
    2. Настройка 1fa для rdp подключения

Предварительные требования

Настройка на стороне Indeed AM NPS RADIUS Extension

  1. В оснастке Network Policy Server необходимо создать новый RADIUS Client, указав имя RADIUS Client’а, IP-адрес и общий секрет:
  2. Нужно также создать сетевую политику с необходимыми для Вас условиями подключения:
  3. Создадим новое приложение. В MC консоли, во вкладке “Приложения” нажмите кнопку “Добавить приложение”, в появившемся окне выберите модуль интеграции NPS RADIUS Extension и задайте название после чего, нажмите кнопку “Создать”:

  4. Откройте созданное приложение, укажите IP-адрес RADIUS Client’а (тот же самый IP-адрес, что мы указывали в оснастке NPS) и нажмите сохранить:
  5. Далее откройте в MC консоли вкладку “Политики”, выберите политику (либо, если её нет, то создайте, а затем выберите её), нажмите кнопку “Добавить приложение” и выберите созданное ранее приложение:

  6. Во вкладке “Область действия” добавьте пользователей (можно также добавить группу из AD или каталог), которые в дальнейшем будут аутентифицироваться через Indeed AM:

Установка и настройка модуля PAM

  1. Выполняем обновление списков пакетов:
    dnf -y update
  2. Выполняем команду:
    sudo dnf install gcc pam pam-devel make -y
  3. Скачиваем pam-модуль нужной версии, в данной инструкции используется версия 1.4.0:
    wget https://freeradius.org/ftp/pub/freeradius/pam_radius-1.4.0.tar.gz
  4. Распаковываем скачанный архив:
    tar -xzvf pam_radius-1.4.0.tar.gz
  5. Переходим в распакованный каталог:
    cd pam_radius-1.4.0
  6. Выполняем команду:
    sudo ./configure
  7. Выполняем команду:
    sudo make
  8. Скопируем pam_radius_auth.so файл в каталог security:
    1. Для 32-разрядной системы:
      sudo cp pam_radius_auth.so /lib/security/
    2. Для 64-разрядной системы:
      sudo cp pam_radius_auth.so /lib64/security/
  9. Создадим каталог raddb:
    sudo mkdir /etc/raddb/
  10. Копируем конфигурационный файл: “pam_radius_auth.conf” в созданный выше каталог и переименуем его в server:
    sudo cp pam_radius_auth.conf /etc/raddb/server
  11. Отредактируем конфигурационный файл server, добавив ip-адрес NPS сервера, общий секрет, который мы указывали ранее, и таймаут:
    sudo nano /etc/raddb/server

Включение PAM в SSH

  1. Сделаем backup конфигурационного файла “sshd_config:
    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
  2. Откроем конфигурационный файл “/etc/ssh/sshd_config” и раскомментируем строки:
    KbdInteractiveAuthentication yes

    UsePAM yes
    В некоторых версия:
    ChallengeResponseAuthentication yes
    UsePAM yes

    Примечание: Чтобы локальные пользователи или определенные пользователи на машине могли выполнять подключение в обход PAM модуля, рекомендуется настроить исключения, например, для локальной группы пользователей. Исключения можно настроить с помощью модуля “pam_succeed_if.so”. В данной инструкции примером группы выступает wheel с локальными администраторами

Настройка 2fa в SSH

  1. Сделаем backup конфигурационного файла “sshd:
    sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.backup
  2. Откроем конфигурационный файл “/etc/pam.d/sshd”:
    1. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass

      auth required pam_radius_auth.so
    2. Закомментируем строку:
      auth substack password-auth
  3. Перезапускаем службу sshd:
    sudo systemctl restart sshd
  4. В MC консоли, во вкладке “Политики”, открываем политику, а затем созданное ранее приложение. В нём, во вкладке “Приложения”, выберите метод аутентификации “2FA: Windows Password  + Software TOTP” (в данном сценарии у пользователя заранее должен быть зарегистрирован аутентификатор Software TOTP и настроена политика Challenge\Response: сообщение пользователю):
  5. В оснастке NPS должна быть включена настройка “Проверять подлинность запросов на этом сервере”:
  6. Проверим подключение доменного пользователя:
  7. Проверим подключение локального пользователя системы RedOS:

Настройка 1fa в SSH

  1. Сделаем backup конфигурационного файла “sshd_config:
    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
  2. Откроем конфигурационный файл “/etc/pam.d/sshd”:
    1. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass
      auth required pam_radius_auth.so skip_passwd
    2. Закомментируем строку:
      auth substack password-auth
  3. Перезапускаем службу sshd:
    sudo systemctl restart sshd
  4. В MC консоли, во вкладке “Политики”, открываем политику, а затем созданное ранее приложение. В нём во вкладке “Приложения” выберите метод аутентификации “2FA: Windows Password  + Software TOTP” (в данном сценарии у пользователя заранее должен быть зарегистрирован аутентификатор Software TOTP и настроена политика Challenge\Response: сообщение пользователю):
  5. В оснастке NPS должна быть включена настройка “Принимать пользователей без проверки учетных данных”:
  6. Проверим подключение доменного пользователя:
  7. Проверим подключение локального пользователя системы RedOS:

Включение PAM для локального входа

Настройка 2fa для локального входа

  1. Сделаем backup конфигурационного файла “system-auth:
    sudo cp /etc/pam.d/system-auth  /etc/pam.d/system-auth.backup
  2. Сделаем backup конфигурационного файла “password-auth”:
    sudo cp /etc/pam.d/password-auth  /etc/pam.d/password-auth.backup
  3. Откроем конфигурационный файл “/etc/pam.d/system-auth”:
    1. Закомментируем все строки, начинающиеся на auth.
    2. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass

      auth required pam_radius_auth.so
  4. Откроем конфигурационный файл “/etc/pam.d/password-auth”:
    1. Закомментируем все строки, начинающиеся на auth.
    2. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass

      auth required pam_radius_auth.so
  5. В MC консоли, во вкладке “Политики”, открываем политику, а затем созданное ранее приложение. В нём во вкладке “Приложения” выберите метод аутентификации “2FA: Windows Password  + Software TOTP” (в данном сценарии у пользователя заранее должен быть зарегистрирован аутентификатор Software TOTP и настроена политика Challenge\Response: сообщение пользователю):
  6. В оснастке NPS должна быть включена настройка “Проверять подлинность запросов на этом сервере”:
  7. Проверим аутентификацию доменного пользователя:
    1. Вводим доменный пароль:
    2. Вводим TOTP код:
    3. Аутентификация прошла успешно:
  8. Проверим аутентификацию локального пользователя системы RedOS:
    1. Вводим пароль локального пользователя:
    2. Аутентификация прошла успешно:

Настройка 1fa для локального входа

  1. Сделаем backup конфигурационного файла “system-auth:
    sudo cp /etc/pam.d/system-auth  /etc/pam.d/system-auth.backup
  2. Сделаем backup конфигурационного файла “password-auth”:
    sudo cp /etc/pam.d/password-auth  /etc/pam.d/password-auth.backup
  3. Откроем конфигурационный файл “/etc/pam.d/system-auth”:
    1. Закомментируем все строки, начинающиеся на auth.
    2. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass

      auth required pam_radius_auth.so
  4. Откроем конфигурационный файл “/etc/pam.d/password-auth”:
    1. Закомментируем все строки, начинающиеся на auth.
    2. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass

      auth required pam_radius_auth.so
  5. В MC консоли, во вкладке “Политики”, открываем политику, а затем созданное ранее приложение. В нём во вкладке “Приложения” выберите метод аутентификации “Программный генератор TOTP”:
  6. В оснастке NPS должна быть включена настройка “Принимать пользователей без проверки учетных данных”:
  7. Проверим аутентификацию доменного пользователя:
    1. Вводим TOTP код вместо пароля:
    2. Аутентификация прошла успешно:
  8. Проверим аутентификацию локального пользователя системы RedOS:
    1. Вводим пароль локального пользователя:
    2. Аутентификация прошла успешно:

Включение PAM для rdp подключения

В данной инструкции используется модуль xrdp для RDP подключения. Данный модуль не поддерживает отображение окна для ввода OTP, поэтому использование методов аутентификации с вводом ОТП технически невозможно. В сценарии с 2fa возможно использование только Push.

Настройка 2fa для rdp подключения

  1. Установите и настройте xrdp сервер на машину по инструкции из документации RedOS.
  2. Сделаем backup конфигурационного файла “xrdp-sesman:
    sudo cp /etc/pam.d/xrdp-sesman /etc/pam.d/xrdp-sesman.backup
  3. Откроем конфигурационный файл “/etc/pam.d/xrdp-sesman”:
    1. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass

      auth required pam_radius_auth.so
    2. Закомментируем строку:
      auth include password-auth
  4. В MC консоли, во вкладке “Политики”, открываем политику, а затем созданное ранее приложение. В нём во вкладке “Приложения” выберите метод аутентификации “Indeed Key”:
  5. В оснастке NPS должна быть включена настройка “Проверять подлинность запросов на этом сервере”:
  6. Проверим аутентификацию доменного пользователя:
    1. Вводим имя доменного пользователя и пароль:
    2. Ожидаем Push-уведомление на телефоне и подтверждаем его:
    3. Аутентификация прошла успешно:
  7. Проверим аутентификацию локального пользователя системы RedOS:
    1. Вводим имя локального пользователя и его пароль:
    2. Аутентификация прошла успешно:

Настройка 1fa для rdp подключения

  1. Установите и настройте xrdp сервер на машину по инструкции из документации RedOS.
  2. Сделаем backup конфигурационного файла “xrdp-sesman:
    sudo cp /etc/pam.d/xrdp-sesman /etc/pam.d/xrdp-sesman.backup
  3. Откроем конфигурационный файл “/etc/pam.d/xrdp-sesman”:
    1. Добавим строки:
      auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
      auth [success=ok default=ignore] pam_localuser.so
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass

      auth required pam_radius_auth.so
    2. Закомментируем строку:
      auth include password-auth
  4. В MC консоли, во вкладке “Политики”, открываем политику, а затем созданное ранее приложение. В нём во вкладке “Приложения” выберите метод аутентификации “Программный генератор TOTP”:
  5. В оснастке NPS должна быть включена настройка “Принимать пользователей без проверки учетных данных”:
  6. Проверим аутентификацию доменного пользователя:
    1. Вводим имя доменного пользователя и TOTP код вместо пароля:
    2. Аутентификация прошла успешно:
  7. Проверим аутентификацию локального пользователя системы RedOS:
    1. Вводим имя локального пользователя и его пароль:
    2. Аутентификация прошла успешно:
    (6 голос(а))
    Эта статья полезна
    Эта статья бесполезна