Подробный гайд по установке и настройке multiOTP в Astra Linux

Пошаговая инструкция по установке и настройке multiOTP в Astra Linux. Разбор интеграции через PAM, учёт особенностей CE/SE, синхронизация времени и отладка.

2026.05.16                  


Подробный гайд по установке и настройке multiOTP в Astra LinuxПодробный гайд по установке и настройке multiOTP в Astra Linux

Важно:

Astra Linux имеет две основные редакции: Common Edition (CE) и Special Edition (SE). В SE включён мандатный контроль доступа (Parsec), строгая проверка подписей пакетов и ограничения на изменение системных файлов. Данный гайд ориентирован на CE, но содержит разделы с указаниями для SE. В regulated-средах (госсектор, КИИ) рекомендуется использовать официально поддерживаемые решения или согласовывать кастомную интеграцию с вендором.


1. Что такое multiOTP?

multiOTP — open-source платформа двухфакторной аутентификации (MFA), поддерживающая:

  • TOTP/HOTP (Google Authenticator, FreeOTP, YubiKey OTP)
  • SMS/Email
  • Push-уведомления
  • RADIUS-сервер
  • PAM-модуль для Linux/Unix
  • Веб-интерфейс управления (PHP)

Архитектура:

CLI (multiotp), PAM-модуль (pam_multiotp.so), серверная часть (опционально).


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

Компонент Требования
ОС Astra Linux CE 1.7/1.8 или SE 1.7/1.8
Доступ root или sudo с правами на установку пакетов и правку /etc/pam.d/
Зависимости php, php-cli, php-mbstring, php-xml, php-curl, git, make, gcc, libpam0g-dev, chrony
Время Строгая синхронизация NTP (обязательно для TOTP)
Сеть Для веб-интерфейса: Apache/Nginx + PHP-FPM (опционально)

3. Установка

3.1. Обновление системы и установка зависимостей

sudo apt update
sudo apt upgrade -y
sudo apt install -y php php-cli php-mbstring php-xml php-curl git make gcc libpam0g-dev chrony

В Astra Linux SE установка из сторонних репозиториев или .deb без подписи может быть заблокирована. Используйте sudo apt install --allow-unauthenticated только в тестовых средах. Для продакшена SE рекомендуется собирать пакеты с подписью Astra или использовать официальные MFA-решения.


3.2. Загрузка и размещение multiOTP

cd /opt
sudo git clone https://github.com/multiOTP/multiotp.git
sudo chown -R root:root /opt/multiotp
sudo chmod -R 755 /opt/multiotp

3.3. Установка CLI

sudo cp /opt/multiotp/multiotp /usr/local/bin/multiotp
sudo chmod 755 /usr/local/bin/multiotp

3.4. Компиляция и установка PAM-модуля

cd /opt/multiotp/src/pam
sudo make
sudo cp pam_multiotp.so /lib/x86_64-linux-gnu/security/
sudo chmod 644 /lib/x86_64-linux-gnu/security/pam_multiotp.so
sudo ldconfig

Проверка:

ldd /lib/x86_64-linux-gnu/security/pam_multiotp.so не должен выдавать not found.


4. Базовая настройка multiOTP

4.1. Создание конфигурации

sudo mkdir -p /etc/multiotp
sudo multiotp -config default_otp_type=totp
sudo multiotp -config log_level=info
sudo multiotp -config time_sync=1

Файл конфигурации:

/etc/multiotp/multiotp.conf

4.2. Добавление пользователей

sudo multiotp -create denis
sudo multiotp -display-qrcode denis

Отсканируйте QR-код в FreeOTP, Google Authenticator или аналогичном приложении.


4.3. Проверка OTP

sudo multiotp -check denis 123456
# Ожидаемый вывод: OTP code is valid

5. Интеграция с PAM

5.1. Рекомендуемый способ: pam-auth-update

sudo pam-auth-update

В появившемся меню:

  • Найдите multiOTP
  • Включите Mark as sufficient или Mark as required в зависимости от сценария
  • Сохраните

5.2. Ручная правка (если pam-auth-update не поддерживает multiOTP)

Отредактируйте /etc/pam.d/common-auth:

auth    sufficient  pam_multiotp.so try_first_pass

