Как мне разрешить подключения MySQL через SELinux?

21

Я хотел бы на этот раз оставить SELinux запущенным на сервере для предполагаемой повышенной безопасности.
Я обычно отключаю SELinux, чтобы заставить что-либо работать.
Как мне сказать SELinux, чтобы разрешить подключения MySQL?
Самое большее, что я нашел в документации, это строка из mysql.com:

Если вы работаете под Linux и включена защита с повышенным уровнем безопасности (SELinux), убедитесь, что вы отключили защиту SELinux для процесса mysqld.

вау ... это действительно полезно

xivix
источник
1
Пожалуйста, предоставьте всю следующую информацию, чтобы мы могли помочь вам. 1. Дистрибутив и версия Linux, 2. Версия и источник установки MySQL, 3. Записи журнала AVC о запрещенном соединении, 4. Соответствующие журналы MySQL, если таковые имеются. 5. Вывод getsebool -a | grep mysql6. Точные шаги, которые вы предприняли, чтобы воспроизвести это
hobodave

Ответы:

40

Проверить SELinux

sestatus

Чтобы увидеть, какие флаги установлены в процессах httpd

getsebool -a | grep httpd

Чтобы разрешить Apache подключаться к удаленной базе данных через SELinux

setsebool httpd_can_network_connect_db 1

Использование опции -P делает изменение постоянным. Без этой опции логическое значение будет сброшено до 0 при перезагрузке.

setsebool -P httpd_can_network_connect_db 1
Пенджаб
источник
3
кажется необходимым при подключении через шлейф 127.0.0.1?
Девин Сеартас
@Devin, определенно.
e18r
2
Если вы хотите разрешить пользователям подключаться к локальному серверу mysql, вы также должны включить логическое значение selinuxuser_mysql_connect_enabled.
Антон Маковецкий
setsebool -P httpd_can_network_connect 1также может понадобиться Это было предложено в моих журналах, запустив, ausearch -m avc -ts today | audit2whyкак предложено в комментарии vnix27.
сайт
2

Вы получаете ошибку? Какой вкус Linux вы используете? Контекст безопасности - хорошее место для начала, если вы получаете ошибку. ls -Z даст контекст ... Но ваш вопрос очень расплывчатый.


источник
Я подключаюсь из окна окна. Там нет ошибки ... просто отказано в соединении и время ожидания страницы. Я знаю, если я выключу selinux, все будет хорошо.
так как соединение приходит из окна windows, ls -Z дает мне информацию только о файлах в любом каталоге, в котором я нахожусь на коробке linux.
В моем вопросе выше я процитировал ссылку на mysql ... в которой говорилось, что нужно отключить защиту selinux для процесса mysqld ... но там не сказано, как это сделать :( И я не могу узнать, как это сделать.
Что-нибудь в логах на коробке linux? selinux может помешать httpd установить сокет-соединение ...
Ничего в сообщениях или безопасных журналах ... есть какой-то конкретный журнал, который вы имели в виду?
1

Видимо, настройка selinux не тривиальна. Вы можете начать здесь .

setenforce 0

переводит selinux в разрешающий режим, где он разрешает все, кроме регистрации того, что разрешает. Перезагрузка или

setenforce 1

возвращается к блокировке того, что не разрешено политикой.

Ознакомьтесь с этими документами по политике Selinux для MySQL в Fedora .

Павел
источник
1

Вы уверены, что это selinux? Обычные соединения извне должны быть разрешены selinux. Так что это также может быть брандмауэр. Если у вас есть локальные сервисы, пытающиеся подключиться к mysqld, это нечто иное: http://docs.fedoraproject.org/en-US/Fedora/13/html/Managing_Confined_Services/sect-Managing_Confined_Services-MySQL-Booleans.html

AndreasM
источник
1

Команда ausearchможет помочь найти журнал ошибок.

vnix27
источник
1
ausearch -m avc -ts сегодня | aud2why, команда может предложить решение
vnix27
1

Вы также можете создать локальную политику:

«Вы можете сгенерировать модуль локальной политики, чтобы разрешить такой доступ. Разрешите этот доступ, выполнив:»

grep httpd /var/log/audit/audit.log | audit2allow -M mypol

semodule -i mypol.pp

или включить глобально для фактического сеанса:

setsebool httpd_can_network_connect_db 1

или постоянный:

setsebool -P httpd_can_network_connect_db 1
Raffaello
источник