Top.Mail.Ru
Настройка Single Sign-On (SSO) для МИС Самсон через Kerberos — ADMINMED.ru

Настройка Single Sign-On (SSO) для МИС Самсон через Kerberos

Введение: зачем нужен SSO в медицине?

Коллеги, представьте ситуацию: в поликлинике работают сотни сотрудников — врачи, медсёстры, регистраторы. Каждому нужно входить в МИС. Пароли забываются, их приходится сбрасывать, а если сотрудник уволен, нужно успеть заблокировать его доступ везде.

SSO (Single Sign-On) — технология единого входа — решает эти проблемы:

  1. Упрощение входа: Пользователь входит один раз в систему (на компьютере), и доступ к Самсону получает автоматически.
  2. Централизованное управление: Вы меняете пароль или блокируете учётную запись в домене — доступ к МИС закрывается мгновенно.

Для реализации SSO мы выбрали Kerberos, так как это протокол, поддерживаемый и Windows-доменами (AD), и Linux-решениями (FreeIPA, Samba, Альт Кентавр). Под капотом Самсона за работу с Kerberos отвечает специальный GSS-плагин для MySQL.

Важное предупреждение: Это руководство для опытных администраторов, знакомых с Linux и доменными технологиями. Мы будем настраивать сервер БД MySQL (MariaDB) так, чтобы он доверял вашему домену.

Шаг 0. Предположения и требования

Я не буду описывать здесь настройку самого домена, так как вариантов много. Но вот что уже должно быть создано до начала:

  • Работающий домен Kerberos (KDC). Это может быть:
    • Windows Server (2008 R2 и новее) с Active Directory.
    • Linux-контроллер, например, на базе Альт 7.0 Кентавр (отличный вариант для учебных целей и не только) или FreeIPA.
    • Samba4 DC.
  • Сервер с CentOS 6 / Альт / аналогичный дистрибутив, где будет стоять MySQL (база Самсона). В инструкции используется CentOS 6 как целевая платформа.
  • Настроенный DNS. Критично! Ваш сервер БД должен по IP-адресу определяться по имени (FQDN), и наоборот (наличие A и PTR записей). Если DNS не настроен, можно использовать /etc/hosts, но это путь к боли.
  • Синхронизация времени (NTP). Kerberos очень чувствителен к рассинхронизации часов.

Шаг 1. Подготовка сервера БД (Linux-клиента)