Порядок строк важен! Размещайте pam_multiotp.so после pam_unix.so, но до pam_deny.so.


5.3. Настройка для конкретных сервисов

Сервис Файл PAM Пример строки
SSH /etc/pam.d/sshd auth sufficient pam_multiotp.so try_first_pass
Консольный вход /etc/pam.d/login Аналогично
sudo /etc/pam.d/sudo Не рекомендуется добавлять OTP без fallback
GUI (LightDM/GDM) /etc/pam.d/gdm-password или lightdm Зависит от дисплейного менеджера

Для отладки добавьте debug в конец строки:

auth sufficient pam_multiotp.so try_first_pass debug

Логи пишутся в /var/log/auth.log и /var/log/multiotp.log.


6. Особенности Astra Linux

6.1. Common Edition (CE)

  • Установка проходит аналогично Debian/Ubuntu.
  • Ограничений на кастомные PAM-модули нет.
  • Рекомендуется использовать chrony для синхронизации времени:
  sudo systemctl enable --now chrony
  chronyc tracking

6.2. Special Edition (SE)

Аспект Рекомендация
Пакеты Используйте только подписанные репозитории Astra. Для multiOTP либо собирайте .deb с ключом Astra, либо используйте контейнер/изолированную среду.
Мандатный контроль (Parsec) Кастомные бинарники и PAM-модули могут быть заблокированы. Добавьте метки безопасности: sudo pdpl-setfile -t bin_t /usr/local/bin/multiotp и аналогично для .so. Либо настройте политику через mac-admin.
PAM-интеграция Файлы в /etc/pam.d/ должны соответствовать требованиям целостности. Используйте astra-mac для валидации.
Аудит Включите auditd для отслеживания вызовов pam_multiotp.so.
Альтернатива В SE часто используется astra-mfa или интеграция с СКЗИ/КриптоПро. multiOTP допустим только после согласования с ИБ-отделом.

В regulated-средах SE кастомная MFA-интеграция требует оформления в рамках аттестации ИС.


7. Тестирование

7.1. Проверка OTP

sudo multiotp -check denis $(date +%s%N | cut -b1-6)  # замените на код из приложения

7.2. Проверка PAM

pamtester sshd denis authenticate
# Введите пароль + OTP в одном поле или отдельно (зависит от try_first_pass)

7.3. Просмотр логов

sudo tail -f /var/log/auth.log | grep multiotp
sudo tail -f /var/log/multiotp.log

7.4. Отладка

  • Включите debug в PAM-строке
  • Запустите multiotp -debug
  • Проверьте время: timedatectl status (должно быть System clock synchronized: yes)

8. Безопасность и эксплуатация

Практика Описание
Права на конфиги sudo chown root:root /etc/multiotp/*, chmod 600
Резервное копирование /etc/multiotp/ + /var/lib/multiotp/ (если используется)
HTTPS для сервера Если разворачиваете веб-интерфейс, используйте TLS и ограничьте доступ по IP
Защита от перебора Включите lockout в multiotp.conf: max_attempt=3, lockout_time=300
Обновления cd /opt/multiotp && sudo git pull && sudo cp multiotp /usr/local/bin/
Отключение fallback В production используйте required вместо sufficient только при наличии резервного канала доступа

9. Частые ошибки и решения

Ошибка Причина Решение
OTP code is invalid Рассинхронизация времени sudo systemctl restart chrony, проверьте chronyc tracking
PAM module not found Путь или права Проверьте ls -l /lib/x86_64-linux-gnu/security/pam_multiotp.so, права 644, ldconfig
Permission denied в логах MAC-политики (SE) pdpl-setfile, mac-admin, или запуск в CE
Веб-интерфейс не запускается PHP-FPM не настроен Установите php-fpm, настройте nginx/apache, права на /opt/multiotp/server
try_first_pass не работает Пользователь вводит пароль и OTP раздельно Используйте auth required pam_multiotp.so и настройте подсказку в /etc/pam.d/

Итог:

multiOTP успешно работает в Astra Linux CE. В SE требуется учёт мандатных политик и ограничений на кастомные модули. Для production-сред с требованиями ФСТЭК/КИИ рекомендуется использовать официально сертифицированные решения или проводить интеграцию в рамках аттестации.