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

Как защитить PostgreSQL с двухфакторной аутентификацией WiKID

• 8 min read • Безопасность • Обновлено 19 Nov 2025
Защитить PostgreSQL через WiKID 2FA
Защитить PostgreSQL через WiKID 2FA

Введение

Эта инструкция показывает, как подключить двухфакторную аутентификацию для PostgreSQL, используя сервер WiKID Strong Authentication и PAM на Linux. Предполагается, что у вас уже установлены PostgreSQL и WiKID и они базово настроены.

Определения в одну строку:

  • PAM: Pluggable Authentication Modules — модульная система аутентификации в Linux.
  • RADIUS: Протокол удалённой проверки подлинности для централизованной аутентификации.
  • WiKID: Сервер сильной аутентификации, выдающий одноразовые коды (OTP) и поддерживающий офлайн/онлайн режимы.

Важно: перед внесением изменений делайте резервные копии конфигурационных файлов (pg_hba.conf, /etc/pam.d/postgresql, /etc/raddb/server).

Что вы получите

  • Централизованную 2FA-авторизацию для всех пользователей PostgreSQL в указанной сети.
  • Возможность комбинировать локальные пароли и одноразовые коды WiKID.
  • Контроль попыток и режимов офлайн/онлайн для мобильных токенов.

Ограничения и когда это не подойдёт

  • Если приложения ожидают стандартную авторизацию PostgreSQL (md5/trust) и не поддерживают ввод OTP в поток логина, возможны нарушения работы. Для приложений используйте отдельные записи в pg_hba.conf.
  • Для полностью автоматизированных сервисных подключений (без человека) 2FA не подходит; используйте отдельные сервисные учётные записи с ограниченным доступом.

Конфигурация PostgreSQL

Конфигурация PostgreSQL на стороне сервера проста: в файл pg_hba.conf добавьте строку, указывающую на использование PAM для нужной подсети.

 host    all         all         192.168.0.0/24         pam postgresql

Пояснения:

  • host — тип соединения TCP/IP.
  • all all — все базы и все пользователи.
  • 192.168.0.0/24 — сеть, к которой применяется правило (локальная LAN в примере).
  • pam postgresql — использовать PAM-конфигурацию с именем postgresql (файл /etc/pam.d/postgresql на Red Hat-подобных).

Практическая рекомендация:

  • Оставьте отдельную строку для приложений/сервисов, использующих md5 или идентификацию по сертификатам, чтобы не нарушить их работу.
  • После изменения перезапустите или перезагрузите PostgreSQL: systemctl reload postgresql или соответствующая команда для вашей дистрибуции.

Конфигурация PAM на сервере PostgreSQL

Если в вашей системе нет пакета pam_radius, скачайте его исходники с сайта pam_radius и установите согласно документации пакета.

После установки отредактируйте файл PAM для PostgreSQL (обычно /etc/pam.d/postgresql):

#%PAM-1.0 
   
auth       sufficient   /lib/security/pam_radius_auth.so 
   
account    include      system-auth 
   
password   include      system-auth 
   
session    include      system-auth  
 

Пояснения:

  • auth sufficient с pam_radius означает: если проверка RADIUS успешна — доступ предоставляется и дальнейшая аутентификация не требуется.
  • account/password/session включают стандартные системные правила.

Примечание: путь к pam_radius_auth.so может отличаться в зависимости от дистрибутива (/lib64/… или /lib/security/…). Проверьте фактичесный путь в системе.

Теперь отредактируйте файл RADIUS-клиента на сервере PostgreSQL (/etc/raddb/server или /etc/radiusclient/radiusclient.conf в зависимости от реализации). Пример содержимого /etc/raddb/server:

# server[:port] shared_secret      timeout (s)
#127.0.0.1      secret             1
192.168.0.10    your_shared_secret  3     

Параметры:

  • server — адрес WiKID-сервера (можно указать порт через двоеточие).
  • shared_secret — секретная фраза, совпадающая с конфигурацией клиента на WiKID.
  • timeout — таймаут в секундах на ожидание ответа сервера.

PAM-конфигурация варьируется по дистрибутивам; сверяйтесь с документацией вашей ОС.

Конфигурация сервера WiKID Strong Authentication

WiKID использует понятие «доменов аутентификации» — логическое разделение клиентов и токенов. Ниже приведены шаги по созданию домена и добавлению RADIUS-клиента.

