Spec-Zone.ru › MariaDB

Подключаемый модуль аутентификации — GSSAPI

Подключаемый модуль аутентификации gssapi позволяет пользователю аутентифицироваться на серверах, использующих Generic Security Services Application Program Interface (GSSAPI). В Windows используется немного другой, но очень похожий API, называемый Security Support Provider Interface (SSPI). GSSAPI — это стандартный API, описанный в RFC2743 и RFC2744. Клиент и сервер взаимодействуют, используя стандартизированный протокол, описанный в RFC7546.

В Windows этот подключаемый модуль поддерживает аутентификацию Kerberos и NTLM. Аутентификация в Windows поддерживается независимо от того, используется ли домен в среде.

В системах Unix наиболее распространённой службой GSSAPI является Kerberos. Однако в Unix-системах она используется реже, чем в Windows. Независимо от этого, этот подключаемый модуль также поддерживает аутентификацию Kerberos в Unix-системах.

Подключаемый модуль аутентификации gssapi чаще всего используется для аутентификации на серверах Microsoft Active Directory.

В этой статье приведены инструкции по настройке подключаемого модуля аутентификации gssapi для MariaDB для входа без пароля.

Установка пакета плагина

Начиная с MariaDB 10.11, в Windows плагин включён в сервер, и отдельная установка не требуется.

Динамическая библиотека подключаемого модуля аутентификации gssapi включена в пакеты MariaDB в виде auth_gssapi.so или auth_gssapi.dll динамической библиотеки в системах, где она может быть скомпилирована.

Установка в Linux

Подключаемый модуль аутентификации gssapi включён в бинарные tar-архивы в Linux.

Установка с помощью менеджера пакетов

Подключаемый модуль аутентификации gssapi также можно установить через менеджер пакетов в Linux. Для этого ваша система должна быть настроена на установку из репозиториев MariaDB.

Вы можете настроить менеджер пакетов на установку из репозитория пакетов MariaDB Corporation, используя скрипт настройки MariaDB Package Repository.

Вы также можете настроить менеджер пакетов на установку из репозитория MariaDB Foundation, используя инструмент настройки репозитория MariaDB.

Установка с помощью yum/dnf

В RHEL, CentOS, Fedora и других аналогичных дистрибутивах Linux настоятельно рекомендуется установить соответствующий пакет RPM из репозитория MariaDB, используя yum или dnf. Начиная с RHEL 8 и Fedora 22, yum был заменён на dnf, что является следующей основной версией yum. Однако команды yum всё ещё работают во многих системах, использующих dnf. Например:

sudo yum install MariaDB-gssapi-server
Установка с помощью apt-get

В Debian, Ubuntu и других аналогичных дистрибутивах Linux настоятельно рекомендуется установить соответствующий пакет DEB из репозитория MariaDB, используя apt-get. Например:

sudo apt-get install mariadb-plugin-gssapi-server
Установка с помощью zypper

В SLES, OpenSUSE и других аналогичных дистрибутивах Linux настоятельно рекомендуется установить соответствующий пакет RPM из репозитория MariaDB, используя zypper. Например:

sudo zypper install MariaDB-gssapi-server

Установка в Windows

Начиная с MariaDB 10.11, плагин включён в сервер, и отдельная установка не требуется.

До MariaDB 10.11 подключаемый модуль аутентификации gssapi включён в MSI и ZIP пакеты в Windows.

Установка плагина

Начиная с MariaDB 10.11, в Windows плагин включён в сервер, и отдельная установка не требуется.

До MariaDB 10.11 в Windows и в других операционных системах, хотя динамическая библиотека плагина по умолчанию распространяется с MariaDB, плагин по умолчанию не устанавливается MariaDB. Есть два способа установки плагина с MariaDB.

Первый метод можно использовать для установки плагина без перезапуска сервера. Вы можете установить плагин динамически, выполнив INSTALL SONAME или INSTALL PLUGIN. Например:

INSTALL SONAME 'auth_gssapi';

Второй метод позволяет указать серверу загружать плагин при запуске. Плагин можно установить таким образом, используя опции --plugin-load или --plugin-load-add. Это можно указать в качестве аргумента командной строки для mariadbd, или в соответствующей группе опций сервера в группе опций в файле опций. Например:

[mariadb]
...
plugin_load_add = auth_gssapi

Удаление плагина

