linux-rhel-centos-fedora security selinux labeling restorecon filesystem

File Labeling & Context Management (Artikel 070)

Praxisleitfaden zur Verwaltung von SELinux-Dateilabels. Einsatz von restorecon, semanage und automatischem Relabeling zur Sicherstellung der Datenintegrität.

# SELinux File Labeling: Ordnung im Dateisystem halten

TL;DR / Management Summary Ein korrekt gelabeltes Dateisystem ist das Fundament von SELinux. Wenn Dateien die falschen “Etiketten” (Contexts) tragen, versagen Dienste oder Sicherheitsregeln greifen nicht. In diesem Modul lernen wir, wie Linux diese Labels in erweiterten Attributen (Extended Attributes) speichert, wie man Standard-Labels mit restorecon wiederherstellt und wie man das gesamte System neu labelt (Autorelabel).


# 1. Einführung & Architektur

Wo werden die Labels gespeichert?

SELinux-Kontexte sind keine normalen Dateiberechtigungen. Sie werden in den Extended Attributes (xattrs) des Dateisystems (XFS, Ext4) gespeichert.

# Der Labeling-Prozess

Wenn eine Datei erstellt wird, erbt sie standardmäßig den Kontext des übergeordneten Verzeichnisses. Die SELinux-Policy definiert jedoch für fast jeden Systempfad einen “Soll-Zustand” (File Context Database).

graph TD
    A[Policy Database /etc/selinux/targeted/...] --> B[Soll-Zustand: /var/www -> httpd_sys_content_t]
    C[File System /var/www] --> D[Ist-Zustand: Extended Attribute]
    E[Tool: restorecon] -->|Compare| B
    E -->|Update| D

# 2. Standard-Labels wiederherstellen

Der wichtigste Befehl: restorecon.

Wenn Sie Dateien verschieben (mv), behalten sie ihr altes Label. Dies führt oft zu Problemen.

# Rekursives Wiederherstellen

# -R: Rekursiv, -v: Zeige Änderungen an
sudo restorecon -Rv /var/www/html

# Trockenübung (Dry-Run)

Prüfen Sie, was geändert würde, ohne es zu tun:

sudo restorecon -Rvn /etc

# 3. Die File-Context Datenbank verwalten

Eigene Regeln festlegen.

Mit semanage fcontext definieren wir neue Standards in der Policy-Datenbank.

# Beispiel: Custom Log-Verzeichnis

# 1. Regel definieren (Regex für alle Unterordner)
sudo semanage fcontext -a -t httpd_log_t "/opt/myapp/logs(/.*)?"

# 2. Datenbank synchronisieren (Labels auf Disk schreiben)
sudo restorecon -Rv /opt/myapp/logs

# 4. Day-2 Operations: Das gesamte System neu labeln

Der ‘Reset’-Knopf für SELinux.

Manchmal sind die Labels auf dem gesamten System durcheinander (z.B. nach Deaktivierung und Re-Aktivierung von SELinux).

# Autorelabel triggern

Erstellen Sie eine versteckte Datei im Root-Verzeichnis und starten Sie neu:

sudo touch /.autorelabel
sudo reboot

Zeitaufwand: Das Relabeling findet während des Bootvorgangs statt. Bei großen Festplatten mit Millionen von Dateien kann dies 15-30 Minuten dauern, in denen der Server nicht erreichbar ist!


# 5. Troubleshooting & “War Stories”

Praxistipps.

# Story 1: “Der Backup-Restore Fehler”

Symptom: Nach dem Zurückspielen eines Backups mit tar startet der SSH-Dienst nicht mehr (“Permission Denied” auf Host-Keys). Ursache: Das tar-Archiv wurde ohne das Flag --selinux oder --xattrs erstellt. Die Labels sind verloren gegangen. Lösung: restorecon -Rv /etc/ssh.

# Story 2: “Labels auf NFS-Mounts”

Symptom: Ein NFS-Share wird gemountet, aber ls -Z zeigt nur nfs_t für alle Dateien. Individuelle Labels funktionieren nicht. Ursache: Standard-NFS unterstützt keine Extended Attributes. Lösung: Mounten Sie den Share mit einem festen Kontext für alle Dateien (Context Mount):

mount -t nfs -o context="system_u:object_r:httpd_sys_content_t:s0" server:/path /mnt/data

# 6. Fazit & Empfehlung

  • Verschieben vs. Kopieren: cp erstellt neue Dateien (erbt neues Label), mv verschiebt Inodes (behält altes Label). Nutzen Sie nach mv immer restorecon.
  • Werkzeuge: Nutzen Sie matchpathcon <pfad>, um schnell zu prüfen, welches Label die Policy für diesen Pfad vorsieht.
  • Automatisierung: In Ansible-Playbooks sollten Sie immer den selinux Typ bei file oder copy Tasks angeben oder am Ende einen command: restorecon einbauen.

# Anhang: Cheatsheet

Aufgabe Befehl
File Kontext prüfen matchpathcon /pfad/zu/datei
Labels rekursiv fixen restorecon -Rv /pfad
Neuen Standard setzen semanage fcontext -a -t <typ> <regex>
Liste aller Pfad-Regeln semanage fcontext -l
Extended Attributes sehen getfattr -n security.selinux <file>