¿Cómo permito conexiones MySQL a través de SELinux?

21

Por una vez, me gustaría dejar SELinux ejecutándose en un servidor por la supuesta mayor seguridad.
Por lo general, desactivo SELinux para que todo funcione.
¿Cómo le digo a SELinux que permita conexiones MySQL?
Lo más que he encontrado en la documentación es esta línea de mysql.com:

Si está ejecutando bajo Linux y Linux con seguridad mejorada (SELinux) está habilitado, asegúrese de haber deshabilitado la protección SELinux para el proceso mysqld.

wow ... eso es realmente útil.

xivix
fuente
1
Proporcione toda la siguiente información para que tengamos la oportunidad de ayudarlo. 1. Distro y versión de Linux, 2. Versión de MySQL y fuente de instalación, 3. Entradas de registro AVC desde una conexión denegada, 4. Registros relevantes de MySQL, si los hay 5. La salida de getsebool -a | grep mysql6. Los pasos exactos que ha tomado para reproducir esto
hobodave

Respuestas:

40

Para comprobar SELinux

sestatus

Para ver qué indicadores se establecen en los procesos httpd

getsebool -a | grep httpd

Para permitir que Apache se conecte a una base de datos remota a través de SELinux

setsebool httpd_can_network_connect_db 1

La opción Usar -P hace que el cambio sea permanente. Sin esta opción, el booleano se restablecería a 0 al reiniciar.

setsebool -P httpd_can_network_connect_db 1
Punjab
fuente
3
parece ser necesario cuando se conecta a través de 127.0.0.1 loopback también?
Devin Ceartas
@Devin, definitivamente.
e18r
2
Si desea permitir que los usuarios se conecten al servidor mysql local, también debe activar el booleano selinuxuser_mysql_connect_enabled.
Anton Makovetsky
setsebool -P httpd_can_network_connect 1También puede ser necesario. Esto se sugirió en mis registros al ejecutar ausearch -m avc -ts today | audit2whycomo se sugiere en un comentario de vnix27.
sitio
2

¿Le da un error? ¿Qué sabor de linux estás usando? El contexto de seguridad es un buen lugar para comenzar si recibe un error. ls -Z le dará contexto ... Pero su pregunta es muy vaga.


fuente
Me estoy conectando desde una ventana de Windows. No hay error ... la conexión se rechaza y la página agota el tiempo de espera. Sé que si apago selinux todo estará bien.
Como la conexión proviene de un cuadro de Windows, ls -Z solo me da información sobre los archivos en el directorio en el que estoy en el cuadro de Linux.
En mi pregunta anterior, cité una referencia de mysql ... que decía deshabilitar la protección de selinux para el proceso de mysqld ... pero no dice cómo hacerlo :( Tampoco puedo averiguar cómo.
¿Algo en los registros de la caja de Linux? selinux puede evitar que httpd realice una conexión de socket ...
Nada en los mensajes o registros seguros ... ¿hay algún registro particular que tengas en mente?
1

El ausearchcomando puede ayudar a encontrar el registro de errores.

vnix27
fuente
1
ausearch -m avc -ts today | audit2why, el comando puede sugerir una solución
vnix27
1

También puede crear una política local:

"Puede generar un módulo de política local para permitir este acceso. Permita este acceso por ahora ejecutando:"

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

semodule -i mypol.pp

o habilitar globalmente para la sesión real:

setsebool httpd_can_network_connect_db 1

o permanente:

setsebool -P httpd_can_network_connect_db 1
Raffaello
fuente