Вы можете удалить плагин динамически, выполнив UNINSTALL SONAME или UNINSTALL PLUGIN. Например:

UNINSTALL SONAME 'auth_gssapi';

Если вы установили плагин, указав опции --plugin-load или --plugin-load-add в соответствующей группе опций сервера в файле опций, то эти опции необходимо удалить, чтобы предотвратить загрузку плагина при следующем перезапуске сервера.

Настройка плагина

Если сервер MariaDB работает в Unix-системе, то для использования плагина потребуется выполнить дополнительные шаги настройки.

Если сервер MariaDB работает в Windows, то никаких специальных шагов настройки для использования плагина не требуется, при условии, что:

  • Сервер Windows входит в домен.
  • Процесс сервера MariaDB выполняется либо как учётная запись NetworkService, либо как учётная запись пользователя домена.

Создание файла keytab в Unix

Если сервер MariaDB работает в Unix-системе, то серверу KDC потребуется создать файл keytab для сервера MariaDB. Файл keytab содержит имя служебного принципала, которое будет использоваться сервером MariaDB для связи с сервером KDC. Файл keytab необходимо передать на сервер MariaDB, и процесс сервера mysqld должен иметь права чтения этого файла keytab.

Способ создания этого файла keytab зависит от того, является ли сервер KDC Microsoft Active Directory KDC или MIT Kerberos KDC.

Создание файла keytab с Microsoft Active Directory

Если вы используете Microsoft Active Directory KDC, то вам может потребоваться создать файл keytab, используя утилиту ktpass.exe на хосте Windows. Служебный принцип должен быть сопоставлен с существующим пользователем домена. Для этого выполните шаги, указанные ниже.

Не забудьте заменить следующие элементы в шагах ниже:

  • Замените ${HOST} на полное доменное имя хоста сервера MariaDB.
  • Замените ${DOMAIN} на домен Active Directory.
  • Замените ${AD_USER} на существующего пользователя домена.
  • Замените ${PASSWORD} на пароль для служебного принципала.

Для создания служебного принципала выполните следующие действия:

ktpass.exe /princ mariadb/${HOST}@${DOMAIN} /mapuser ${AD_USER} /pass ${PASSWORD} /out mariadb.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set

Создание файла keytab с MIT Kerberos

Если вы используете MIT Kerberos KDC, то вы можете создать файл keytab, используя утилиту kadmin. Для этого выполните шаги, указанные ниже.

В следующих шагах убедитесь, что вы заменили ${HOST} на полное доменное имя хоста сервера MariaDB.

Сначала создайте служебного принципала, используя утилиту kadmin. Например:

kadmin -q "addprinc -randkey mariadb/${HOST}"

Затем экспортируйте вновь созданного пользователя в файл keytab, используя утилиту kadmin. Например:

kadmin -q "ktadd -k /path/to/mariadb.keytab mariadb/${HOST}"

Дополнительные сведения можно найти по следующим ссылкам:

  • Документация MIT Kerberos: администрирование базы данных
  • Документация MIT Kerberos: серверы приложений

Настройка пути к файлу keytab в Unix

Если сервер MariaDB работает под Unix, то путь к файлу keytab, который был создан ранее, можно задать, настроив системную переменную gssapi_keytab_path. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров в группе параметров в файле параметров. Например:

[mariadb]
...
gssapi_keytab_path=/path/to/mariadb.keytab

Настройка имени служебного принципала

Имя служебного принципала можно задать, настроив системную переменную gssapi_principal_name. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров в группе параметров в файле параметров. Например:

[mariadb]
...
gssapi_principal_name=service_principal_name/host.domain.com@REALM

Если имя служебного принципала не указано, то плагин по умолчанию попытается использовать mariadb/host.domain.com@REALM.

Если сервер MariaDB работает под Unix, то для работы плагина требуется имя служебного принципала.

Если сервер MariaDB работает под Windows, то плагину обычно не нужно имя служебного принципала для работы. Однако, если вы хотите использовать его, то его можно создать с помощью утилиты setspn.

Разные реализации KDC могут использовать разные канонические формы для идентификации принципалов. См. RFC2744: Раздел 3.10, чтобы узнать, что стандарт говорит об именах принципалов.

Дополнительные сведения можно найти по следующим ссылкам:

  • Услуги домена Active Directory: имена служебных принципалов
  • Документация MIT Kerberos: Решения по конфигурации домена
  • Документация MIT Kerberos: Имена принципалов и DNS

Создание пользователей

Чтобы создать учетную запись пользователя через CREATE USER, укажите имя плагина в разделе IDENTIFIED VIA. Например:

CREATE USER username@hostname IDENTIFIED VIA gssapi;

Если SQL_MODE не имеет NO_AUTO_CREATE_USER установленным, то вы также можете создать учетную запись пользователя через GRANT. Например:

GRANT SELECT ON db.* TO username@hostname IDENTIFIED VIA gssapi;

Вы также можете указать домен пользователя для MariaDB с помощью USING пункта. Например:

CREATE USER username@hostname IDENTIFIED VIA gssapi USING 'username@EXAMPLE.COM';

Формат домена зависит от конкретного используемого механизма аутентификации. Например, для пользователей Windows, аутентифицирующихся с помощью NTLM, формат должен быть machine\\username.

Если домен не указан в определении учетной записи пользователя, то он не используется для сравнения. Следовательно, 'usr1@EXAMPLE.COM', 'usr1@EXAMPLE.CO.UK' и 'mymachine\usr1' будут идентифицированы как следующая учетная запись пользователя:

CREATE USER usr1@hostname IDENTIFIED VIA gssapi;

Создание пользователей, идентифицированных по членству в группе или SID (специфично для Windows)

Начиная с 10.6.0, только в Windows, можно войти в систему, используя членство в AD или локальной группе. Это достигается с помощью префикса GROUP в IDENTIFIED ... AS

CREATE USER root IDENTIFIED VIA gssapi as 'GROUP:Administrators'
CREATE USER root IDENTIFIED VIA gssapi as 'GROUP:BUILTIN\\Administrators'

Эффект приведенного выше определения заключается в том, что каждый пользователь, идентифицированный как член группы Администраторы, может войти в систему под именем root без пароля.

Пользователь также может войти в систему с использованием собственного или группового SID

CREATE USER root IDENTIFIED VIA gssapi as 'SID:S-1-5-32-544' 

Использование SID будет немного быстрее, чем использование имени (так как это позволит избежать преобразования между SID и именем, которое в противном случае выполняется), а также SID защищены от переименования пользователей или групп.

Вход без пароля в Windows

MariaDB, начиная с 10.11

Начиная с MariaDB 10.11 в Windows, помимо обычной аутентификации с паролем, разрешена аутентификация без пароля при создании пользователя 'root' во время установки.

Это работает аналогично аутентификации по Unix-сокету. Однако, поскольку auth_gssapi, в отличие от unix_socket, требует поддержки со стороны клиента, чтобы избежать сбоев при использовании MariaDB с сторонними драйверами, аутентификация в Windows сначала пытается выполнить аутентификацию на основе пароля (native_authentication), а только если она терпит неудачу, переходит к аутентификации без пароля auth_gssapi.

Плагины аутентификации клиентов

Для клиентов, которые используют библиотеки libmysqlclient или MariaDB Connector/C, MariaDB предоставляет один плагин аутентификации клиента, совместимый с плагином аутентификации gssapi.

  • auth_gssapi_client

При подключении с помощью клиента или утилиты к серверу в качестве учетной записи пользователя, которая аутентифицируется с помощью плагина аутентификации gssapi, вам может потребоваться указать клиенту местоположение соответствующего плагина аутентификации клиента, указав опцию --plugin-dir. Например:

mysql --plugin-dir=/usr/local/mysql/lib64/mysql/plugin --user=alice

auth_gssapi_client

Плагин аутентификации клиента auth_gssapi_client получает имя принципала с сервера и затем использует функцию gss_init_sec_context (под Unix) или функцию InitializeSecurityContext (под Windows) для создания контекста безопасности на клиенте.

Поддержка в библиотеках клиентов

Использование плагина с MariaDB Connector/C

MariaDB Connector/C поддерживает аутентификацию gssapi с помощью плагинов аутентификации клиентов, упомянутых в предыдущем разделе, начиная с MariaDB Connector/C 3.0.1.

Использование плагина с MariaDB Connector/ODBC

MariaDB Connector/ODBC поддерживает аутентификацию gssapi с использованием плагинов аутентификации клиентов, упомянутых в предыдущем разделе, начиная с MariaDB Connector/ODBC 3.0.0.

Использование плагина с MariaDB Connector/J

