Статья описывает подключение второго фактора к входу по SSH и к sudo на Linux-сервере через стандартный модуль pam_radius. Сервер выступает RADIUS-клиентом и обращается напрямую к встроенному RADIUS-серверу локального модуля Simple2FA — устанавливать PAM-адаптер Simple2FA не требуется.
Этот способ подходит, если:
- на серверах уже установлен и настроен
pam_radius(например, при переходе с другого RADIUS-сервера или другой системы 2FA) — достаточно заменить адрес сервера и секрет; - политика безопасности запрещает установку стороннего ПО на защищаемые хосты;
- требуется единая схема подключения Linux-серверов и сетевого оборудования через RADIUS.
Если pam_radius ещё не установлен, рассмотрите PAM-адаптер Simple2FA: он подключается по HTTPS, не требует RADIUS-ресурса и сам запрашивает одноразовый код у пользователя. Сравнение способов — в конце статьи.
Схема работы:
- Пользователь подключается по SSH (или вызывает
sudo) и вводит логин и пароль. - Модуль
pam_radiusотправляет Access-Request на локальный модуль Simple2FA. - Локальный модуль проверяет первый фактор по AD/LDAP или другому поставщику учётных записей.
- При успешной проверке инициируется второй фактор (Push-уведомление, Telegram-бот или MAX) через облако Simple2FA.
- Пользователь подтверждает вход; локальный модуль возвращает Access-Accept, и сессия открывается.
Подготовка в Simple2FA
Войдите в административную панель локального модуля Simple2FA. Перейдите в раздел «Настройка ресурсов» и создайте новый ресурс:
- Название: Linux SSH (или любое удобное).
- Протокол: RADIUS.
- NAS ID: строка идентификации RADIUS-клиента. Создаётся автоматически; её нужно будет указать в параметре
client_idмодуляpam_radius. - Shared Secret: общий секрет. Создаётся автоматически; используется в файле конфигурации
pam_radius. - Проверять первый фактор: включить.
- Поставщики учетных записей: выберите каталоги, в которых выполняется проверка логина и пароля.
- Использовать кеширование сессий: включить, если второй фактор не должен запрашиваться повторно в течение заданного времени (актуально для
sudo). - Длительность кеша: рекомендуемое значение — 60 минут.
Один ресурс можно использовать для группы серверов: укажите один и тот же NAS ID и Shared Secret на всех хостах. Если нужна раздельная статистика или разные политики — создайте отдельный ресурс на каждый сервер или группу.
Убедитесь, что с сервера открыт доступ на локальный модуль Simple2FA по UDP 1812.
Установка модуля pam_radius
Имя пакета зависит от дистрибутива.
Astra Linux, Ubuntu, Debian
sudo apt update sudo apt install libpam-radius-auth
РЕД ОС, CentOS, Rocky, AlmaLinux
sudo dnf install epel-release sudo dnf install pam_radius
ALT Linux
sudo apt-get update sudo apt-get install pam_radius
Настройка pam_radius
Создайте файл конфигурации с параметрами RADIUS-сервера Simple2FA:
sudo nano /etc/pam_radius_simple2fa.conf
Содержимое файла — одна строка:
<IP-адрес локального Simple2FA>:1812 <Shared Secret> 40
Где:
- IP-адрес — адрес локального модуля Simple2FA (или DNS-имя).
- Shared Secret — из карточки ресурса.
- 40 — таймаут ожидания ответа в секундах. Значение должно превышать время, которое даётся пользователю на подтверждение Push или Telegram; не используйте значение по умолчанию (3 секунды).
Файл содержит секрет — ограничьте доступ к нему:
sudo chmod 0600 /etc/pam_radius_simple2fa.conf
Важно. В файле должен быть указан только один сервер Simple2FA. При нескольких серверах pam_radius после таймаута повторяет запрос на следующий адрес, что приведёт к повторному Push-уведомлению.
Настройка PAM для SSH
Не закрывайте текущую SSH-сессию до завершения проверки — при ошибке в конфигурации вы сможете откатить изменения.
Откройте файл /etc/pam.d/sshd и добавьте строку вызова модуля первой в секции auth:
auth sufficient pam_radius_auth.so conf=/etc/pam_radius_simple2fa.conf client_id=<NAS ID>
Где:
- conf — путь к созданному файлу конфигурации.
- client_id — NAS ID из карточки ресурса. Передаётся в атрибуте NAS-Identifier, по нему Simple2FA определяет, к какому ресурсу относится запрос.
- sufficient — при успешном ответе Simple2FA дальнейшие auth-модули не выполняются; при отказе управление переходит к следующим строкам. Чтобы вход был возможен только через Simple2FA, используйте
requiredи закомментируйте стандартную проверку пароля (@include common-authилиauth substack password-auth).
Пример для Astra Linux / Ubuntu (начало файла):
# PAM configuration for the Secure Shell service auth required pam_radius_auth.so conf=/etc/pam_radius_simple2fa.conf client_id=<NAS ID> #@include common-auth account required pam_nologin.so @include common-account ...
Пример для РЕД ОС / CentOS:
#%PAM-1.0 auth required pam_radius_auth.so conf=/etc/pam_radius_simple2fa.conf client_id=<NAS ID> auth required pam_sepermit.so #auth substack password-auth auth include postlogin ...
Настройка службы SSHD
Откройте /etc/ssh/sshd_config (для ALT Linux — /etc/openssh/sshd_config) и убедитесь, что включена аутентификация через PAM:
UsePAM yes KbdInteractiveAuthentication yes PasswordAuthentication no
В старых версиях OpenSSH вместо KbdInteractiveAuthentication используется ChallengeResponseAuthentication yes.
Если вход выполняется по SSH-ключу и второй фактор должен запрашиваться дополнительно к ключу:
PubkeyAuthentication yes AuthenticationMethods publickey,keyboard-interactive:pam
В этом случае в строке PAM добавьте параметр skip_passwd — модуль не будет запрашивать пароль и отправит на Simple2FA только запрос второго фактора:
auth required pam_radius_auth.so conf=/etc/pam_radius_simple2fa.conf client_id=<NAS ID> skip_passwd
Для такого ресурса в Simple2FA отключите параметр Проверять первый фактор — первым фактором является ключ, проверенный SSH.
Перезапустите службу:
sudo systemctl restart sshd
Настройка PAM для sudo
Откройте /etc/pam.d/sudo и добавьте строку первой в секции auth:
auth required pam_radius_auth.so conf=/etc/pam_radius_simple2fa.conf client_id=<NAS ID>
Затем закомментируйте стандартную проверку пароля (@include common-auth / auth include system-auth). Для sudo рекомендуется включить кеширование сессий в карточке ресурса, иначе подтверждение будет запрашиваться при каждом вызове.
Проверка работы
- Не закрывая текущую сессию, откройте новое SSH-подключение с тестовой учётной записью.
- Введите пароль (первый фактор).
- Получите Push-уведомление или сообщение Telegram-бота и подтвердите вход.
- После подтверждения откроется сессия.
Если что-то не работает
- Пользователь с таким логином существует на Linux-сервере и в поставщике учётных записей Simple2FA.
- С сервера открыт UDP 1812 на адрес локального модуля; проверьте
nc -u -z <IP> 1812или журнал локального модуля. - NAS ID в
client_idи Shared Secret в файле конфигурации совпадают с карточкой ресурса. - Таймаут в файле конфигурации не меньше 30–40 секунд.
- В
sshd_configвключеныUsePAMиKbdInteractiveAuthentication. - У пользователя настроен способ подтверждения (Push, Telegram или MAX).
- Проверьте раздел «Попытки авторизации» в административной панели и журнал сервера:
journalctl -u sshdили/var/log/auth.log. Для подробной диагностики добавьте к строке PAM параметрdebug.
pam_radius или PAM-адаптер Simple2FA
| pam_radius | PAM-адаптер Simple2FA | |
|---|---|---|
| Установка на хост | Стандартный пакет дистрибутива | Модуль Simple2FA |
| Канал связи | RADIUS, UDP 1812 до локального модуля | HTTPS до локального модуля |
| Ресурс в Simple2FA | RADIUS: NAS ID и Shared Secret | API-ключ |
| Способы подтверждения | Все | Все |
| Ввод кода в терминале | Определяется ответом сервера | Отдельный промпт модуля |
| Когда выбирать | Модуль уже установлен; запрещено стороннее ПО на хостах; единая RADIUS-схема с сетевым оборудованием | Новая установка; нежелателен UDP между сегментами |