Плагин аутентификации — Unix-сокет
В MariaDB 10.4.3 и более поздних версиях плагин аутентификации unix_socket установлен по умолчанию и используется для учетной записи пользователя 'root'@'localhost' по умолчанию. Дополнительную информацию см. в разделе Аутентификация в MariaDB 10.4.
Плагин аутентификации unix_socket позволяет пользователю использовать учетные данные операционной системы при подключении к MariaDB через локальный файл Unix-соккета. Этот файл Unix-соккета определяется системной переменной socket.
Плагин аутентификации unix_socket работает, вызывая системный вызов getsockopt с параметром сокета SO_PEERCRED, который позволяет извлечь uid процесса, подключенного к сокету. Затем он получает имя пользователя, связанное с этим uid. После получения имени пользователя он аутентифицирует подключающегося пользователя как учетную запись MariaDB с тем же именем пользователя.
Плагин аутентификации unix_socket не подходит для множества пользователей Unix, обращающихся к одной учетной записи пользователя MariaDB.
Безопасность
Плагин аутентификации unix_socket — это механизм безопасности без паролей. Его безопасность зависит от уровня доступа к пользователю Unix, а не от сложности и секретности пароля. Поскольку безопасность отличается от паролей, необходимо учитывать сильные и слабые стороны, и они не одинаковы во всех установках.
Преимущества
- Доступ ограничен пользователем Unix, поэтому, например, пользователь
www-dataне может получить доступ кrootс помощью плагина аутентификацииunix_socket. - Нет пароля для брутфорса.
- Нет пароля, который может быть случайно раскрыт из-за ошибки пользователя, плохой безопасности резервных копий или плохой безопасности паролей в конфигурационных файлах.
- Безопасность пользователя Unix по умолчанию обычно высока, предотвращая удаленный доступ и попытки брутфорса паролей.
Недостатки
Надежность плагина аутентификации unix_socket фактически зависит от надежности безопасности пользователей Unix в системе. В большинстве случаев стандартная установка пользователя Unix является достаточно безопасной, однако бизнес-требования или неквалифицированное управление могут создать риски. Ниже приводится неисчерпывающий список потенциальных проблем с безопасностью пользователей Unix, которые могут возникнуть.
- Общие зоны доступа без блокировки экрана, где неавторизованный пользователь получает доступ к вошедшему пользователю Unix авторизованного пользователя.
- Разрешения sudo с широкими возможностями, предоставляющие пользователям доступ к выполнению команд от имени другого пользователя Unix.
- Скрипты, доступные для записи другими пользователями Unix, кроме пользователя Unix, которые выполняются (cron или напрямую) пользователем Unix.
- Веб-страницы, уязвимые для внедрения команд, где пользователь Unix, выполняющий веб-страницу, имеет повышенные привилегии в базе данных, которые не предназначались для использования.
- Ненадлежащая практика паролей пользователя Unix, включая слабые пароли, раскрытие паролей и повторное использование паролей в сочетании с уязвимостью/механизмом доступа неавторизованного пользователя для использования этой уязвимости.
- Слабые механизмы удаленного доступа и привилегии сетевых файловых систем.
- Ненадлежащее поведение пользователей, включая выполнение ненадежных скриптов и программного обеспечения.
В некоторых из этих сценариев пароль базы данных может предотвратить эти эксплойты безопасности, однако это устранит все преимущества плагина аутентификации unix_socket.
Отключение плагина
В MariaDB 10.4.3 и более поздних версиях плагин аутентификации unix_socket установлен по умолчанию, поэтому при необходимости его нужно отключить.
Плагин аутентификации unix_socket также установлен по умолчанию в новых установках, использующих пакеты .deb из стандартных репозиториев Debian в Debian 9 и более поздних версиях, и Ubuntu в Ubuntu 15.10 и более поздних версиях, поэтому при необходимости его нужно отключить. Дополнительную информацию см. в разделе Различия в MariaDB в Debian (и Ubuntu).
Плагин аутентификации unix_socket можно отключить, запустив сервер с параметром unix_socket установленным в значение OFF. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров option group option file. Например:
[mariadb] ... unix_socket=OFF
В качестве альтернативы, параметр unix_socket также можно установить в значение OFF, сочетая параметр с префиксом параметра disable option prefix. Например:
[mariadb] ... disable_unix_socket
Установка плагина
В MariaDB 10.4.3 и более поздних версиях плагин аутентификации unix_socket установлен по умолчанию, поэтому этот шаг можно пропустить.
Плагин аутентификации unix_socket также установлен по умолчанию в новых установках, использующих пакеты .deb из стандартных репозиториев Debian в Debian 9 и более поздних версиях, и Ubuntu в Ubuntu 15.10 и более поздних версиях, поэтому этот шаг можно пропустить. Дополнительную информацию см. в разделе Различия в MariaDB в Debian (и Ubuntu).
В других системах, хотя общая библиотека плагина распространяется с MariaDB по умолчанию как auth_socket.so, плагин фактически не устанавливается MariaDB по умолчанию. Существует два метода установки плагина с MariaDB.
Первый метод можно использовать для установки плагина без перезапуска сервера. Вы можете установить плагин динамически, выполнив INSTALL SONAME или INSTALL PLUGIN. Например:
INSTALL SONAME 'auth_socket';
Второй метод можно использовать для указания серверу загружать плагин при запуске. Плагин можно установить таким образом, указав параметры --plugin-load или --plugin-load-add. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров option group option file. Например:
[mariadb] ... plugin_load_add = auth_socket
Удаление плагина
Вы можете удалить плагин динамически, выполнив UNINSTALL SONAME или UNINSTALL PLUGIN. Например:
UNINSTALL SONAME 'auth_socket';
Если вы установили плагин, указав параметры --plugin-load или --plugin-load-add в соответствующей группе параметров сервера в файле параметров option group option file, то эти параметры следует удалить, чтобы предотвратить загрузку плагина при следующем перезапуске сервера.
Создание пользователей
Чтобы создать учетную запись пользователя с помощью CREATE USER, укажите имя плагина в предложении IDENTIFIED VIA. Например:
CREATE USER username@hostname IDENTIFIED VIA unix_socket;
Если у SQL_MODE нет параметра NO_AUTO_CREATE_USER заданным, вы также можете создать учетную запись пользователя с помощью GRANT. Например:
GRANT SELECT ON db.* TO username@hostname IDENTIFIED VIA unix_socket;
Переключение на аутентификацию по паролю
Иногда аутентификация по Unix-сокету не удовлетворяет вашим потребностям, поэтому может потребоваться переключить учетную запись пользователя обратно на аутентификацию по паролю. Это можно легко сделать, указав MariaDB использовать другой плагин аутентификации для учетной записи, выполнив инструкцию ALTER USER. Конкретный плагин аутентификации указывается с помощью предложения IDENTIFIED VIA. Например, если вы хотите переключиться на плагин аутентификации mysql_native_password, вы можете выполнить:
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;
SET PASSWORD = PASSWORD('foo');
Обратите внимание, что если ваша операционная система имеет скрипты, которые требуют доступа к MariaDB без пароля, это может нарушить работу этих скриптов. Вы можете исправить это, установив пароль в группе параметров [client] в вашем файле параметров /root/.my.cnf option file. Например:
[client] password=foo
Плагины аутентификации клиентов
Плагину аутентификации unix_socket не требуются какие-либо специфические плагины аутентификации клиентов. Он должен работать со всеми клиентами.
Поддержка в библиотеках клиентов
Плагину аутентификации unix_socket не требуется какая-либо специальная поддержка в библиотеках клиентов. Он должен работать со всеми библиотеками клиентов.
Пример
$ mysql -uroot MariaDB []> CREATE USER serg IDENTIFIED VIA unix_socket; MariaDB []> CREATE USER monty IDENTIFIED VIA unix_socket; MariaDB []> quit Bye $ whoami serg $ mysql --user=serg Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.2.0-MariaDB-alpha-debug Source distribution MariaDB []> quit Bye $ mysql --user=monty ERROR 1045 (28000): Access denied for user 'monty'@'localhost' (using password: NO)
В этом примере пользователь serg уже вошел в систему и имеет полный доступ к оболочке. Он уже прошёл аутентификацию в операционной системе, и его учетная запись MariaDB настроена на использование плагина аутентификации unix_socket, поэтому ему не нужно повторно проходить аутентификацию для базы данных. MariaDB принимает его учетные данные операционной системы и позволяет ему подключиться. Однако любая попытка подключения к базе данных как другому пользователю операционной системы будет отклонена.
Версии
| Версия | Статус | Введено |
|---|---|---|
| 1.0 | Стабильно | MariaDB 10.0.11 |
| 1.0 | Бета | MariaDB 5.2.0 |
Параметры
unix_socket
-
Описание: Управляет тем, как сервер должен обрабатывать плагин при запуске.
- Допустимые значения:
-
OFF- Отключает плагин без удаления из таблицыmysql.plugin. -
ON- Включает плагин. Если плагин не может быть инициализирован, сервер всё равно продолжит запуск, но плагин будет отключён. -
FORCE- Включает плагин. Если плагин не может быть инициализирован, сервер не запустится и выдаст ошибку. -
FORCE_PLUS_PERMANENT- Включает плагин. Если плагин не может быть инициализирован, сервер не запустится и выдаст ошибку. Кроме того, плагин нельзя удалить с помощьюUNINSTALL SONAMEилиUNINSTALL PLUGINво время работы сервера.
-
- Для получения дополнительной информации см. Обзор плагинов: Настройка активации плагинов при запуске сервера.
- Допустимые значения:
-
Командная строка:
--unix-socket=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-unix-socket/