Добавление домена в WiKID

Домены позволяют сегментировать полномочия аутентификации. Каждый токен во время первоначального provision использует 12-значный код, который указывает на домен (обычно это IP адрес сервера, дополненный нулями).

Например, сервер с публичным IP 27.232.7.14 имеет код 027232007014. При использовании службы wikidsystems.net вы можете применять префиксы или специальные коды для нестандартных сценариев.

Чтобы просмотреть или создать домен, в административном интерфейсе выберите пункт Domains (Домены). На экране отображаются текущие домены.

Экран настройки домена WiKID

Выберите Create New Domain (Создать новый домен) для добавления. Поля, требующие заполнения:

  • Domain Name — описательное название домена в панели администратора.
  • Device Domain Name — короткая метка, отображаемая в меню на клиентском токене (лучше короткая для мобильных устройств).
  • Minimum PIN Length — минимальная длина PIN для домена.
  • Passcode Lifetime — срок действия одноразового пароля (в секундах).
  • Server Code — 12-значный код (нулёвая дописанная IP-строка или префикс wikidsystems.net).
  • Max Bad PIN Attempts — число неверных PIN до отключения токена.
  • Max Bad Passcode Attempts — максимальное число неверных OTP для пользователя до блокировки.
  • Max Sequential Offlines — число последовательных офлайн-авторизаций перед требованием онлайн-проверки.
  • Use TACACS+ — опция использования TACACS+ вместо/вместе с RADIUS.

Экран параметров создания домена WiKID

Важно: подберите Passcode Lifetime и Max Bad Passcode Attempts, учитывая баланс удобства и безопасности — короткий срок повышает безопасность, но увеличивает вероятность ошибок у пользователей.

Создание сетевых клиентов (RADIUS-клиент)

Сетевые клиенты — это системы, которые запрашивают проверку одноразовых паролей у WiKID. Перед использованием клиент должен быть создан и настроен в административной панели.

В панели выберите создание нового Network Client (Сетевого клиента). Укажите следующие параметры:

  • Name — имя клиента (рекомендуется использовать hostname + домен WiKID).
  • IP Address — IP адрес сервера PostgreSQL или любого промежуточного прокси.
  • Protocol — выберите RADIUS.
  • Domain — домен WiKID, в котором зарегистрированы токены ваших PostgreSQL-пользователей.

RADIUS-трафик защищён shared_secret. Введите тот же секрет, который вы указали в /etc/raddb/server на сервере PostgreSQL.

Экран добавления сетевого клиента WiKID

Экран свойств сетевого клиента WiKID

Поле для shared_secret в интерфейсе WiKID

После создания клиента попытка авторизации из PostgreSQL будет перенаправлена на WiKID. Теперь доступ к PostgreSQL по сети 192.168.0.0/24 потребует одноразового кода от WiKID.

Практическая методология внедрения (мини-метод)

  1. Подготовка:
    • Резервные копии pg_hba.conf, /etc/pam.d/postgresql, /etc/raddb/server.
    • Тестовая среда, имитирующая продакшен сеть.
  2. Установка pam_radius в тестовом окружении.
  3. Настройка и тестирование RADIUS-запросов (radtest или radclient для проверки связи с WiKID).
  4. Внесение изменений в pg_hba.conf и мягкий перезапуск PostgreSQL.
  5. Тестирование логинов с реальными токенами WiKID (разные роли: DBA, разработчик, приложение).
  6. Мониторинг логов и коррекция таймаутов/shared_secret.
  7. Пошаговый ввод в продакшен: сначала узкий диапазон IP, затем расширение покрытия.

Контрольный список администратора перед вводом в эксплуатацию

  • Создан резервный копия pg_hba.conf
  • Установлен и проверен pam_radius
  • В /etc/pam.d/postgresql указан корректный путь к pam_radius
  • В /etc/raddb/server указан IP WiKID и совпадает shared_secret
  • На WiKID создан домен и сетевой клиент с тем же shared_secret
  • Тестовый пользователь с токеном зарегистрирован в домене
  • Выполнены тестовые логины и проверена обработка ошибок
  • Документированы инструкции для пользователей и поддержка

Критерии приёмки

  • Успешный вход в PostgreSQL с учётной записью пользователя и корректным OTP.
  • Отклонение доступа при неверном OTP или превышении лимита попыток.
  • Непрерывная работа приложений, для которых оставлена отдельная строка в pg_hba.conf.
  • Логи аутентификации содержат записи RADIUS-запросов и ответов.

