So sieht das Setup aus: Ich lasse MySQL Tabellen ausgeben /tmp
(sie enthalten nur Zahlen, keine echten Daten), damit PHP sie abholen und verarbeiten kann. Danach werden die temporären Dateien nicht mehr benötigt, also lösche ich sie mit PHP ( unlink
).
Natürlich mag SELinux das nicht. Ich kann /tmp
MySQL problemlos zum Lesen/Schreiben einrichten und PHP zum Lesen/Schreiben, aber wenn PHP die von MySQL erstellte Datei löschen möchte, kann es das nicht. Ich dachte, es könnte mit dem „Sticky Bit“ auf zu tun haben /tmp
, aber das macht keinen Unterschied.
Ich kann für dieses Problem keine richtige Lösung finden. Bei den meisten Lösungen geht es darum, Verzeichnisse für PHP (oder den httpd-Benutzer) lesbar/beschreibbar zu machen, und nicht darum, die Dateien anderer zu löschen.
Übrigens: Wenn ich SELinux ausschalte, löscht PHP die Dateien problemlos. Ich muss also definitiv etwas an SELinux ändern, aber was wäre der beste Ansatz?
Antwort1
Gemäß meinem Kommentar: Ich habe es durch Hebelwirkung gelöst audit2allow
.
- Suchen Sie
/var/log/audit/audit.log
nach der fehlerhaften Regel (ich habe den Dateinamen der von MySQL geschriebenen Datei verwendet) - Leiten Sie die Regel weiter an
audit2allow
und überprüfen Sie sie:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
- Ich habe es
allow httpd_t mysqld_tmp_t:file unlink;
aus Schritt 2 erhalten, also sah es genau so aus, wie ich es wollte. Mit diesem Ergebnis habe ich ein neues Modul erstellt:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp
. Dies erzeugt eine Datei namenstmp.pp
. - Importieren Sie die Moduldatei:
semodule -i tmp.pp