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
restoreconwiederherstellt 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:
cperstellt neue Dateien (erbt neues Label),mvverschiebt Inodes (behält altes Label). Nutzen Sie nachmvimmerrestorecon. - 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
selinuxTyp beifileodercopyTasks angeben oder am Ende einencommand: restoreconeinbauen.
# 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> |