Заходим на наш будущий сервер БД (назовём его dbserv.testdomain.org). Все действия — от root.

  1. Устанавливаем необходимые пакеты:
    yum install krb5-libs krb5-workstation bind-utils ntpdate -y
    Для Альт Linux: apt-get install krb5-libs krb5-workstation bind-utils
    • krb5-libs — библиотеки,
    • krb5-workstation — утилиты (kinit, klist, ktutil, kvno),
    • bind-utils — nslookup и dig для проверки DNS.
  2. Настраиваем /etc/krb5.conf. Это главный файл конфигурации Kerberos.
    Есть два подхода:
    А) Оптимистичный (доверяем DNS):
    [libdefaults]
    default_realm = TESTDOMAIN.ORG
    dns_lookup_realm = true
    dns_lookup_kdc = true

    Б) Консервативный (прописываем всё руками):
    [libdefaults]
    default_realm = TESTDOMAIN.ORG
    dns_lookup_realm = false
    dns_lookup_kdc = false

    [realms]
    TESTDOMAIN.ORG = {
    kdc = 10.0.0.0:88 (IP-адрес вашего KDC (контроллера домена) }

    [domain_realm]
    .testdomain.org = TESTDOMAIN.ORG
    testdomain.org = TESTDOMAIN.ORG

    Где TESTDOMAIN.ORG — имя вашего realm (обычно пишется капсом), а testdomain.org — DNS-имя домена.
  3. Проверяем связь с доменом.
    Пробуем получить билет для любого пользователя домена (например, администратора):
    kinit administrator@TESTDOMAIN.ORG

    Вас попросят ввести пароль. Если команда выполнилась без ошибок, смотрим тикет:
    klist

    Вы должны увидеть выданный билет. Если ошибка — проверяйте DNS и время.

Шаг 2. Создание принципала сервиса и keytab-файла

Чтобы сервер БД мог участвовать в аутентификации, для него нужно создать в домене специальную учетную запись — принципала сервиса (Service Principal). Имя принципала будет выглядеть так: 
s11/dbserv.testdomain.org@TESTDOMAIN.ORG, где s11 — это идентификатор сервиса (в нашем случае — плагина для MySQL).

Вариант А: Ваш KDC — Linux (например, Альт Кентавр)

Выполняем команды на самом сервере KDC:

  1. Создаём принципала со случайным ключом:
    kadmin.local -q ‘addprinc -randkey s11/dbserv.testdomain.org’
  2. Экспортируем ключи в keytab-файл:
    kadmin.local -q ‘ktadd -e aes256-cts-hmac-sha1-96:normal -k /tmp/s11.krb5.keytab s11/dbserv.testdomain.org’

Вариант Б: Ваш KDC — Windows Server (Active Directory)

Этот вариант чуть сложнее, так как требует создания «заглушки».

  1. Создайте обычную тестовую учётную запись пользователя, например, dummy_s11_dbserv. Задайте ей пароль (допустим, Pa$$w0rd1234). Эта учётка нужна только для маппинга.
  2. На контроллере домена откройте командную строку от имени администратора и выполните команду ktpass (я разбил строку для читаемости):
    ktpass -princ s11/dbserv.testdomain.org@TESTDOMAIN.ORG ^
    -mapuser dummy_s11_dbserv@TESTDOMAIN.ORG ^
    -crypto AES256-SHA1 ^
    -ptype KRB5_NT_PRINCIPAL ^
    -pass Pa$$w0rd123 ^
    -out C:\TMP\s11.krb5.keytab


    Эта команда свяжет принципала сервиса с созданным пользователем и создаст keytab-файл.
  3. Проверка:
    На сервере БД выполните команду:
    kvno s11/dbserv.testdomain.org@TESTDOMAIN.ORG
    Если она возвращает номер версии ключа, а klist показывает тикет — всё хорошо.

Шаг 3. Установка и настройка GSS-плагина для MySQL

Теперь работаем снова на сервере БД.

  1. Устанавливаем плагин.
    Предположим, у вас есть готовый RPM-пакет mysql-plugin-krb5gss-0.3-s4el6.x86_64.rpm.
    Установите его:
    rpm -ivh mysql-plugin-krb5gss-0.3-s4el6.x86_64.rpm
    Или, если пакета нет, потребуется сборка из исходников (это отдельная тема).
  2. Размещаем keytab-файл.
    Перенесите полученный на прошлом шаге файл s11.krb5.keytab на сервер БД в каталог /etc/s11/ и выставите правильные права доступа:
    mkdir -p /etc/s11
    chown mysql:mysql /etc/s11/krb5.keytab
    chmod 400 /etc/s11/krb5.keytab


    Путь и имя файла должны соответствовать тому, что мы пропишем в конфиге MySQL.
  3. Регистрируем плагин и функции в MySQL.
    Подключаемся к MySQL под root’ом и выполняем:
    INSTALL PLUGIN krb5gss SONAME ‘plugin_krb5gss.so’;
    CREATE FUNCTION krb5gss_init RETURNS INTEGER SONAME ‘plugin_krb5gss.so’;
    CREATE FUNCTION krb5gss_step RETURNS INTEGER SONAME ‘plugin_krb5gss.so’;
    CREATE FUNCTION krb5gss_response RETURNS STRING SONAME ‘plugin_krb5gss.so’;
    CREATE FUNCTION krb5gss_username RETURNS STRING SONAME ‘plugin_krb5gss.so’;
    CREATE FUNCTION krb5gss_clean RETURNS STRING SONAME ‘plugin_krb5gss.so’;
  4. Настраиваем конфигурационный файл MySQL (/etc/my.cnf).
    В секцию [mysqld] добавьте:
    [mysqld]

    krb5gss_service=s11@dbserv.testdomain.org krb5gss_keytab=/etc/s11/krb5.keytab


    Плагин умеет определять эти параметры самостоятельно (по умолчанию: имя сервиса — s11@хостнейм, keytab — /etc/s11/krb5.keytab), но я предпочитаю явное указание.
  5. Перезапускаем MySQL:

    systemctl restart mysql
  6. Проверяем, что плагин загрузился и работает.
    Снова заходим в MySQL и выполняем диагностические команды:
    — Проверяем переменные плагина
    SHOW VARIABLES LIKE ‘krb5%’;
    — Должны увидеть наши настройки: krb5gss_keytab, krb5gss_service и др.
    — Инициализируем GSS-контекст
    SELECT krb5gss_init(); — Если вернулось ‘1’ — всё ОК. Если ‘-1’ — ошибка.
    — Очищаем контекст
    SELECT krb5gss_clean();
    Если krb5gss_init() возвращает -1, смотрим лог MySQL (/var/log/mysql.log или journalctl).
    Частая причина — проблема с обратным DNS, из-за которой библиотеки Kerberos не могут правильно сопоставить имя сервиса и IP.
    Иногда помогает включение опции:
    SET @@global.krb5gss_noname_in_gss_acquire_cred = ON;

    Но лучше проверить файл /etc/hosts. Убедитесь, что строка с вашим сервером выглядит так:
    10.0.2.102 dbserv.testdomain.org dbserv
    а не так (это частая ошибка):
    10.0.2.102 dbserv dbserv.testdomain.org
    Kerberos делает двойное преобразование: имя → IP → имя. Итоговое имя должно совпадать с исходным FQDN.

Шаг 4. Финальная проверка и использование

Теперь всё готово. Пользователь заходит на свой рабочий компьютер (входящий в домен), получает билет Kerberos (автоматически при входе в Windows или через kinit в Linux). Когда он запускает клиент Самсона, тот должен передать эти credentials серверу БД через плагин.

Важно: Логин пользователя в операционной системе должен совпадать с его логином в базе данных Самсона.


Заключение и ссылки

SSO для Самсона — задача нетривиальная, но благодарная. Она серьёзно повышает безопасность и удобство работы в крупном медицинском учреждении. Данная инструкция — отправная точка. Если у вас есть опыт настройки такого или похожего решения, или вы столкнулись с ошибками — обязательно пишите в комментариях или создавайте тему на форуме!

Полезные ссылки:

  1. Wikipedia: Single Sign-On
  2. Wikipedia: Kerberos
  3. GSS-API
  4. Настройка домена на Альт Линукс
  5. Kerberos Tutorial (англ.)
© 2026 ADMINMED.ru

Login





Loading...

Top.Mail.Ru
👁 0
  Яндекс.Метрика