Гид по технологиям

Как запустить LinOTP на OpenSUSE 12.3 с PostgreSQL

• 7 min read • DevOps • Обновлено 22 Nov 2025
LinOTP на OpenSUSE 12.3 с PostgreSQL
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 linotp2
postgres=# 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 проверяйте совместимость миграций БД и делайте тестовый прогон на стенде.

Краткая методология развёртывания (мини-план)

  1. Подготовьте тестовый сервер и проверьте репозитории.
  2. Установите PostgreSQL и инициализируйте базу.
  3. Разверните виртуальное окружение Python и установите LinOTP.
  4. Сгенерируйте encKey и выполните paster setup-app.
  5. Настройте Apache/WSGI и SSL.
  6. Создайте администраторов и протестируйте функционал.
  7. Настройте бэкапы и мониторинг.

Краткая справка по терминам

  • 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 и логи настроены
  • Создан первый администратор и протестированы входы
  • Настроены регулярные бэкапы БД и архивация логов
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро