Плагин аутентификации — PAM
Плагин аутентификации pam позволяет MariaDB перенаправлять аутентификацию пользователей на фреймворк модулей аутентификации (PAM) системы. PAM — это фреймворк аутентификации, используемый в Linux, FreeBSD, Solaris и других Unix-подобных операционных системах.
Примечание: Windows не поддерживает PAM, поэтому плагин аутентификации pam не поддерживает Windows. Однако можно использовать клиент MariaDB на Windows для подключения к серверу MariaDB, установленному в Unix-подобной операционной системе и настроенному для использования плагина аутентификации pam. Пример см. в блоге: MariaDB: Улучшение безопасности с двухэтапной проверкой подлинности.
Сценарии использования
PAM позволяет реализовать различные сценарии аутентификации различной сложности. Например,
- Аутентификация с использованием паролей из
/etc/shadow(как правило, это то, что делает стандартная конфигурация PAM). См. модуль PAM pam_unix. - Аутентификация с использованием LDAP. См. модуль PAM pam_ldap.
- Аутентификация с использованием Active Directory Майкрософт. См. модули PAM pam_lsass, pam_winbind и pam_centrifydc.
- Аутентификация с использованием одноразовых паролей (даже с подтверждением по SMS!). См. модули PAM pam_google_authenticator и pam_securid.
- Аутентификация с использованием ключей SSH. См. модуль PAM pam_ssh.
- Сопоставление пользователей и групп. См. модуль PAM pam_user_map.
- Комбинирование различных модулей аутентификации интересными способами в службе PAM. См. настройка службы PAM.
- Сброс паролей.
- Ограничение доступа по времени, дате, дню недели и т. д. См. модуль PAM pam_time.
- Регистрация каждой попытки входа.
- и так далее, список не является исчерпывающим.
Установка плагина
Библиотека плагина аутентификации pam предоставляется в бинарных пакетах во всех выпусках Linux.
Хотя общая библиотека плагина по умолчанию распространяется с MariaDB, сам плагин по умолчанию не устанавливается MariaDB. Существует два метода установки плагина с MariaDB.
Первый метод можно использовать для установки плагина без перезапуска сервера. Плагин можно установить динамически, выполнив INSTALL SONAME или INSTALL PLUGIN. Например:
INSTALL SONAME 'auth_pam';
Второй метод позволяет указать серверу загружать плагин при запуске. Плагин можно установить таким образом, используя опции --plugin-load или --plugin-load-add. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе опций сервера в группе опций в файле опций. Например:
[mariadb] ... plugin_load_add = auth_pam
Установка плагина v1
Начиная с MariaDB 10.4.0, общая библиотека auth_pam фактически относится к версии 2.0 плагина аутентификации pam. MariaDB 10.4.0 и более поздние версии также предоставляют версию 1.0 плагина в виде общей библиотеки auth_pam_v1.
В MariaDB 10.4.0 и более поздних версиях, если вам нужно установить версию 1.0 плагина аутентификации вместо версии 2.0, то вы можете сделать это. Например, с помощью INSTALL SONAME или INSTALL PLUGIN:
INSTALL SONAME 'auth_pam_v1';
Или указав в соответствующей группе опций сервера в группе опций в файле опций:
[mariadb] ... plugin_load_add = auth_pam_v1
Удаление плагина
Вы можете удалить плагин динамически, выполнив UNINSTALL SONAME или UNINSTALL PLUGIN. Например:
UNINSTALL SONAME 'auth_pam';
Если вы установили плагин с помощью опций --plugin-load или --plugin-load-add в соответствующей группе опций сервера в файле опций, то эти опции должны быть удалены, чтобы плагин не загружался при следующем перезапуске сервера.
Удаление плагина v1
Если вы установили версию 1.0 плагина аутентификации, вы можете удалить ее, выполнив аналогичную команду для auth_pam_v1. Например:
UNINSTALL SONAME 'auth_pam_v1';
Настройка PAM
Плагин аутентификации pam сообщает MariaDB делегировать аутентификацию фреймворку аутентификации PAM. Способ выполнения аутентификации зависит от конфигурации PAM.
Настройка службы PAM
PAM разделен на services. Службы PAM настраиваются с помощью файлов конфигурации PAM. Обычно глобальный файл конфигурации PAM расположен по адресу /etc/pam.conf, а файлы конфигурации PAM на основе каталогов для отдельных служб расположены в /etc/pam.d/.
Если вы хотите использовать службу PAM под названием mariadb для вашей аутентификации MariaDB PAM, то файл конфигурации PAM для этой службы также будет называться mariadb, и он, как правило, будет расположен в /etc/pam.d/mariadb.
Например, вот минимальный файл конфигурации службы PAM, который выполняет простую аутентификацию паролем с использованием паролей UNIX:
auth required pam_unix.so audit account required pam_unix.so audit
Давайте разберем этот относительно простой файл конфигурации службы PAM.
Каждая строка файла конфигурации службы PAM имеет следующий общий формат:
тип управление путь-к-модулю аргументы-модуля
Вышеприведенный файл конфигурации службы PAM сообщает фреймворку аутентификации PAM, что для успешной аутентификации (т. е. тип=auth) требуется, чтобы модуль PAM pam_unix.so вернул успешный результат.
Вышеприведенный файл конфигурации службы PAM также сообщает фреймворку аутентификации PAM, что для аккаунта (т. е. тип=acct) будет требоваться, чтобы модуль PAM pam_unix.so вернул успешный результат.
PAM также поддерживает типы session и password, но плагин аутентификации pam MariaDB не поддерживает их.
Вышеприведенный файл конфигурации службы PAM также предоставляет аргумент модуля audit для модуля PAM pam_unix. В руководстве pam_unix указано, что этот аргумент модуля активирует экстремальную регистрацию отладки в syslog.
На большинстве систем можно найти множество других примеров файлов конфигурации служб PAM в каталоге /etc/pam.d/.
Настройка модуля pam_unix PAM
Если вы настроите PAM для использования модуля PAM pam_unix (как в приведенном выше примере), то на некоторых системах вы можете заметить, что это будет выполняться по умолчанию с ошибками, такими как следующие:
Apr 14 12:56:23 localhost unix_chkpwd[3332]: check pass; user unknown Apr 14 12:56:23 localhost unix_chkpwd[3332]: password check failed for user (alice) Apr 14 12:56:23 localhost mysqld: pam_unix(mysql:auth): authentication failure; logname= uid=991 euid=991 tty= ruser= rhost= user=alice
Проблема заключается в том, что на некоторых системах модулю PAM pam_unix требуется доступ к /etc/shadow для работы, и большинство систем разрешают доступ к этому файлу только root по умолчанию.
Более новые версии PAM не имеют этого ограничения, поэтому вы можете попробовать обновить вашу версию PAM, чтобы проверить, устранит ли это проблему.
Если это не сработает, вы можете обойти эту проблему, предоставив пользователю, который запускает mysqld, доступ к /etc/shadow. Например, если пользователь mysql запускает mysqld, то вы можете сделать следующее:
sudo groupadd shadow sudo usermod -a -G shadow mysql sudo chown root:shadow /etc/shadow sudo chmod g+r /etc/shadow
И затем вам необходимо перезапустить сервер.
В этом случае сервер должен иметь возможность читать /etc/shadow.
Начиная с MariaDB 10.4.0, плагин аутентификации pam использует оболочку setuid для выполнения проверок PAM, поэтому не должно потребоваться никаких специальных решений для выполнения привилегированных операций, таких как чтение /etc/shadow при использовании модуля PAM pam_unix. См. MDEV-7032 для получения дополнительной информации.
Создание пользователей
Подобно всем другим плагинам аутентификации, для создания пользователя в MariaDB, который использует плагин аутентификации pam, вы должны выполнить CREATE USER, указав имя плагина в пункте IDENTIFIED VIA. Например:
CREATE USER username@hostname IDENTIFIED VIA pam;
Если в SQL_MODE не задано NO_AUTO_CREATE_USER, то вы также можете создать пользователя таким образом с помощью GRANT. Например:
GRANT SELECT ON db.* TO username@hostname IDENTIFIED VIA pam;
Вы также можете указать имя службы PAM для MariaDB, предоставив ей USING предложение. Например:
CREATE USER username@hostname IDENTIFIED VIA pam USING 'mariadb';
Эта строка создаёт пользователя, который должен быть аутентифицирован с помощью плагина аутентификации pam используя имя службы PAM mariadb. Как упоминалось в предыдущем разделе, файл конфигурации этой службы обычно находится в /etc/pam.d/mariadb.
Если имя службы не указано, то плагин будет использовать mysql в качестве имени службы PAM по умолчанию.
Плагины аутентификации клиентов
Для клиентов, использующих libmysqlclient или MariaDB Connector/C библиотеки, MariaDB предоставляет два плагина аутентификации клиентов, совместимые с плагином аутентификации pam.
-
dialog -
mysql_clear_password
При подключении с помощью клиента или утилиты к серверу в качестве пользователя, который аутентифицируется с помощью плагина аутентификации pam, вам может потребоваться указать клиенту местоположение соответствующего плагина аутентификации клиента, задав параметр --plugin-dir. Например:
mariadb --plugin-dir=/usr/local/mysql/lib64/mysql/plugin --user=alice
Оба плагина аутентификации клиентов dialog и mysql_clear_password передают пароль на сервер в открытом тексте. Поэтому, когда вы используете плагин аутентификации pam, крайне важно шифровать подключения клиентов с помощью TLS, чтобы предотвратить доступ неавторизованных пользователей к паролям в открытом тексте.
dialog
Обычно плагин аутентификации pam использует плагин аутентификации клиента dialog для взаимодействия с пользователем. Этот плагин аутентификации клиентов позволяет MariaDB поддерживать произвольно сложные конфигурации PAM с обычными или одноразовыми паролями, challenge-response, несколькими вопросами или чем-либо ещё. При использовании библиотеки клиента MariaDB нет необходимости в установке или включении чего-либо — плагин аутентификации клиента dialog загружается библиотекой клиента полностью автоматически и прозрачно для приложения.
Плагин аутентификации клиента dialog был разработан MariaDB, поэтому клиенты и библиотеки клиентов MySQL, а также сторонние приложения, использующие библиотеки клиентов MySQL, не поддерживают плагин аутентификации клиента dialog по умолчанию. Если сервер укажет неподдерживаемому клиенту использовать плагин аутентификации клиента dialog, то клиент, скорее всего, выдаст ошибку, подобную следующей:
ERROR 2059 (HY000): Authentication plugin 'dialog' cannot be loaded: /usr/lib/mysql/plugin/dialog.so: cannot open shared object file: No such file or directory
Для некоторых библиотек или приложений эту проблему можно решить, скопировав dialog.so или dialog.dll из установки клиента MariaDB, совместимой с системой, в каталог плагина аутентификации клиента MySQL системы. Однако не все клиенты совместимы с плагином аутентификации клиента dialog, поэтому это может не сработать для каждого клиента.
Если ваш клиент не поддерживает плагин аутентификации клиента dialog, вам может потребоваться использовать плагин аутентификации клиента mysql_clear_password вместо него.
Плагин аутентификации клиента dialog передаёт пароль на сервер в открытом тексте. Поэтому, когда вы используете плагин аутентификации pam, крайне важно шифровать подключения клиентов с помощью TLS, чтобы предотвратить доступ неавторизованных пользователей к паролям в открытом тексте.
mysql_clear_password
Пользователи могут настроить плагин аутентификации pam использовать плагин аутентификации клиента mysql_clear_password вместо плагина аутентификации клиента dialog, настроив системную переменную pam_use_cleartext_plugin на сервере. Её можно установить в соответствующей группе опций сервера в файле опций группы опций в файле опций. Например:
[mariadb] ... pam_use_cleartext_plugin
Важно отметить, что плагин mysql_clear_password обладает ограниченными возможностями.
- Плагин аутентификации клиента
mysql_clear_passwordподдерживает только службы PAM, требующие аутентификации на основе пароля.
- Плагин аутентификации клиента
mysql_clear_passwordтакже поддерживает только службы PAM, которые задают пользователю единственный вопрос.
- Если служба PAM требует challenge-responses, нескольких вопросов или других аналогичных сложных схем аутентификации, то служба PAM несовместима с плагином аутентификации клиента
mysql_clear_password. В этом случае необходимо использовать плагин аутентификации клиента dialog.
Плагин аутентификации клиента mysql_clear_password передаёт пароль на сервер в открытом тексте. Поэтому, когда вы используете плагин аутентификации pam, крайне важно шифровать подключения клиентов с помощью TLS, чтобы предотвратить доступ неавторизованных пользователей к паролям в открытом тексте.
Совместимость с клиентами и библиотеками MySQL
Плагин аутентификации клиента mysql_clear_password похож на плагин аутентификации клиента MySQL mysql_clear_password.
Плагин аутентификации клиента mysql_clear_password совместим с клиентами MySQL и большинством библиотек клиентов MySQL, в то время как плагин аутентификации клиента dialog не всегда совместим с ними. Поэтому плагин аутентификации клиента mysql_clear_password наиболее полезен, если вам нужна некая совместимость с MySQL в вашей среде, но вы всё ещё хотите использовать плагин аутентификации pam.
Несмотря на то, что плагин аутентификации клиента mysql_clear_password совместим с клиентами MySQL и большинством библиотек клиентов MySQL, плагин аутентификации клиента mysql_clear_password может быть отключён по умолчанию этими клиентами и библиотеками. Например, командная строка клиента MySQL mysql имеет параметр --enable-cleartext-plugin, который должен быть установлен, чтобы использовать плагин аутентификации клиента mysql_clear_password. Например:
mysql --enable-cleartext-plugin --user=alice -p
Другие клиенты могут потребовать другие методы для включения плагина аутентификации. Например, MySQL Workbench имеет флажок с названием Enable Cleartext Authentication Plugin на вкладке Advanced на экране настройки подключения.
Для приложений, которые используют libmysqlclient MySQL, плагин аутентификации может быть включён путём установки параметра MYSQL_ENABLE_CLEARTEXT_PLUGIN с помощью функции mysql_options(). Например:
mysql_options(mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, 1);
Для совместимости с MySQL, MariaDB Connector/C также позволяет приложениям установить параметр MYSQL_ENABLE_CLEARTEXT_PLUGIN с помощью функции mysql_optionsv. Однако этот параметр не выполняет никаких действий в MariaDB Connector/C, потому что плагин аутентификации клиента mysql_clear_password всегда включён для клиентов и библиотек клиентов MariaDB.
Поддержка в библиотеках клиентов
Использование плагина с MariaDB Connector/C
MariaDB Connector/C поддерживает аутентификацию pam с помощью плагинов аутентификации клиентов, упомянутых в предыдущем разделе, начиная с MariaDB Connector/C 2.1.0, независимо от значения системной переменной pam_use_cleartext_plugin.
Использование плагина с MariaDB Connector/ODBC
MariaDB Connector/ODBC поддерживает аутентификацию pam с помощью плагинов аутентификации клиентов, упомянутых в предыдущем разделе, начиная с MariaDB Connector/ODBC 1.0.0, независимо от значения системной переменной pam_use_cleartext_plugin.
Использование плагина с MariaDB Connector/J
MariaDB Connector/J поддерживает аутентификацию pam v1 начиная с MariaDB Connector/J 1.4.0, независимо от значения системной переменной pam_use_cleartext_plugin.
MariaDB Connector/J поддерживает аутентификацию pam v2 начиная с MariaDB Connector/J 2.4.4, независимо от значения системной переменной pam_use_cleartext_plugin.
Использование плагина с MariaDB Connector/Node.js
MariaDB Connector/Node.js поддерживает аутентификацию pam начиная с MariaDB Connector/Node.js 0.7.0, независимо от значения системной переменной pam_use_cleartext_plugin.
Использование плагина с MySqlConnector for .NET
MySqlConnector for ADO.NET поддерживает аутентификацию pam начиная с MySqlConnector 0.20.0, но только если системная переменная pam_use_cleartext_plugin включена на сервере.
Ведение журнала
Ведение журнала модуля PAM
Ошибки и сообщения от модулей PAM обычно регистрируются с помощью демона syslog с помощью authpriv объекта. Чтобы определить конкретный файл журнала, в котором регистрируется authpriv объект, можно проверить rsyslog.conf.
В дистрибутивах Linux, таких как RHEL, CentOS, Fedora и аналогичных, стандартное расположение этих сообщений обычно /var/log/secure.
В дистрибутивах Linux, таких как Debian, Ubuntu и аналогичных, стандартное расположение этих сообщений обычно /var/log/auth.log.
Например, syslog может содержать сообщения, подобные следующим, когда подключаемый модуль аутентификации MariaDB pam настроен на использование модуля PAM pam_unix, а пользователь вводит неправильный пароль:
Jan 9 05:35:41 ip-172-30-0-198 unix_chkpwd[1205]: password check failed for user (foo) Jan 9 05:35:41 ip-172-30-0-198 mysqld: pam_unix(mariadb:auth): authentication failure; logname= uid=997 euid=997 tty= ruser= rhost= user=foo
Отладка регистрации подключаемых модулей аутентификации PAM
Подключаемый модуль аутентификации MariaDB pam также может регистрировать дополнительные подробные данные отладки в журнал ошибок. Это происходит только в том случае, если подключаемый модуль является отладочной сборкой и если pam_debug установлен.
Вывод выглядит так:
PAM: pam_start(mariadb, alice) PAM: pam_authenticate(0) PAM: conv: send(Enter PASSCODE:) PAM: conv: recv(123456789) PAM: pam_acct_mgmt(0) PAM: pam_get_item(PAM_USER) PAM: status = 0 user = ��\>
Настройка регистрации с pam_exec
Модуль PAM pam_exec можно использовать для реализации пользовательской регистрации. Это может быть очень полезно при отладке определённых проблем.
Например, сначала создайте скрипт, который записывает вывод журнала:
tee /tmp/pam_log_script.sh <<EOF
#!/bin/bash
echo "\${PAM_SERVICE}:\${PAM_TYPE} - \${PAM_RUSER}@\${PAM_RHOST} is authenticating as \${PAM_USER}"
EOF
chmod 0775 /tmp/pam_log_script.sh
Затем измените конфигурацию сервиса PAM, чтобы выполнить скрипт с помощью модуля PAM pam_exec. Например:
auth optional pam_exec.so log=/tmp/pam_output.txt /tmp/pam_log_script.sh auth required pam_unix.so audit account optional pam_exec.so log=/tmp/pam_output.txt /tmp/pam_log_script.sh account required pam_unix.so audit
Всякий раз, когда используется вышеуказанный сервис PAM, вывод скрипта будет записан в /tmp/pam_output.txt. Он может выглядеть примерно так:
*** Tue May 14 14:53:23 2019 mariadb:auth - @ is authenticating as alice *** Tue May 14 14:53:25 2019 mariadb:account - @ is authenticating as alice *** Tue May 14 14:53:28 2019 mariadb:auth - @ is authenticating as alice *** Tue May 14 14:53:31 2019 mariadb:account - @ is authenticating as alice
Сопоставление пользователей и групп
Даже при использовании подключаемого модуля аутентификации pam, учетная запись аутентифицируемого пользователя PAM всё равно должна существовать в MariaDB, и эта учётная запись должна иметь привилегии в базе данных. Создание этих учётных записей MariaDB и проверка правильности привилегий может быть трудоёмкой задачей. Чтобы уменьшить количество работы, некоторые пользователи хотели бы иметь возможность сопоставлять пользователя PAM с другим пользователем MariaDB. Например, пусть alice и bob — оба DBA. Было бы неплохо, если бы каждый из них мог войти в MariaDB со своим именем пользователя PAM и паролем, а MariaDB рассматривал бы их обоих как одного и того же пользователя dba. Таким образом, необходимо отслеживать только одну учётную запись MariaDB. Дополнительную информацию о том, как это сделать, см. в разделе Сопоставление пользователей и групп с PAM.
Модули PAM
Существует множество модулей PAM. Описанные ниже — те, которые чаще всего встречались в MariaDB.
pam_unix
Модуль PAM pam_unix предоставляет поддержку аутентификации паролей Unix. Это стандартный модуль PAM на большинстве систем.
Для получения учебного пособия по настройке аутентификации PAM и сопоставления пользователей или групп с помощью аутентификации Unix см. Настройка аутентификации PAM и сопоставления пользователей с помощью аутентификации Unix.
pam_user_map
Модуль PAM pam_user_map был разработан MariaDB для поддержки сопоставления пользователей и групп.
pam_ldap
Модуль PAM pam_ldap предоставляет поддержку аутентификации LDAP.
Для получения учебного пособия по настройке аутентификации PAM и сопоставления пользователей или групп с помощью аутентификации LDAP см. Настройка аутентификации PAM и сопоставления пользователей с помощью аутентификации LDAP.
Это также можно настроить для аутентификации Active Directory.
pam_sss
Модуль PAM pam_sss обеспечивает поддержку аутентификации с помощью System Security Services Daemon (SSSD).
Это можно настроить для аутентификации Active Directory.
pam_lsass
Модуль PAM pam_lsass предоставляет поддержку аутентификации Active Directory. Он предоставляется проектом PowerBroker Identity Services – Open Edition.
pam_winbind
Модуль PAM pam_winbind предоставляет поддержку аутентификации Active Directory. Он предоставляется модулем winbindd из набора инструментов samba.
Этот модуль PAM преобразует все предоставленные имена пользователей в нижний регистр. Отключить эту функциональность невозможно. Если вы не хотите быть вынужденными использовать имена пользователей только в нижнем регистре, вам может потребоваться настроить системную переменную pam_winbind_workaround. Дополнительную информацию см. в MDEV-18686.
pam_centrifydc
Модуль PAM pam_centrifydc предоставляет поддержку аутентификации Active Directory. Он интегрируется с коммерческим мостом Active Directory от Centrify.
pam_krb5
Модуль PAM pam_krb5 предоставляет поддержку аутентификации Kerberos.
Это можно настроить для аутентификации Active Directory.
pam_google_authenticator
Модуль PAM pam_google_authenticator предоставляет двухфакторную идентификацию с Google Authenticator. Он принадлежит открытому проекту Google google-authenticator-libpam. Модуль PAM должен работать с мобильными приложениями с открытым исходным кодом, разработанными проектами Google google-authenticator и google-authenticator-android, а также с закрытыми мобильными приложениями Google Authenticator, которые присутствуют в каждом магазине мобильных приложений.
Пример использования этого модуля PAM приведен в статье блога: MariaDB: Улучшение безопасности с двухэтапной проверкой.
pam_securid
Модуль PAM pam_securid предоставляет поддержку многофакторной аутентификации. Он входит в состав коммерческого набора инструментов RSA SecurID Suite.
Обратите внимание, что текущие версии этого модуля не являются безопасными для многопоточных сред, и поставщик официально не поддерживает этот продукт в MariaDB. См. MDEV-10361 по этому поводу. Однако модуль может работать с MariaDB 10.4.0 и выше.
pam_ssh
Модуль PAM pam_ssh обеспечивает аутентификацию с использованием ключей SSH.
pam_time
Модуль PAM pam_time предоставляет доступ, ограниченный по времени.
Известные проблемы
Проблемы с многопоточностью
MariaDB — многопоточная программа, что означает, что различные подключения одновременно выполняются в разных потоках. Текущие версии подключаемого модуля аутентификации MariaDB pam выполняют код модуля PAM в адресном пространстве сервера. Это означает, что все модули PAM, используемые с MariaDB, должны быть безопасными для многопоточных сред. В противном случае, если несколько клиентов пытаются авторизоваться с помощью одного и того же модуля PAM параллельно, может произойти неопределённое поведение. Например, модуль PAM pam_fprintd не безопасен для многопоточных сред, и если вы используете его с MariaDB, могут произойти сбои сервера.
Начиная с MariaDB 10.4.0, подключаемый модуль аутентификации pam изолирует код модуля PAM от адресного пространства сервера, поэтому даже те модули PAM, которые, как известно, не безопасны для многопоточных сред, не должны вызывать проблем с MariaDB. Дополнительную информацию см. в MDEV-15473.
Конфликты с проверкой паролей
При включённом подключаемом модуле проверки паролей, MariaDB не позволит создать учётную запись, если подключаемый модуль проверки паролей укажет, что пароль учётной записи слишком слабый. Это создаёт проблему для учётных записей, которые авторизуются с помощью подключаемого модуля аутентификации pam, так как MariaDB не знает пароль пользователя. Когда пользователь пытается создать учётную запись, которая авторизуется с подключаемым модулем аутентификации pam, подключаемый модуль проверки паролей выдаст ошибку, даже при установленном strict_password_validation=OFF.
Обходным путём является удаление подключаемого модуля проверки паролей с помощью UNINSTALL PLUGIN, затем создание учётной записи и повторная установка подключаемого модуля проверки паролей с помощью INSTALL PLUGIN.
Например:
INSTALL PLUGIN simple_password_check SONAME 'simple_password_check'; Query OK, 0 rows affected (0.002 sec) SET GLOBAL strict_password_validation=OFF; Query OK, 0 rows affected (0.000 sec) CREATE USER ''@'%' IDENTIFIED VIA pam USING 'mariadb'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements UNINSTALL PLUGIN simple_password_check; Query OK, 0 rows affected (0.000 sec) CREATE USER ''@'%' IDENTIFIED VIA pam USING 'mariadb'; Query OK, 0 rows affected (0.000 sec) INSTALL PLUGIN simple_password_check SONAME 'simple_password_check'; Query OK, 0 rows affected (0.001 sec)
Начиная с MariaDB 10.4.0, учётные записи, которые авторизуются с помощью плагина аутентификации pam, должны быть освобождены от проверок валидности паролей. Дополнительную информацию см. в MDEV-12321 и MDEV-10457.
SELinux
SELinux может вызывать проблемы при использовании плагина аутентификации pam. Например, использование pam_unix с плагином аутентификации pam при включённом SELinux иногда приводит к ошибкам SELinux, связанным с unix_chkpwd, например:
Apr 14 12:37:59 localhost setroubleshoot: Plugin Exception restorecon_source Apr 14 12:37:59 localhost setroubleshoot: SELinux is preventing /usr/sbin/unix_chkpwd from execute access on the file . For complete SELinux messages. run sealert -l c56fe6e0-c78c-4bdb-a80f-27ef86a1ea85 Apr 14 12:37:59 localhost python: SELinux is preventing /usr/sbin/unix_chkpwd from execute access on the file . ***** Plugin catchall (100. confidence) suggests ************************** If you believe that unix_chkpwd should be allowed execute access on the file by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # grep unix_chkpwd /var/log/audit/audit.log | audit2allow -M mypol # semodule -i mypol.pp
Иногда такие проблемы можно решить, обновив политики SELinux системы. Вы можете обновить политики с помощью audit2allow. Дополнительную информацию см. в разделе SELinux: Генерация политик SELinux с помощью audit2allow.
Если плагин аутентификации pam вообще не работает с SELinux, то может помочь полное отключение SELinux. См. SELinux: Изменение режима SELinux для получения информации о том, как это сделать.
Перерасход памяти
В MariaDB 10.4 и более поздних версиях могут возникнуть проблемы с авторизацией с сообщением в журнале ошибок MariaDB:
pam: cannot exec /usr/lib64/mysql/plugin/auth_pam_tool_dir/auth_pam_tool (errno: 12 "Cannot allocate memory")
Это может произойти на конфигурациях операционных систем, настроенных на предотвращение перерасхода памяти. Когда процесс сервера MariaDB запускает вспомогательный процесс auth_pam_tool, в течение короткого промежутка времени новый процесс наследует память процесса MariaDB, прежде чем освободить эту память и выполнить новую команду. При конфигурации сервера MariaDB на использование более 50% ОЗУ сервера (что обычно характерно для выделенных серверов баз данных) это дублирование приведёт к ситуации с перерасходом памяти.
Начиная с MariaDB 10.4.25, MariaDB 10.5.16, MariaDB 10.6.8 и MariaDB 10.7.4, мы перешли к использованию posix_spawn() вместо классического fork();exec(), чтобы предотвратить это, но системы со старыми версиями glibc до 2.26 всё ещё используют fork();exec() для реализации posix_spawn() внутри и поэтому всё ещё подвержены влиянию; например, это по-прежнему актуально для RedHat Enterprise Linux 7.
Для решения этой проблемы можно:
- изменить настройку ядра
vm.overcommit_memoryдля разрешения перерасхода памяти - установить более старую версию плагина
auth_pam_v1, которая не запускает вспомогательный процесс (но может столкнуться с проблемами прав доступа к файлам или многопоточностью с некоторыми модулями PAM)
См. также MDEV-26212 и MDEV-30734
Учебники
Полезными могут быть следующие учебники по PAM:
- Настройка PAM аутентификации и сопоставления пользователей с использованием Unix аутентификации
- Настройка PAM аутентификации и сопоставления пользователей с использованием LDAP аутентификации
Версии
| Версия | Статус | Введено |
|---|---|---|
| 2.0 | Бета | MariaDB 10.4.0 |
| 1.0 | Стабильная | MariaDB 10.0.10 |
| 1.0 | Бета | MariaDB 5.2.10 |
Системные переменные
pam_debug
-
Описание: Включает подробные логи отладки в журнал ошибок для всей обработки аутентификации плагином.
- Эта системная переменная доступна только при отладке сборки плагина.
-
Командная строка:
--pam-debug - Область действия: Глобальная
- Динамическая: Нет
-
Тип данных:
boolean -
Значение по умолчанию:
OFF - Введено: MariaDB 10.2.2, MariaDB 10.1.17
pam_use_cleartext_plugin
- Описание: Использовать плагин аутентификации клиента mysql_clear_password вместо плагина аутентификации клиента dialog. Это может потребоваться по соображениям совместимости, но он поддерживает только простые конфигурации PAM, которые не требуют никакого ввода, кроме пароля.
-
Командная строка:
--pam-use-cleartext-plugin - Область действия: Глобальная
- Динамическая: Нет
-
Тип данных:
boolean -
Значение по умолчанию:
OFF - Введено: MariaDB 10.1.1, MariaDB 5.5.32
pam_winbind_workaround
- Описание: Настраивает плагин аутентификации для сравнения имени пользователя, предоставленного клиентом, с именем пользователя, возвращённым модулем PAM, без учёта регистра. Это может потребоваться, если вы используете модуль PAM pam_winbind, который, как известно, преобразует все имена пользователей в нижний регистр и который не позволяет отключить это поведение.
-
Командная строка:
--pam-winbind-workaround - Область действия: Глобальная
- Динамическая: Да
-
Тип данных:
boolean -
Значение по умолчанию:
OFF - Введено: MariaDB 10.4.5, MariaDB 10.3.15, MariaDB 10.2.24, MariaDB 10.1.39
Параметры
pam
-
Описание: Управляет тем, как сервер должен обрабатывать плагин при запуске сервера.
- Допустимые значения:
-
OFF- Отключает плагин, не удаляя его из таблицы mysql.plugins. -
ON- Включает плагин. Если плагин невозможно инициализировать, сервер всё равно продолжит запуск, но плагин будет отключён. -
FORCE- Включает плагин. Если плагин невозможно инициализировать, сервер завершит запуск с ошибкой. -
FORCE_PLUS_PERMANENT- Включает плагин. Если плагин невозможно инициализировать, сервер завершит запуск с ошибкой. Кроме того, плагин нельзя удалить с помощью UNINSTALL SONAME или UNINSTALL PLUGIN во время работы сервера.
-
- Дополнительную информацию см. в Обзоре плагинов: Настройка активации плагина при запуске сервера.
- Допустимые значения:
-
Командная строка:
--pam=value -
Тип данных:
enumerated -
Значение по умолчанию:
ON -
Допустимые значения:
OFF,ON,FORCE,FORCE_PLUS_PERMANENT
См. также
© 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-pam/