Aquí está la configuración: dejo que MySQL descargue tablas /tmp
(solo contienen números, no datos reales) para que PHP las recoja y las procese. Después de esto, los archivos temporales ya no son necesarios, así que los elimino con PHP ( unlink
).
Por supuesto, a SELinux no le gusta esto. Puedo configurar /tmp
bien para que MySQL lea/escriba y PHP para leer/escribir, pero cuando PHP quiere eliminar el archivo creado por MySQL, no puede. Pensé que podría tener que ver con la "parte adhesiva" /tmp
, pero eso no hace ninguna diferencia.
Realmente no puedo encontrar una solución adecuada para este problema, la mayoría de las soluciones abordan el problema de hacer que los directorios sean legibles/escribibles en PHP (o, es decir, el usuario httpd), sin eliminar los archivos de otra persona.
Por cierto: si desactivo SELinux, PHP eliminará los archivos sin problemas. Definitivamente es algo que tengo que cambiar en SELinux, pero ¿cuál sería el mejor enfoque?
Respuesta1
Según mi comentario: lo resolví aprovechando audit2allow
.
- Escanee
/var/log/audit/audit.log
en busca de la regla infractora (usé el nombre del archivo que MySQL había escrito) - Canalice la regla
audit2allow
y revísela:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
- Obtuve
allow httpd_t mysqld_tmp_t:file unlink;
el paso 2, por lo que se veía exactamente como lo que buscaba. Con ese resultado, creé un nuevo módulo:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp
. Esto genera un archivo llamadotmp.pp
. - Importe el archivo del módulo:
semodule -i tmp.pp