Как запустить LinOTP на OpenSUSE 12.3 с PostgreSQL
Введение
Это руководство описывает установку LinOTP на OpenSUSE 12.3 с применением PostgreSQL в качестве базы данных для токенов. LinOTP — это система двухфакторной аутентификации с одноразовыми паролями (OTP). В примере показано, как включить аутентификацию SSH и развернуть веб-интерфейс управления через Apache и WSGI.
Важно: все команды выполняются с учётом путей и имён пользователей, указанных в примере. Адаптируйте их под свою среду.
Содержание
- Подготовка системы
- Установка и настройка PostgreSQL
- Установка LinOTP в виртуальном окружении Python
- Настройка Apache/WSGI и SSL
- Создание администратора и пользователей
- Проверка и отладка
- Рекомендации по безопасности и эксплуатационные чеклисты
Требования (кратко)
- OpenSUSE 12.3 с доступом root или sudo
- Подключение к интернету для установки пакетов и pip-зависимостей
- Публичный или самоподписанный SSL-сертификат для HTTPS
- Минимум 1 ГБ свободной оперативной памяти (рекомендуется больше для продакшена)
Подготовка — установка необходимых пакетов
Установите базовые пакеты, требуемые для сборки и виртуального окружения Python:
zypper install python-virtualenv
zypper install gcc
zypper install python-devel
zypper install zlib-develВажно: пакеты и имена могут отличаться в более новых версиях OpenSUSE. Проверяйте репозитории.
Настройка PostgreSQL
LinOTP хранит данные о токенах в базе данных. В примере PostgreSQL устанавливается на тот же сервер.
Установите PostgreSQL и dev-пакеты:
zypper install postgresql postgresql-server
zypper install postgresql-develИнициализируйте кластер баз данных (выполняется под пользователем postgres):
su - postgres
initdb -D /var/lib/pgsql/data/Пример вывода initdb показывает создание кластеров и предупреждение о временной аутентификации «trust». При необходимости отредактируйте /var/lib/pgsql/data/pg_hba.conf.
Запустите сервер PostgreSQL:
pg_ctl -D /var/lib/pgsql/data -l pglog.log startСоздайте пользователя и базу данных для LinOTP (замените пароли на безопасные):
createuser -P linotp2postgres=# CREATE DATABASE LinOTP2;
postgres=# GRANT ALL ON DATABASE LinOTP2 TO linotp2;Примечание: PostgreSQL чувствителен к регистру имен. В конфигурации LinOTP обычно используют маленькие буквы для имени базы и пользователя — приведите их к единому виду при настройке sqlalchemy.url.
Установка LinOTP в виртуальном окружении Python
Создаём каталог и виртуальное окружение:
mkdir /opt/LINOTP
cd /opt/
virtualenv /opt/LINOTP/
cd LINOTP/
source bin/activateИзменённая командная строка (LINOTP) означает, что вы в виртуальном окружении.
Установите LinOTP и зависимости через pip:
pip install linotp linotpuseridresolver pil configobj psycopg2Создайте необходимые директории и сконфигурируйте файл:
mkdir /var/log/linotp
cp etc/linotp2/linotp.ini.example etc/linotp2/linotp.iniЗапустите PostgreSQL и включите автозапуск:
service postgresql start
chkconfig postgresql onСоздайте системного пользователя для работы сервиса LinOTP (локальный пользователь, под которым будут запускаться процессы):
useradd -r linotp2Откройте конфигурационный файл etc/linotp2/linotp.ini и измените строку подключения SQLAlchemy, подставив реальные имя пользователя, пароль, хост и имя базы:
sqlalchemy.url = postgresql+psycopg2://linotp2:test123!@localhost/linotp2Важно: в примере показан пароль test123! — используйте надёжный пароль и храните его безопасно.
Создайте ключ шифрования для хранения секретов в LinOTP (случайные байты):
dd if=/dev/urandom of=etc/linotp2/encKey bs=1 count=96Инициализируйте структуру БД LinOTP:
paster setup-app etc/linotp2/linotp.iniПроверка локального запуска приложения:
paster serve etc/linotp2/linotp.ini
# Пример вывода: serving on 0.0.0.0:5001 view at http://127.0.0.1:5001Теперь можно открыть в браузере http://127.0.0.1:5001/manage и выполнить первичную настройку: добавить useridresolver, realm и зарегистрировать токены.
Настройка Apache и WSGI
Для продакшен-окружения рекомендуется запускать LinOTP под Apache с mod_wsgi и включённым SSL.
Установите Apache и модули:
zypper install apache2 apache2-mod_wsgi
a2enmod wsgi
a2enmod sslВключите автозапуск и поднимите сервис:
chkconfig apache2 on
service apache2 startОткройте порт HTTPS в файрволле SuSEfirewall2 и перезапустите правила:
SuSEfirewall2 open EXT TCP https
SuSEfirewall2Самоподписанный сертификат (пример)
Создайте конфиг виртуального хоста и сертификат:
cp etc/apache2/sites-available/linotp2 /etc/apache2/vhosts.d/linotp.conf
openssl genrsa -out /etc/ssl/private/linotpserver.key 2048
chmod 400 /etc/ssl/private/linotpserver.key
openssl req -x509 -new -key /etc/ssl/private/linotpserver.key -out /etc/ssl/certs/linotpserver.pemЗамените самоподписанный сертификат на сертификат от доверенного CA в продакшене.
Конфигурация виртуального хоста Apache
Отредактируйте /etc/apache2/vhosts.d/linotp.conf. Ключевые параметры (оставлены, как в примере):
- WSGIPythonHome указывает на виртуальное окружение Python (/opt/LINOTP)
- WSGIScriptAlias указывает на WSGI-скрипт приложения
- WSGIDaemonProcess и WSGIProcessGroup задают user=linotp
- Настроены защищённые локации /admin, /audit, /manage и т.д. с Digest-аутентификацией
- Логи и формат логов указаны; не используйте %q в LogFormat — это может раскрыть параметры
Примерный фрагмент конфигурации сохранён в исходной документации и должен быть скопирован в файл конфигурации без изменений путей.
Создание первого администратора и системного пользователя WSGI
Создайте файл администратора и пользователя, от имени которого будет работать WSGI:
htdigest2 -c etc/linotp2/admins "LinOTP2 admin area" admin
useradd -r linotpВключите и отключите ненужные модули Apache согласно примеру:
a2enmod mod_auth_digest
a2dismod php5
a2dismod cgi
a2dismod userdir
a2dismod auth_basicОтредактируйте /etc/sysconfig/apache2, чтобы Apache запускался с поддержкой SSL:
APACHE_SERVER_FLAGS="-D SSL"Настройте права на файлы и включите автозапуск сервисов:
chkconfig postgresql on
chkconfig apache2 on
chown -R linotp /var/log/linotp
chown -R linotp /opt/LINOTP/etc/linotp2/data/Проверка и отладка
- Логи Apache: /var/log/apache2/error_log и /var/log/apache2/ssl_access.log
- Логи LinOTP: /var/log/linotp/*
- Логи PostgreSQL: файл pglog.log или системный journal
- Проверяйте, что пользователь, указанный в WSGIDaemonProcess, имеет доступ к файлу encKey
- Если приложение не запускается — временно запустите paster serve и смотрите вывод в консоли
Обычные причины ошибок: неправильная строка подключения sqlalchemy.url, отсутствующий ключ encKey, неверные права доступа к файлам, недоступен PostgreSQL.
Рекомендации по безопасности
- Используйте сильные пароли и храните их в менеджере секретов.
- Заведите отдельного системного пользователя для LinOTP (linotp), дайте минимально необходимые права.
- Шифруйте соединения: включите HTTPS и применяйте только современные наборы шифров.
- Настройте ограничение доступа к административным URL по IP-адресам там, где это возможно.
- Регулярно бэкапьте базу данных PostgreSQL и файл encKey. Без encKey данные будут недоступны.
- Отключите ненужные модули Apache и сервисы на хосте.
Резервирование и отказоустойчивость (советы)
- Разносите PostgreSQL на отдельный сервер или кластер для нагрузки и отказоустойчивости.
- Для критичных систем используйте репликацию PostgreSQL и бэкапы с WAL-архивированием.
- Размещайте LinOTP за балансировщиком нагрузки; при этом синхронизируйте конфигурации и ключи encKey между нодами (в безопасном хранилище).
Когда этот подход не подходит (контрпримеры)
- Если вы требуете встроенную поддержку HSM для ключей — стандартный encKey может быть недостаточен.
- Если у вас высокие нагрузки и десятки тысяч аутентификаций в минуту — потребуется горизонтальное масштабирование и оптимизация БД.
- Если вы используете контейнеры и динамически создаваемые ноды, хранение encKey в файловой системе может быть проблемой — рассмотрите секрет-менеджер.
Альтернативные подходы
- Использовать другой бэкенд базы данных (MySQL) — потребует адаптации строки подключения и пакета драйвера.
- Развернуть LinOTP в контейнерах (Docker/Kubernetes) с применением внешнего секрет-менеджера для encKey.
- Использовать внешний RADIUS/LDAP шлюз, если нужна интеграция с существующей инфраструктурой аутентификации.
Рольные чек-листы (оператор / администратор / разработчик)
- Оператор (развёртывание): проверить доступность портов, установить пакеты, запустить сервисы, настроить автозапуск.
- Администратор (безопасность): создать администраторов LinOTP, настроить SSL, ограничить доступ, проверить права на encKey.
- Разработчик (интеграция): протестировать useridresolver, настроить realm и интеграцию SSH или RADIUS.
Миграция и совместимость
- При переносе на новую ОС или сервер: экспортируйте базу PostgreSQL (pg_dump) и надежно перенесите файл encKey.
- При обновлении версии LinOTP проверяйте совместимость миграций БД и делайте тестовый прогон на стенде.
Краткая методология развёртывания (мини-план)
- Подготовьте тестовый сервер и проверьте репозитории.
- Установите PostgreSQL и инициализируйте базу.
- Разверните виртуальное окружение Python и установите LinOTP.
- Сгенерируйте encKey и выполните paster setup-app.
- Настройте Apache/WSGI и SSL.
- Создайте администраторов и протестируйте функционал.
- Настройте бэкапы и мониторинг.
Краткая справка по терминам
- LinOTP — система двухфакторной аутентификации с OTP.
- encKey — файл с ключом шифрования секретов LinOTP.
- paster — утилита из пакета PasteDeploy для запуска WSGI-приложений.
Критерии приёмки
- Веб-интерфейс управления доступен по HTTPS и требует Digest-аутентификацию для /manage.
- Запись токена в базе успешно создаётся и может пройти валидацию.
- Процессы Apache/WSGI работают от имени пользователя linotp и имеют доступ к encKey.
- Бэкап базы данных и копия encKey находятся в защищённом хранилище.
Итог и краткое резюме
Вы установили LinOTP на OpenSUSE 12.3 с PostgreSQL, настроили виртуальное окружение, создали ключ шифрования, и интегрировали приложение с Apache/WSGI и SSL. Дальше следует сконфигурировать realm и useridresolver в веб-интерфейсе и зарегистрировать токены для пользователей.
Важно: для продакшена обязательно работать с доверенными сертификатами, защищать ключи и организовать резервное копирование.
Короткий чек-лист перед сдачей в эксплуатацию:
- Защищённый SSL-сертификат установлен
- Автозапуск PostgreSQL и Apache включён
- Права доступа на encKey и логи настроены
- Создан первый администратор и протестированы входы
- Настроены регулярные бэкапы БД и архивация логов
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента