Подробный гайд по установке и настройке 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-сред с требованиями ФСТЭК/КИИ рекомендуется использовать официально сертифицированные решения или проводить интеграцию в рамках аттестации.