Spec-Zone.ru › MySQL 8.4

8.7.6 Устранение неполадок SELinux

Устранение неполадок SELinux обычно включает переключение SELinux в режим разрешения, повторное выполнение проблемных операций, проверку сообщений об отказе доступа в журнале аудита SELinux и возвращение SELinux в режим принудительного применения после решения проблем.

Чтобы избежать перевода всей системы в режим разрешения с помощью команды setenforce, можно разрешить выполнение только службы MySQL в режиме разрешения, поместив её домен SELinux (mysqld_t) в режим разрешения с помощью команды semanage:

semanage permissive -a mysqld_t

После завершения устранения неполадок используйте эту команду, чтобы вернуть домен mysqld_t в режим принудительного применения:

semanage permissive -d mysqld_t

SELinux записывает логи отказа операций в /var/log/audit/audit.log. Вы можете проверить отказы, найдя сообщения “denied”.

grep "denied" /var/log/audit/audit.log

В следующих разделах описываются некоторые распространенные области, где могут возникнуть проблемы, связанные с SELinux.

Контексты файлов

Если у каталога или файла MySQL неверный контекст SELinux, доступ может быть запрещён. Эта проблема может возникнуть, если MySQL настроен на чтение или запись в каталог или файл по умолчанию. Например, если вы настраиваете MySQL для использования каталога данных по умолчанию, в нём может отсутствовать ожидаемый контекст SELinux.

Попытка запуска службы MySQL в каталоге данных по умолчанию с неверным контекстом SELinux приводит к следующей ошибке запуска.

$> systemctl start mysql.service
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.

В этом случае сообщение об отказе “denial” записывается в /var/log/audit/audit.log:

$> grep "denied" /var/log/audit/audit.log
type=AVC msg=audit(1587133719.786:194): avc:  denied  { write } for  pid=7133 comm="mysqld"
name="mysql" dev="dm-0" ino=51347078 scontext=system_u:system_r:mysqld_t:s0
tcontext=unconfined_u:object_r:default_t:s0 tclass=dir permissive=0

Сведения о настройке правильного контекста SELinux для каталогов и файлов MySQL см. в разделе 8.7.4 «Контекст файла SELinux».

Доступ к портам

SELinux ожидает, что службы, такие как MySQL Server, будут использовать определённые порты. Изменение портов без обновления политик SELinux может привести к сбоям службы.

Тип порта mysqld_port_t определяет порты, на которых слушает MySQL. Если вы настраиваете MySQL Server на использование нестандартного порта, такого как порт 3307, и не обновляете политику для отражения изменения, MySQL не запустится:

$> systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.

В этом случае сообщение об отказе записывается в /var/log/audit/audit.log:

$> grep "denied" /var/log/audit/audit.log
type=AVC msg=audit(1587134375.845:198): avc:  denied  { name_bind } for  pid=7340
comm="mysqld" src=3307 scontext=system_u:system_r:mysqld_t:s0
tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=0

Сведения о настройке правильного контекста порта SELinux для MySQL см. в разделе 8.7.5 «Контекст TCP-порта SELinux». Аналогичные проблемы с доступом к портам могут возникнуть при включении функций MySQL, использующих порты, которые не определены с необходимым контекстом. Дополнительные сведения см. в разделе 8.7.5.2 «Настройка контекста TCP-порта для функций MySQL».

Изменения в приложениях

SELinux может не знать об изменениях в приложениях. Например, новая версия, расширение приложения или новая функция могут получить доступ к системным ресурсам способом, запрещённым SELinux, что приводит к отказу в доступе. В таких случаях можно использовать утилиту audit2allow для создания пользовательских политик, разрешающих доступ там, где он необходим. Обычно для создания пользовательских политик меняют режим SELinux на разрешающий, определяют сообщения об отказе доступа в журнале аудита SELinux и используют утилиту audit2allow для создания пользовательских политик, разрешающих доступ.

Сведения об использовании утилиты audit2allow см. в документации по SELinux вашей дистрибуции.

Если у вас возникли проблемы с доступом для MySQL, которые, по вашему мнению, должны решаться стандартными модулями политики SELinux для MySQL, откройте отчёт об ошибке в системе отслеживания ошибок вашей дистрибуции.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/selinux-troubleshooting.html

Spec-Zone.ru

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