Эта страница переведена машинным переводом. Читайте английский оригинал. English

← Функции сервера HQbird

Использование служб Windows Active Directory для аутентификации пользователей в базе данных Firebird.

Firebird уже поддерживал доверенную аутентификацию Windows на Windows. Эта возможность была реализована в плагине Win_SSPI для клиента и сервера. Он использует Windows SSPI API и поставщик безопасности NTLM и работает только на Windows.

Windows Active Directory широко поддерживается современными системами Linux, поэтому его службы также могут аутентифицировать пользователей на Linux.

Firebird реализует эту поддержку в плагине безопасности gssauth. Как следует из названия, он использует GSS API для взаимодействия с Active Directory. Он доступен как на Windows, так и на Linux, как для клиента Firebird, так и для сервера Firebird. В большинстве случаев он может заменить Win_SSPI, но это не обязательно — оба плагина могут работать на одном сервере Firebird.

Установка

Для использования Active Directory требуется некоторая подготовка. Хост Windows, на котором работает сервер Firebird, должен быть членом домена Windows. Хост Linux, на котором работает сервер Firebird, должен быть присоединён к Active Directory. Для запуска службы Firebird на Windows требуется учётная запись пользователя домена. Этой учётной записи домена должны быть назначены имена участников службы (SPN), чтобы клиент Firebird мог аутентифицировать сервер Firebird через Active Directory. Ниже приведено краткое руководство по подготовке серверов Windows и Linux со стороны Firebird.

Сервер Firebird на хосте Windows

  1. Создайте учётную запись домена для запуска службы Firebird. Установите следующие свойства:

    • Пользователь не может изменить пароль
    • Срок действия пароля не истекает
  2. Установите Firebird и запустите его под этой учётной записью домена. Используйте instsvc с -login или измените свойство «Вход в систему от имени» уже установленной службы.

  3. Добавьте два имени участников службы (SPN) для этой учётной записи. Имя службы — FirebirdSQL. Один SPN должен использовать короткое имя хоста; другой должен использовать FQDN. Если служба Firebird была создана с помощью instsvc, она также регистрирует эти два SPN. В противном случае используйте утилиту Windows setspn:

setspn -U -S FirebirdSQL/hostname account
setspn -U -S FirebirdSQL/hostname.domain account

Например, если домен — example.com, хост — winfb, а учётная запись — fbsvc:

setspn -U -S FirebirdSQL/winfb fbsvc
setspn -U -S FirebirdSQL/winfb.example.com fbsvc
  1. Добавьте gssauth в firebird.conf (AuthServer):
AuthServer = Srp256, gssauth
  1. Установите (или проверьте) разрешения файловой системы для учётной записи домена:

    • Доступ на чтение: firebird.conf и другие файлы .conf
    • Полный доступ: папки с базами данных; security5.fdb; firebird.log и другие файлы .log
  2. Добавьте правило брандмауэра для Firebird.

Сервер Firebird на хосте Linux

  1. Создайте учётную запись домена на хосте Windows. Установите следующие свойства:

    • Пользователь не может изменить пароль
    • Срок действия пароля не истекает
  2. Добавьте два имени участников службы (SPN) для этой учётной записи. Имя службы — FirebirdSQL. Один SPN должен использовать короткое имя хоста; другой должен использовать FQDN. Используйте утилиту Windows setspn:

setspn -U -S FirebirdSQL/hostname account
setspn -U -S FirebirdSQL/hostname.domain account

Например, если домен — example.com, хост — linuxfb, а учётная запись — fbsvc:

setspn -U -S FirebirdSQL/linuxfb fbsvc
setspn -U -S FirebirdSQL/linuxfb.example.com fbsvc
  1. Создайте файл таблицы ключей Kerberos для сервера Linux с помощью утилиты Windows ktpass:
ktpass
  /out firebird.keytab
  /princ FirebirdSQL/[email protected]
  /mapuser [email protected]
  /pass <password of fbsvc account>
  -setpass
  /ptype KRB5_NT_PRINCIPAL
  /crypto all

Примечания:

  • Аргумент /princ чувствителен к регистру; он должен совпадать с тем, что видит хост Linux, на котором будет работать Firebird.
  • -setpass используется, чтобы пароль учётной записи не был изменён.
  • /crypto можно изменить, чтобы избежать устаревших алгоритмов шифрования.
  • Полная документация по ktpass: Microsoft ktpass.
  1. Убедитесь, что установлен libgssapi_krb5.so.

  2. Установите Firebird.

  3. Остановите службу Firebird.

  4. Добавьте gssauth в firebird.conf (AuthServer):

AuthServer = Srp256, gssauth
  1. Скопируйте firebird.keytab с хоста Windows в /opt/firebird (или в папку, где находится firebird.conf в вашем дистрибутиве). Установите владельца firebird:firebird и разрешения так, чтобы только пользователь и группа могли его читать.

  2. Запустите службу Firebird.

Примечание: используйте переменную среды KRB5_TRACE, чтобы задать имя файла трассировки Kerberos для устранения неполадок.

Использование

На Windows плагин gssauth встроен в fbclient.dll, поэтому специальное развёртывание клиента не требуется. На Linux gssauth — это отдельный модуль libgssauth.so, и при необходимости его нужно развёртывать вместе с другими бинарными файлами.

Сервер Firebird должен включать gssauth в список плагинов AuthServer. Клиент Firebird включает gssauth в AuthClient по умолчанию.

Инструменты Firebird, такие как isql, gbak и другие, теперь поддерживают командный ключ -trusted на Linux, как они давно поддерживают его на Windows.

Создайте сопоставление в базе данных пользователей или базе данных безопасности, чтобы сопоставить пользователей домена с пользователями Firebird. Примечание: gssauth сообщает только полные имена пользователей и групп (включая префикс домена), тогда как Win_SSPI сообщает две формы для каждой группы (с доменом и без него) — учитывайте это при создании сопоставлений. Кроме того, на Linux имена пользователей/групп домена могут отображаться в несколько иной форме, чем в Active Directory (в нижнем регистре, без префикса домена и т. д.). Проверьте точное представление с помощью команд Linux, таких как id и groups.

Примеры сопоставлений

Сопоставить каждого пользователя как есть:

CREATE GLOBAL MAPPING GSS_USERS
  USING PLUGIN GSSAUTH
  FROM ANY USER
  TO USER;

Сопоставить администраторов домена как RDB$ADMIN на сервере Linux:

CREATE GLOBAL MAPPING GSS_ADMINS
  USING PLUGIN GSSAUTH
  FROM GROUP 'domain admins'
  TO ROLE RDB$ADMIN;

Сопоставить администраторов домена как RDB$ADMIN на сервере Windows:

CREATE GLOBAL MAPPING GSS_ADMINS
  USING PLUGIN GSSAUTH
  FROM GROUP 'EXAMPLE\Domain Admins'
  TO ROLE RDB$ADMIN;