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
Обратитесь к этой теме для более подробной информации.
ОБНОВИТЬ
Бежать
semanage
Команда для добавления контекстного отображения для/opt/chroot/mysql/var/lib/mysql/
:# semanage fcontext -a -t mysqld_db_t "/opt/chroot/mysql/var/lib/mysql(/.*)?"
И использовать
restorecon
Команда для применения этого сопоставления контекста:# restorecon -Rv /opt/chroot/mysql/var/lib/mysql
Если вы подключаетесь через TCP/IP, попробуйте это:
# setsebool -P httpd_can_network_connect 1