Перейти к основному содержимому

Настройка двухфакторной аутентификации на Ubuntu22

В статье описывается настройка сервера Ubuntu22 для включения двухфакторной аутентификации c логином/паролем и одноразовым кодом доступа (OTP) или PUSH уведомлением при локальном входе или подключении через RDP.

Использование второго фактора на 99% сокращает риск неправомерного доступа и совершенно не усложняет процесс подключения для пользователей.

Возможные способы аутентификации:

  • Мобильное приложение MultiFactor
  • СМС
  • Аппаратные OTP токены
  • Приложения OTP: Google Authenticator или Яндекс.Ключ
  • Telegram

Принцип работы

  1. SSHD использует модуль PAM_RADIUS для второго фактора проверки подлинности
  2. Модуль подключается через RADIUS протокол к сервису Мультифактор
  3. Мультифактор отправляет одноразовый пароль или PUSH уведомление пользователю для подтверждения доступа
  4. Пользователь вводит одноразовый пароль или подтверждает 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

где

Сохраните и закройте файл (: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
  1. Включите PAM интерфейс
UsePAM yes
KbdInteractiveAuthentication yes
  1. Добавьте способы аутентификации
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

где

Если что-то не работает

Последовательно проверьте, что вы ничего не упустили:

  • На сервере с Linux есть пользователь с заданным логином
  • С сервера открыт доступ по UDP порту 1812 на адрес radius.multifactor.ru
  • Параметры Client ID и Shared Secret указаны корректно
  • Пользователь настроил способ аутентификации
  • Проверьте журнал "Запросы доступа" в личном кабинете Мультифактора.

Если ничего не сработало, обращайтесь, поможем.