MariaDB Connector/J поддерживает аутентификацию gssapi с версии MariaDB Connector/J 1.4.0. Текущая документация находится здесь.

Использование плагина с MariaDB Connector/Node.js

MariaDB Connector/Node.js пока не поддерживает аутентификацию gssapi. См. CONJS-72 для получения дополнительной информации.

Использование плагина с MySqlConnector for .NET

MySqlConnector for ADO.NET поддерживает аутентификацию gssapi начиная с MySqlConnector 0.47.0.

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

Однако, этот соединитель также поддерживает параметр строки подключения ServerSPN, который может использоваться для взаимной аутентификации.

Проблемы/обходные пути, специфичные для .NET

При подключении из Unix-клиента к серверу Windows с помощью ADO.NET в среде домена Active Directory обратите внимание, что .NET Core под Unix не поддерживает имена принципалов в формате UPN (Имя принципала пользователя), который является стандартным в Windows (например, machine$@domain.com). Поэтому при возникновении исключения аутентификации с сообщением «сервер не найден в базе данных Kerberos», используйте один из следующих обходных путей:

  • Вынужденное использование имени SPN на основе хоста на стороне сервера.
    • Например, это можно сделать, установив системную переменную gssapi_principal_name в значение HOST/machine в соответствующей группе параметров сервера в файле параметров.
  • Передача имени SPN на основе хоста на стороне клиента.
    • Например, это можно сделать, установив параметр строки подключения соединителя ServerSPN в значение HOST/machine.

Версии

Версия Статус Введено
1.0 Стабильная MariaDB 10.1.15
1.0 Бета MariaDB 10.1.11

Системные переменные

gssapi_keytab_path

  • Описание: Определяет путь к файлу keytab сервера.
    • Эта системная переменная имеет смысл только под Unix.
    • См. Создание файла keytab под Unix и Настройка пути к файлу keytab под Unix для получения дополнительной информации.
  • Командная строка: --gssapi-keytab-path
  • Область: Глобальная
  • Динамическая: Нет
  • Тип данных: string
  • Значение по умолчанию: ''
  • Введено: MariaDB 10.1.11

gssapi_principal_name

  • Описание: Имя служебного принципала.
    • См. Настройка имени служебного принципала для получения дополнительной информации.
  • Командная строка: --gssapi-principal-name
  • Область: Глобальная
  • Динамическая: Нет
  • Тип данных: string
  • Значение по умолчанию: ''
  • Введено: MariaDB 10.1.11

gssapi_mech_name

  • Описание: Имя пакета SSPI, используемого сервером. Может быть 'Kerberos' или 'Negotiate'. Установите его в 'Kerberos', чтобы предотвратить менее безопасный NTLM в средах домена, но оставьте значение по умолчанию (Negotiate), чтобы разрешить среды, не являющиеся доменом (например, если сервер не работает в среде домена).
    • Эта системная переменная имеет смысл только на Windows.
  • Командная строка: --gssapi-mech-name
  • Область действия: Глобальная
  • Динамическая: Нет
  • Тип данных: enumerated
  • Значение по умолчанию: Negotiate
  • Допустимые значения: Kerberos, Negotiate
  • Введено: MariaDB 10.1.11

Параметры

gssapi

  • Описание: Управляет тем, как сервер должен обрабатывать плагин при запуске сервера.
    • Допустимые значения:
      • OFF - Отключает плагин, не удаляя его из таблицы mysql.plugins.
      • ON - Включает плагин. Если плагин не может быть инициализирован, сервер всё равно продолжит запуск, но плагин будет отключён.
      • FORCE - Включает плагин. Если плагин не может быть инициализирован, сервер завершит запуск с ошибкой.
      • FORCE_PLUS_PERMANENT - Включает плагин. Если плагин не может быть инициализирован, сервер завершит запуск с ошибкой. Кроме того, плагин не может быть удалён с помощью UNINSTALL SONAME или UNINSTALL PLUGIN во время работы сервера.
    • Для получения дополнительной информации см. Обзор плагинов: Настройка активации плагина при запуске сервера.
  • Командная строка: --gssapi=value
  • Тип данных: enumerated
  • Значение по умолчанию: ON
  • Допустимые значения: OFF, ON, FORCE, FORCE_PLUS_PERMANENT
  • Введено: MariaDB 10.1.11

Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/authentication-plugin-gssapi/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API