- Начало работы
- Интеграция
- HTTP API
- OpenID Connect
- RADIUS протокол
- RADIUS адаптер
- LDAP адаптер
- Портал самообслуживания
- MULTIFACTOR Directory Sync
- Windows Logon
- Регистрация пользователей
- .NET Core
- 1с-Bitrix24
- 1с-плагин двухфакторной аутентификации
- ADFS
- ASP.NET
- Ansible AWX
- Atlassian Cloud
- BearPass
- Check Point VPN
- Cisco ASA VPN
- Citrix Gateway
- FortiGate VPN
- HRBOX
- Huawei Cloud
- Huawei VPN
- Ideco UTM
- Keycloak
- Let's Encrypt Windows Server
- Linux logon (GUI/SSH)
- Linux SSH
- Linux SUDO
- Microsoft Entra ID
- MikroTik L2TP VPN
- NGate VPN
- Network Policy Server (NPS)
- Nextcloud
- Palo Alto GlobalProtect
- OpenVPN
- OpenVPN + AD
- OpenVPN Access Server
- OpenVPN pfSense
- Outlook Web Access (OWA)
- Passwork
- RD Gateway (RDGW)
- Redmine
- UserGate VPN
- VMware Horizon Cloud
- VMware Horizon View
- VMware vCloud Director
- VMware vSphere
- Vault
- ViPNET
- Windows VPN
- Yandex.Cloud
- Yandex 360
- Zabbix
- АйТи-Бастион
- Континент 4 VPN
- МТС Линк (бывш. webinar.ru)
- WordPress
- С-Терра VPN
- Точка доступа Wi-Fi
- ФПСУ-IP/Клиент
Настройка двухфакторной аутентификации на RedOS
В статье описывается настройка сервера RedOS для включения двухфакторной аутентификации. Рассматриваются следующие методы:
Подтверждение входа посредством одноразового кода (OTP) или PUSH-уведомления при локальном входе и подключении через RDP.
Авторизация по логину и паролю;
Аутентификация с использованием ключа;
Использование второго фактора на 99% сокращает риск неправомерного доступа и совершенно не усложняет процесс подключения для пользователей.
Возможные способы аутентификации:
Мобильное приложение Multifactor
СМС
Аппаратные OTP токены
Приложения OTP: Google Authenticator или Яндекс.Ключ
Telegram
Принцип работы
- SSHD использует модуль PAM_RADIUS для второго фактора проверки подлинности
- Модуль подключается через RADIUS протокол к сервису MULTIFACTOR
- MULTIFACTOR отправляет одноразовый пароль или PUSH уведомление пользователю для подтверждения доступа
- Пользователь вводит одноразовый пароль или подтверждает PUSH и получает доступ при локальном входе или подключении через RDP.
Настройка MULTIFACTOR
Зайдите в систему управления MULTIFACTOR, далее в раздел «Ресурсы» и создайте новый Linux сервер. После создания вам будут доступны два параметра: NAS Identifier и Shared Secret, они потребуются для последующих шагов.
Установка и настройка модуля PAM_RADIUS
#Обновим системный репозиторий sudo dnf update #Установим модуль ssh (если не установлен) sudo dnf install openssh #Установим PAM sudo dnf install pam_radius #Или же используйте данную команду, чтобы найти точное название пакета: sudo dnf search pam_radius #Выполняем обновление списков пакетов dnf -y update #Выполняем команду sudo dnf install gcc pam pam-devel make -y #Скачиваем pam-модуль нужной версии, в данной инструкции используется версия 3.0.0 wget https://www.freeradius.org/ftp/pub/freeradius/pam_radius-3.0.0.tar.gz #Распаковываем скачанный архив tar -xzvf pam_radius-3.0.0.tar.gz Переходим в распакованный каталог cd pam_radius-3.0.0 #Выполняем команду sudo ./configure #Выполняем команду sudo make #Скопируем pam_radius_auth.so файл в каталог security #Для 32-разрядной системы sudo cp pam_radius_auth.so /lib/security/ #Для 64-разрядной системы sudo cp pam_radius_auth.so /lib64/security/
Далее создайте файл каталог raddb:
sudo mkdir /etc/raddb/
Копируем конфигурационный файл: “pam_radius_auth.conf” в созданный выше каталог и переименуем его в MF:
sudo cp pam_radius_auth.conf /etc/raddb/MF
Впишите в него настройки RADIUS сервера MULTIFACTOR, сохраните и закройте редактор (:x)
radius.multifactor.ru SHARED_SECRET 40
где:
- radius.multifactor.ru: адрес сервера
- SHARED_SECRET: скопируйте из соответствующего параметра настроек Linux ресурса MULTIFACTOR
- 40: таймаут ожидания запроса с запасом
Должен выглядеть следующим образом

