SELinux: позволить Apache общаться с MySQL на CentOS

Итак, я заменил MySQL на /opt/chroot/mysql, и все работает нормально. Apache настроен нормально, а также работает нормально.

Я создал небольшой скрипт PHP, который подключается к MySQL Daemon, и настроил PHP так, чтобы используемый сокет по умолчанию был chroot. Когда SELinux отключен, скрипт может нормально подключаться. Однако, когда SELinux включен, сценарию не удается подключиться (с ошибкой 13), и журнал аудита сообщает мне, что SELinux отклонил запрос.

Каждый найденный мной учебник, посвященный этой проблеме, говорит мне отключить SELinux. Это не то, что я хочу сделать, поэтому, пожалуйста, не предлагайте это! Я хочу, чтобы решение работало, пока SELinux включен... Я предполагаю, что он должен существовать...

Я предполагаю, что мне, вероятно, придется изменить контексты SELinux для файлов mysql, но я не уверен, что нужно изменить их, чтобы это работало.

1 ответ

Решение

ОБНОВЛЕНИЕ 2

type = AVC msg = аудит (1318863312.959:435): avc: отказано { connectto } для pid=12472 comm="httpd" путь ="/opt/chroot/mysql/var/lib/mysql/mysql.sock" scontext=undefined_u:system_r:httpd_t:s0 tcontext= не определено_u: не определено_r: не определено_t:s0-s0:c0.c1023 tclass=unix_stream_socket

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

# grep httpd_t audit.log | audit2allow -m httpd > httpd.te
# checkmodule -M -m -o httpd.mod httpd.te
# semodule_package -m httpd.mod -o httpd.pp 
# semodule -i httpd.pp

Обратитесь к этой теме для более подробной информации.


ОБНОВИТЬ

  1. Бежать semanage Команда для добавления контекстного отображения для /opt/chroot/mysql/var/lib/mysql/:

    # semanage fcontext -a -t mysqld_db_t "/opt/chroot/mysql/var/lib/mysql(/.*)?"
    
  2. И использовать restorecon Команда для применения этого сопоставления контекста:

    # restorecon -Rv /opt/chroot/mysql/var/lib/mysql
    

Если вы подключаетесь через TCP/IP, попробуйте это:

# setsebool -P httpd_can_network_connect 1
Другие вопросы по тегам