Aqui está a configuração: deixei o MySQL despejar tabelas /tmp
(elas contêm apenas números, sem dados reais) para o PHP coletar e processar. Depois disso, os arquivos temporários não são mais necessários, então eu os excluo com PHP ( unlink
).
Claro, o SELinux não gosta disso. Posso configurar /tmp
bem para o MySQL ler/gravar e o PHP ler/gravar a partir dele, mas quando o PHP deseja excluir o arquivo criado pelo MySQL, ele não pode. Achei que poderia ter a ver com a 'parte pegajosa' do /tmp
, mas isso não faz diferença.
Eu realmente não consigo encontrar uma solução adequada para este problema, a maioria das soluções aborda a questão de tornar os diretórios legíveis/graváveis para PHP (ou, o usuário httpd), não excluindo os arquivos de outra pessoa.
BTW: se eu desligar o SELinux, o PHP excluirá os arquivos sem problemas. Portanto, é definitivamente algo que preciso mudar no que diz respeito ao SELinux, mas qual seria a melhor abordagem?
Responder1
De acordo com meu comentário: resolvi isso aproveitando o audit2allow
.
- Procure
/var/log/audit/audit.log
a regra ofensiva (usei o nome do arquivo que o MySQL havia escrito) - Canalize a regra
audit2allow
e revise-a:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
- Saí
allow httpd_t mysqld_tmp_t:file unlink;
da etapa 2, então parecia exatamente o que eu procurava. Com esse resultado, criei um novo módulo:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp
. Isso gera um arquivo chamadotmp.pp
. - Importe o arquivo do módulo:
semodule -i tmp.pp