Тестовые случаи и приёмочные проверки

  1. Успешный доступ с валидным OTP.
  2. Отказ при неверном OTP.
  3. Блокировка учетной записи после Max Bad Passcode Attempts.
  4. Поведение при недоступности WiKID (таймауты, fallback). Ожидается отказ доступа, если нет альтернативной схемы.
  5. Проверка логов: появились записи о запросе в /var/log/auth.log или в логах RADIUS-клиента.
  6. Проверка приложений: приложения, использующие подключение через пул подключения, корректно обрабатывают запросы на ввод OTP (в большинстве случаев GUI/CLI с локальным вводом будут работать; сервисные подключения должны быть выделены отдельно).

Поиск неисправностей и советы (troubleshooting)

  • Нет ответа от WiKID: проверьте сеть (ping), порт RADIUS (обычно 1812), firewall/iptables.
  • Неверный shared_secret: синхронизируйте secret в /etc/raddb/server и в настройках клиента WiKID.
  • pam_radius не загружается: проверьте путь к .so в /etc/pam.d/postgresql и права доступа к файлу.
  • Таймауты: увеличьте timeout в /etc/raddb/server или настройках клиента WiKID.
  • Логи: смотрите /var/log/auth.log, системные и RADIUS-логи на предмет подробностей.

Важно: не выключайте логирование аутентификации в продакшене — это главный источник информации при инцидентах.

Безопасность и жёсткие рекомендации

  • Shared_secret: используйте длинный уникальный секрет и храните его в защищённом месте.
  • TLS/DTLS для RADIUS: рассмотрите варианты защиты RADIUS-трафика (VPN или современные расширения), если трафик идёт через ненадёжные сети.
  • Меньше прав для сервисных аккаунтов: сервисные учётные записи должны иметь минимально необходимые права на базе данных.
  • Обновления: поддерживайте pam_radius и WiKID в актуальном состоянии для исправления уязвимостей.
  • Аудит: периодически проверяйте логи на подозрительную активность и проводите ротацию секретов.

Совместимость и миграция

  • Для облачных инсталляций обратите внимание на адреса и доступность WiKID из облака. В некоторых случаях удобнее развернуть WiKID в том же VPC/сегменте.
  • Для HA PostgreSQL (репликация) правило pg_hba.conf должно быть одинаково на всех нодах, или содержать исключения для внутренних сервисных подключений.
  • Если у вас централизованный LDAP/AD, можно комбинировать 2FA: сначала подтверждение пароля через LDAP, затем OTP через RADIUS, но это потребует дополнительной настройки PAM stack.

Конфиденциальность и соответствие (GDPR)

  • WiKID хранит минимальные данные о токенах и событиях аутентификации. Если вы обрабатываете персональные данные, убедитесь, что журналы и резервные копии хранятся в соответствии с политиками конфиденциальности и требованиями регулятора.
  • Минимизируйте хранение персональных идентификаторов и регулярно очищайте устаревшие записи.

Роли и обязанности (короткие чек-листы)

Администратор PostgreSQL:

  • Настроить pg_hba.conf и PAM, выполнить тестирование, документировать изменения.

Администратор WiKID:

  • Создать домен, добавить сетевой клиент, настроить shared_secret и управлять токенами.

Оператор поддержки:

  • Принимать инциденты, проверять логи, переключать на резервные механизмы доступа при необходимости.

Пользователь:

  • Иметь зарегистрированный токен в нужном домене и знать процедуру восстановления при утере токена.

Итоги

Важно: двуфакторная аутентификация значительно повышает безопасность доступа к базам данных, но требует тщательного планирования: резервные пути, совместимость приложений и процедуры восстановления.

Краткое резюме:

  • Настройка включает правки в pg_hba.conf, PAM (pam_radius) и добавление клиента в WiKID.
  • Тестируйте в контролируемой среде и внедряйте поэтапно.
  • Обеспечьте аудит, ротацию секретов и процедуры восстановления.

Если вам нужны шаблоны конфигураций для конкретных дистрибутивов (Debian/Ubuntu vs RHEL/CentOS) или пример playbook для автоматизации (Ansible), укажите цель, и я подготовлю соответствующий шаблон.

Поделиться: 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 быстро