SELinux: Permission denied nach Verschieben von Dateien
Nach dem Verschieben von Dateien meldet ein Dienst 'Permission denied', obwohl die Rechte stimmen? Der SELinux-Kontext fehlt, restorecon repariert ihn.
Aufwand:
ca. 10 Min.
Voraussetzung:
Terminal, sudo-Rechte
Das Symptom
Du hast eine Website, ein Zertifikat oder Datenbank-Dateien mit mv an ihren
neuen Platz geschoben, alle Rechte penibel mit chown und chmod gesetzt – und
der Dienst weigert sich weiter mit Permission denied. ls -l zeigt tadellose
Rechte, der Benutzer stimmt, und trotzdem: nichts. Im Audit-Log steht wieder eine
Zeile mit avc: denied.
Die „Layer 8“-Wahrheit
Unter SELinux entscheidet nicht nur, wem eine Datei gehört und wer sie lesen
darf, sondern auch, was sie laut Label sein soll. Jede Datei trägt einen
Kontext, und ein Dienst darf nur auf Objekte mit dem für ihn vorgesehenen Kontext
zugreifen. Der Haken: mv verschiebt die Datei samt ihrem alten Label. Kommt eine
Datei aus dem Home-Verzeichnis nach /var/www, schleppt sie ihren Home-Kontext
mit – und der Webserver, der brav nur Web-Kontexte anfassen darf, verweigert den
Dienst. Die klassischen Rechte können dabei bis ins Letzte stimmen; sie sind
schlicht nicht die Ebene, auf der es klemmt. restorecon setzt für den Pfad genau
das Label, das laut Policy dort gehört, und räumt damit auf, was mv
mitgeschleppt hat. Kein Abschalten, kein Umgehen – nur das richtige Etikett am
richtigen Ort. Wer stattdessen cp statt mv benutzt hätte, wäre dem Problem
übrigens von vornherein entgangen.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Bestätigen, dass SELinux aktiv ist
Zuerst klären, ob SELinux überhaupt durchgreift. Steht der Modus auf 'Enforcing', werden Kontext-Regeln erzwungen – dann ist ein falsches Label ein ernstzunehmender Verdächtiger:
getenforce
2.
Den aktuellen Kontext ansehen
Mit 'ls -Z' lässt sich das SELinux-Label der betroffenen Datei anzeigen. Weicht es sichtbar von dem ab, das gleichartige, funktionierende Dateien im selben Verzeichnis tragen, ist die Ursache gefunden:
ls -Z /var/www/html/
3.
Den vorgesehenen Kontext wiederherstellen
restorecon setzt für die Datei oder das Verzeichnis genau das Label, das die Policy für diesen Pfad vorsieht. Das -R arbeitet rekursiv durch Unterverzeichnisse, das -v zeigt jede vorgenommene Änderung – so bleibt nachvollziehbar, was korrigiert wurde:
sudo restorecon -Rv /var/www/html/
4.
Den Zugriff erneut testen
Nach dem Zurücksetzen des Kontexts den Dienst noch einmal ansprechen. Verschwindet die Meldung 'Permission denied', war tatsächlich nur das Label verrutscht – ohne dass SELinux dafür abgeschaltet werden musste. Für dauerhaft neue Pfade außerhalb der Standardorte lässt sich der Sollkontext zusätzlich mit semanage fcontext festschreiben, bevor man restorecon anwendet.
Häufige Fragen (FAQ)
?Die Dateirechte stimmen doch – warum trotzdem Permission denied?
Weil unter SELinux die klassischen Unix-Rechte nur die halbe Miete sind. Zusätzlich trägt jede Datei ein Sicherheitslabel, den SELinux-Kontext. Ein Webserver darf zum Beispiel nur Dateien mit einem passenden Web-Kontext ausliefern. Sind chmod und chown perfekt, aber das Label falsch, bleibt der Zugriff verwehrt – die Meldung 'Permission denied' verrät dabei nicht, dass diesmal das Label und nicht die Rechte schuld sind.
?Warum passiert das gerade nach dem Verschieben mit mv?
Weil mv das vorhandene Label mitnimmt, während cp am Ziel den dort vorgesehenen Kontext vergibt. Verschiebt man eine Datei aus dem Home-Verzeichnis nach /var/www, behält sie ihr Home-Label – und der Webserver darf sie nicht lesen. restorecon setzt für den Pfad den Kontext, der laut Policy dort gelten soll. Deshalb löst genau dieser Befehl das Rätsel, das mv angerichtet hat.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.
SELinux verweigert einem Dienst den Zugriff (AVC denial)? Statt dauerhaft setenforce 0 lieber das Audit-Log lesen und Kontext oder Boolean korrigieren.
OSLästigFailed to download metadata for repository
Nach der Installation von akmod-nvidia startet Fedora ohne Nvidia-Treiber? Oft ist das Kernelmodul beim Neustart noch nicht fertig gebaut. akmods baut es.
nginx liefert 502 Bad Gateway? Der Upstream antwortet nicht wie erwartet. So findest du Dienst-, Timeout- und Berechtigungsursachen und reparierst sie.