Настройка двухфакторной аутентификации на Ubuntu22
В статье описывается настройка сервера Ubuntu22 для включения двухфакторной аутентификации c логином/паролем и одноразовым кодом доступа (OTP) или PUSH уведомлением при локальном входе или подключении через RDP.
Использование второго фактора на 99% сокращает риск неправомерного доступа и совершенно не усложняет процесс подключения для пользователей.
Возможные способы аутентификации:
Мобильное приложение MultiFactor
СМС
Аппаратные OTP токены
Приложения OTP: Google Authenticator или Яндекс.Ключ
Telegram
Принцип работы
- SSHD использует модуль PAM_RADIUS для второго фактора проверки подлинности
- Модуль подключается через RADIUS протокол к сервису Мультифактор
- Мультифактор отправляет одноразовый пароль или PUSH уведомление пользователю для подтверждения доступа
- Пользователь вводит одноразовый пароль или подтверждает PUSH и получает доступ при локальном входе или подключении через RDP.
Настройка Мультифактора
Зайдите в систему управления Мультифактором, далее в раздел "Ресурсы" и создайте новый Linux сервер. После создания вам будут доступны два параметра: NAS Identifier и Shared Secret, они потребуются для последующих шагов.
Установка и настройка модуля PAM_RADIUS
sudo apt update
sudo apt install ssh
sudo apt install libpam-radius-auth
Далее создайте файл конфигурации
sudo nano /etc/pam_radius_ssh.conf
Впишите в него настройки RADIUS сервера Мультифактора, сохраните и закройте редактор (:x)
radius.multifactor.ru SHARED_SECRET 40
где:
- radius.multifactor.ru: адрес сервера
- SHARED_SECRET: скопируйте из соответствующего параметра настроек Linux ресурса Мультифактор
- 40: таймаут ожидания запроса с запасом
В файле хранится секретный ключ, поэтому установите на него права доступа на чтение только пользователю root
sudo chmod 0600 /etc/pam_radius_ssh.conf
Настройка PAM модулей
Откройте для редактирования файл /etc/pam.d/sshd
sudo nano /etc/pam.d/sshd
где
- NAS_Identifier: скопируйте из соответствующего параметра настроек Linux ресурса Мультифактор.
Сохраните и закройте файл (:x). В итоге он должен выглядеть подобным образом:
# PAM configuration for the Secure Shell service
# Standard Un*x authentication.
#@include common-auth
auth sufficient pam_radius_auth.so
# Disallow non-root logins when /etc/nologin exists.
account required pam_nologin.so
# Uncomment and edit /etc/security/access.conf if you need to set complex
# access limits that are hard to express in sshd_config.
# account required pam_access.so
# Standard Un*x authorization.
@include common-account
# SELinux needs to be the first session rule. This ensures that any
# lingering context has been cleared. Without this it is possible that a
# module could execute code in the wrong domain.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
# Set the loginuid process attribute.
session required pam_loginuid.so
# Create a new session keyring.
session optional pam_keyinit.so force revoke
# Standard Un*x session setup and teardown.
@include common-session
# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
# Print the status of the user's mailbox upon successful login.
session optional pam_mail.so standard noenv # [1]
# Set up user limits from /etc/security/limits.conf.
session required pam_limits.so
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session required pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
# SELinux needs to intervene at login time to ensure that the process starts
# in the proper default security context. Only sessions which are intended
# to run in the user's context should be run after this.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
# Standard Un*x password updating.
#@include common-password
auth required pam_radius_auth.so client_id=NAS_Identifier conf=/etc/pam_radius_ssh.conf
Настройка службы SSHD
Отредактируйте файл /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
- Включите PAM интерфейс
UsePAM yes
KbdInteractiveAuthentication yes
- Добавьте способы аутентификации
AuthenticationMethods keyboard-interactive
PasswordAuthentication yes
Сохраните файл (:x) и перезапустите ssh демона
sudo systemctl restart sshd
Включение 2FA для локального входа в Ubuntu:
sudo nano /etc/pam.d/common-auth
добавляем в конце файла конфигурации: auth required pam_radius_auth.so client_id=NAS_Identifier conf=/etc/pam_radius_ssh.conf
Включение 2FA для RDP подключения:
Данный модуль не поддерживает отображение окна для ввода OTP, поэтому использование методов аутентификации с вводом ОТП технически невозможно. В данном сценарии возможно использование только PUSH.
1.Устанавливаем xRDP:
sudo apt -y install xrdp
sudo systemctl status xrdp
sudo systemctl restart xrdp
sudo ufw allow 3389
2.Открываем порт:
sudo ufw allow 3389
3.Откройте для редактирования файл /etc/pam.d/xrdp-sesman
sudo nano /etc/pam.d/xrdp-sesman
Добавьте строку:
auth required pam_radius_auth.so skip_passwd client_id=rs_760d86a9b5b7f7607d11735e67757 conf=/etc/pam_radius_ssh.conf
где
- NAS_Identifier: скопируйте из соответствующего параметра настроек Linux ресурса Мультифактор.
Если что-то не работает
Последовательно проверьте, что вы ничего не упустили:
- На сервере с Linux есть пользователь с заданным логином
- С сервера открыт доступ по UDP порту 1812 на адрес radius.multifactor.ru
- Параметры Client ID и Shared Secret указаны корректно
- Пользователь настроил способ аутентификации
- Проверьте журнал "Запросы доступа" в личном кабинете Мультифактора.
Если ничего не сработало, обращайтесь, поможем.