В файле хранится секретный ключ, поэтому установите на него права доступа на чтение только пользователю root
sudo chmod 0600 /etc/raddb/MF
Настройка PAM модулей
Откройте для редактирования файл /etc/pam.d/sshd
sudo nano /etc/pam.d/sshd
Для локальных учетных записей
#Добавим строки auth required pam_localuser.so auth required pam_unix.so nullok_secure try_first_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF #client_id=значение, должно быть идентичным с Nas identifier из конфигурации адаптера,или из созданного ресурса в личном кабинете Мультифактор, в зависимости от того используете вы облачный или локальный RADIUS адаптер #Закомментируем строки #auth substack password-auth #auth include postlogin
Гибридная конфигурация (локальные + доменные учетные записи)
#Закомментируем строки, которые начинаются с auth #Добавим строки: #auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel auth [success=1 default=ignore] pam_localuser.so auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF
Для доменных учетных записей
#Закомментируем все строки, начинающиеся на auth. #Добавим строки: auth substack password-auth auth [success=done default=ignore] pam_localuser.so auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF
Сохраните и закройте файл.
Включение PAM в SSH
Отредактируйте файл /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
- Включите PAM интерфейс
UsePAM yes
- Добавьте способы аутентификации
Авторизация по логину и паролю
# Включаем метод keyboard-interactive, чтобы инициировать PAM-процесс AuthenticationMethods keyboard-interactive # Разрешаем парольную аутентификацию PasswordAuthentication yes KbdInteractiveAuthentication yes challengeResponseAuthentication yes
Аутентификация с использованием ключа
# Требуем, чтобы пользователь сначала успешно прошёл аутентификацию по публичному ключу, # а затем – через keyboard-interactive (PAM с двухфакторной проверкой) AuthenticationMethods publickey,keyboard-interactive:pam
3. Сохраните файл (:x) и перезапустите ssh демона
sudo systemctl restart sshd
Откроем конфигурационный файл /etc/pam.d/system-auth
Для локальных учётных записей
Авторизация по логину и паролю
#Закомментируем все строки, начинающиеся на auth. #Добавим строки: auth required pam_localuser.so auth required pam_unix.so nullok_secure try_first_pass auth [success=2 default=ignore] pam_succeed_if.so user ingroup wheel auth [success=1 default=ignore] pam_succeed_if.so service = sudo auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF #«client_id=значение», должно быть идентичным с Nas identifier из конфигурации адаптера.
Аутентификация с использованием ключа
#Закомментируем все строки, начинающиеся на auth. И добавим auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth required pam_localuser.so auth required pam_unix.so nullok_secure try_first_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth required pam_deny.so
Гибридная конфигурация (локальные + доменные учётные записи)
Авторизация по логину и паролю
#Закомментируем все строки, начинающиеся на auth. #Добавим строки: auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth [default=1 ignore=ignore success=ok] pam_localuser.so auth sufficient pam_unix.so nullok auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth sufficient pam_sss.so forward_pass auth required pam_deny.so
Аутентификация с использованием ключа
#Закомментируем все строки, начинающиеся на auth. И добавим auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok_secure try_first_pass auth sufficient pam_sss.so forward_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth required pam_deny.so
Для доменных учётных записей
Авторизация по логину и паролю
#Закомментируем все строки, начинающиеся на auth. #Добавим строки: auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth [default=1 ignore=ignore success=ok] pam_localuser.so auth sufficient pam_unix.so nullok auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth sufficient pam_sss.so forward_pass auth required pam_deny.so
Аутентификация с использованием ключа
#Закомментируем все строки, начинающиеся на auth. И добавим auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok_secure try_first_pass auth sufficient pam_sss.so forward_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth required pam_deny.so
Обратите внимание
- Параметр
client_id
должен соответствовать Nas identifier из конфигурации RADIUS-адаптера- Строка с
wheel
(auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel
) позволяет пропускать 2FA для пользователей в указанной группе ( в данном случае wheel)- Строка с
service = sudo
отключает 2FA для команды sudo (если не требуется)
Откроем конфигурационный файл /etc/pam.d/password-auth
Для локальных учётных записей
Авторизация по логину и паролю
#Закомментируем все строки, начинающиеся на auth. #Добавим строки: auth required pam_localuser.so auth required pam_unix.so nullok_secure try_first_pass auth [success=2 default=ignore] pam_succeed_if.so user ingroup wheel auth [success=1 default=ignore] pam_succeed_if.so service = sudo auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF #«client_id=значение», должно быть идентичным с Nas identifier из конфигурации адаптера.
Аутентификация с использованием ключа
#Закомментируем все строки, начинающиеся на auth. И добавим auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth required pam_localuser.so auth required pam_unix.so nullok_secure try_first_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth required pam_deny.so
Гибридная конфигурация (локальные + доменные учётные записи)
Авторизация по логину и паролю
#Закомментируем все строки, начинающиеся на auth. #Добавим строки: auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth [default=1 ignore=ignore success=ok] pam_localuser.so auth sufficient pam_unix.so nullok auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth sufficient pam_sss.so forward_pass auth required pam_deny.so
Аутентификация с использованием ключа
#Закомментируем все строки, начинающиеся на auth. И добавим auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok_secure try_first_pass auth sufficient pam_sss.so forward_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth required pam_deny.so
Доменные учётные записи
Авторизация по логину и паролю
#Закомментируем все строки, начинающиеся на auth. #Добавим строки: auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth [default=1 ignore=ignore success=ok] pam_localuser.so auth sufficient pam_unix.so nullok auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular auth sufficient pam_sss.so forward_pass auth required pam_deny.so
Аутентификация с использованием ключа
#Закомментируем все строки, начинающиеся на auth. И добавим auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok_secure try_first_pass auth sufficient pam_sss.so forward_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth required pam_deny.so
Настройка 2FA для команды sudo
Если требуется 2FA на команду SUDO , то откройте файл /etc/pam.d/sudo
и добавьте следующий параметр:
auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF
Включение 2FA для RDP подключения
Важно
Данный модуль не поддерживает отображение окна для ввода OTP, поэтому использование методов аутентификации с вводом ОТП технически невозможно. В данном сценарии возможно использование только PUSH.
Установите и настройте xrdp сервер на машину по инструкции из документации RedOS
Откроем конфигурационный файл /etc/pam.d/xrdp-sesman:
Локальные учётные записи
#Добавим строки auth required pam_localuser.so auth required pam_unix.so nullok_secure try_first_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF #«client_id=значение», должно быть идентичным с Nas identifier из конфигурации адаптера. #Закомментируем строку #auth include password-auth
Гибридная конфигурация (локальные + доменные учётные записи)
#Закомментируем строку #auth include password-auth #если нужно пропустить УЗ из группы без 2FA, раскомментировать следующую строку: #auth [success=2 default=ignore] pam_succeed_if.so user notingroup wheel auth [success=1 default=ignore] pam_localuser.so auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF
Доменные учётные записи
Закомментируйте все строки, начинающиеся на auth
и добавьте:
auth substack password-auth auth [success=done default=ignore] pam_localuser.so auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF
Аутентификация с использованием ключа
auth substack password-auth auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF account include password-auth session include password-auth
Выполните перезапуск xrdp:
sudo systemctl restart xrdp
Локальный вход в GUI
Необходимо привести конфигурационный файл /etc/pam.d/gdm-password
к следующему виду:
Авторизация по логину и паролю:
# Аутентификация auth [success=done ignore=ignore default=bad] pam_selinux_permit.so auth substack password-auth auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth optional pam_gnome_keyring.so auth include postlogin auth sufficient pam_succeed_if.so uid >= 1000 quiet auth required pam_deny.so # Управление учётными записями account required pam_nologin.so account include password-auth # Парольная политика password substack password-auth -password optional pam_gnome_keyring.so use_authtok # Управление сессиями session required pam_selinux.so close session required pam_loginuid.so session required pam_selinux.so open session optional pam_keyinit.so force revoke session required pam_namespace.so session include password-auth session optional pam_gnome_keyring.so auto_start session include postlogin
После внесения правок необходимо перезапустить сервис gdm
для применения конфигурации:
systemctl restart gdm
Аутентификация с использованием ключа:
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so auth substack password-auth auth required pam_radius_auth.so client_id=linux conf=/etc/raddb/MF auth optional pam_gnome_keyring.so auth include postlogin auth sufficient pam_succeed_if.so uid >= 1000 quiet auth required pam_deny.so
После внесения правок необходимо перезапустить сервис gdm
для применения конфигурации:
authselect apply-changes systemctl restart sshd xrdp gdm
Если что-то не работает:
Последовательно проверьте, что вы ничего не упустили:
- На сервере с Linux есть пользователь с заданным логином
- С сервера открыт доступ по UDP порту 1812 на адрес radius.multifactor.ru
- Параметры Client ID и Shared Secret указаны корректно
- Пользователь настроил способ аутентификации
- Проверьте журнал «Запросы доступа» в личном кабинете MULTIFACTOR.
Если ничего не сработало, обращайтесь, поможем.