Linux/SELinux/11 Fehlerbehebung
SELinux/11 Fehlerbehebung
Beschreibung
- Vorgänge, bei einer Zugriffsverweigerung
- Häufige Ursachen für Probleme
- Informationen zur korrekten Kennzeichnung finden
- Analyse von SELinux-Verweigerungen
- Erstellen benutzerdefinierter Policy-Module
- Vorgänge, bei einer Zugriffsverweigerung
SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert
- Dieser Cache wird als Access Vector Cache (AVC) bezeichnet
- Wenn SELinux den Zugriff verweigert, werden Verweigerungsmeldungen protokolliert
- Diese Verweigerungen werden auch als „AVC-Verweigerungen“ bezeichnet
- Protokolle
... und je nach den laufenden Daemons an unterschiedlichen Orten protokolliert:
| Daemon | Protokollort |
|---|---|
| auditd aktiv | /var/log/audit/audit.log |
| auditd aus; rsyslogd ein | /var/log/messages |
| setroubleshootd, rsyslogd und auditd ein | /var/log/audit/audit.log
|
Wenn Sie das X Window System ausführen, die Pakete setroubleshoot und setroubleshoot-server installiert haben und die Daemons setroubleshootd und [[auditd] laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:
Ein Klick auf Anzeigen zeigt eine detaillierte Analyse der Gründe für die Zugriffsverweigerung durch SELinux sowie eine mögliche Lösung zur Gewährung des Zugriffs an
- Wenn Sie das X Window System nicht verwenden, ist es weniger offensichtlich, wenn der Zugriff durch SELinux verweigert wird
Beispielsweise können Benutzer, die Ihre Website besuchen, eine Fehlermeldung ähnlich der folgenden erhalten:
Zugriff verweigert
Sie haben keine Berechtigung, auf ‚'Dateiname‘' auf diesem Server zuzugreifen
In solchen Situationen sollten Sie, sofern DAC-Regeln (Standard-Linux-Berechtigungen) den Zugriff erlauben, die Dateien
- /var/log/messages
- /var/log/audit/audit.log
auf Fehlermeldungen wie
- „SELinux is preventing“
- „denied“
überprüfen
Dies können Sie tun, indem Sie als Root-Benutzer die folgenden Befehle ausführen:
sudo grep „SELinux is preventing“ /var/log/messages sudo grep „denied“ /var/log/audit/audit.log
Analyse
Linux/SELinux/11 Fehlerbehebung/Analyse
Lösungen
Linux/SELinux/11 Fehlerbehebung/Lösungen
Eigene Policy-Module mit audit2allow
- Prinzip
Wenn Standardlösungen (wie Booleans oder Dateikontexte) nicht ausreichen, analysiert audit2allow die Audit-Protokolle und generiert automatisch Regeln, um zuvor blockierte Aktionen systemweit zuzulassen.
- Installation
Unter Debian ist das Tool Teil der Python-Utilities für SELinux:
sudo apt install policycoreutils-python-utils
- Analyse
Prüfen Sie zunächst die menschenlesbare Erklärung der Blockaden, um die Ursache zu verstehen:
sudo audit2allow -w -a
- Modul generieren
Filtern Sie die Logs gezielt nach dem betroffenen Dienst (z. B. nginx), um keine unerwünschten Rechte freizugeben, und erstellen Sie das Modul:
sudo grep mein_prozess /var/log/audit/audit.log | audit2allow -M mein_modul
Dies erzeugt eine Quellcode-Datei (.te) und das kompilierte Policy-Paket (.pp)
- Modul aktivieren
Laden Sie das kompilierte Paket abschließend in den Kernel:
sudo semodule -i mein_modul.pp
- Initiale Einrichtung
Nach einer frischen SELinux-Installation und der Deinstallation von AppArmor wird das System oft mit unklaren AVC-Meldungen geflutet. Um das System initial wieder nutzbar zu machen, können Sie alle bisherigen Blockaden pauschal erfassen:
sudo grep "AVC" /var/log/audit/audit.log | audit2allow -M my_custom_policy
Laden Sie auch dieses Modul anschließend mit
sudo semodule -i my_custom_policy.pp
- Hinweis
Diese "Holzhammer-Methode" eignet sich nur für die allererste Stabilisierung des Systems. Im späteren Betrieb sollten Sie Ausnahmen immer strikt nach Diensten getrennt erstellen.
Anhang
Siehe auch
- Dateien in /etc/selinux/targeted/contexts/files/
- definieren Kontexte für Dateien und Verzeichnisse
- Dateien in diesem Verzeichnis werden von den Dienstprogrammen restorecon und setfiles gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen
- Der Befehl semanage port -a fügt einen Eintrag zur Datei /etc/selinux/targeted/modules/active/ports.local hinzu
- Beachten Sie, dass diese Datei standardmäßig nur von root eingesehen werden kann
Dokumentation
- Man-Page
- ausearch(8)
- aureport(8)
- sealert(8)
- audit2allow(1)
Links
Projekt
Weblinks