SELinux: Wie kann httpd das Löschen temporärer Dateien aus MySQL ermöglichen?

SELinux: Wie kann httpd das Löschen temporärer Dateien aus MySQL ermöglichen?

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 /tmpMySQL 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.

  1. Suchen Sie /var/log/audit/audit.lognach der fehlerhaften Regel (ich habe den Dateinamen der von MySQL geschriebenen Datei verwendet)
  2. Leiten Sie die Regel weiter an audit2allowund überprüfen Sie sie:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
  3. 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 namens tmp.pp.
  4. Importieren Sie die Moduldatei:semodule -i tmp.pp

verwandte Informationen