Spec-Zone.ru › MySQL 5.7

6.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 см. в разделе 6.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 см. в разделе 6.7.5 «Контекст порта TCP SELinux». Аналогичные проблемы доступа к портам могут возникнуть при включении функций MySQL, использующих порты, не определённые с необходимым контекстом. Дополнительные сведения см. в разделе 6.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-5.7-en/selinux-troubleshooting.html

Spec-Zone.ru

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