So konfigurieren Sie SELinux-Modi auf Rocky Linux
Es ist sicherer, zunächst das Problem zu überprüfen und die notwendigen Richtlinien zu ändern, anstatt SELinux (Security-Enhanced Linux) auf Rocky Linux vollständig zu deaktivieren. Falls Diagnosen erforderlich sind, verwenden Sie vorübergehend den permissive-Modus und ziehen Sie eine dauerhafte Deaktivierung nur dann in Betracht, wenn es aufgrund inkompatibler Software keine andere Lösung gibt.
Aktuellen SELinux-Status prüfen
getenforce zeigt den aktuellen Betriebsmodus in einer einzigen Zeile an, und sestatus zeigt detaillierte Informationen wie den Modus und die Richtlinie in der Konfigurationsdatei.
getenforce
sestatus
| Modi | Bedeutung |
|---|---|
Enforcing |
Protokolliert Richtlinienverletzungen und blockiert nicht erlaubte Zugriffe. Empfohlener Zustand für Produktionsserver. |
Permissive |
Protokolliert Richtlinienverstöße, erzwingt diese jedoch nicht. Geeignet für Ursachenanalyse und Richtlinientests. |
Disabled |
SELinux funktioniert nicht, und die Verwaltung der Dateisicherheitskontexte ist ebenfalls eingestellt. |
Temporär den Permissive-Modus verwenden
Nur für den aktuellen Boot ändern
Der folgende Befehl wird das Blockieren nur bis zum nächsten Neustart stoppen. Verwenden Sie ihn, um einzugrenzen, ob das Problem durch SELinux verursacht wird, und stellen Sie unmittelbar nach der Überprüfung wieder den Enforcing-Modus her.
sudo setenforce 0
getenforce
Zurück in den Enforcing-Modus wechseln
sudo setenforce 1
getenforce
Die Tatsache, dass das Problem im Permissive-Modus verschwindet, weist nur auf ein potenzielles SELinux-bezogenes Problem hin und bedeutet nicht, dass SELinux deaktiviert werden sollte. Überprüfen Sie die Audit-Logs, um die erforderlichen Dateikontexte, Booleans oder Porttypen zu ändern.
Überprüfen Sie die Ursache der Sperrung
Aktuelle AVC-Verweigerungsaufzeichnungen anzeigen
SELinux-Zugriffsverweigerungen werden im Audit-Log als AVC (Access Vector Cache)-Meldungen aufgezeichnet. Aktuelle Aufzeichnungen können wie folgt eingesehen werden.
sudo ausearch -m AVC,USER_AVC -ts recent
Wenn ausearch nicht verfügbar ist, überprüfen Sie das audit-Paket und den Status des Dienstes. Untersuchen Sie den Prozess im Log, den Zielpfad und die angeforderten Berechtigungen, um festzustellen, ob sie dem tatsächlichen Dienstverhalten entsprechen.
Wiederherstellung des Sicherheitskontexts von Dateien
Wenn der Sicherheitskontext von Webdokumenten oder Dienstedaten falsch ist, ist es einfacher, eine dauerhafte Regel zu registrieren und mit restorecon anzuwenden, als beliebige chcon-Änderungen vorzunehmen.
sudo semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'
sudo restorecon -Rv /srv/www
Der Befehl semanage wird normalerweise vom Paket policycoreutils-python-utils bereitgestellt. Verzeichnisse, die Schreibberechtigungen erfordern, sollten einem separaten Typ zugewiesen werden, der für ihren Zweck geeignet ist, und Beispielsarten sollten nicht wahllos angewendet werden.
Anpassen von Booleans und nicht standardmäßigen Ports
Erlauben von Servicefunktionen mit Booleans
Auswählbare Funktionen, die von der Richtlinie im Voraus bereitgestellt werden, können mithilfe von SELinux-Booleans aktiviert werden. Überprüfen Sie die aktuellen Werte und Beschreibungen und wenden Sie dann dauerhaft nur die notwendigen Elemente an.
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on
Registrieren von Porttypen für Dienste
Wenn ein Dienst einen nicht standardmäßigen Port verwendet, kann zusätzlich zu den Firewall-Erlaubnissen eine SELinux-Port-Richtlinie erforderlich sein. Überprüfen Sie zuerst die vorhandenen Zuordnungen und fügen Sie dann neue hinzu. Für die damit verbundenen Bedingungen und das Verfahren siehe Wie man firewalld auf Rocky Linux verwaltet: Zonen, Dienste und Ports.
sudo semanage port -l | grep http_port_t
sudo semanage port -a -t http_port_t -p tcp 8088
Möglicherweise benötigen Sie -m anstelle von -a, um den Typ eines bereits registrierten Ports zu ändern. Überprüfen Sie zuerst, ob der Port von einem anderen Dienst verwendet wird.
Behalten Sie den Permissive-Modus nach dem Booten bei
Um den Nur-Aufzeichnungsmodus auch nach einem Neustart beizubehalten, während Sie die Anwendungs-Kompatibilität untersuchen, sichern Sie /etc/selinux/config und setzen Sie SELINUX=permissive.
sudo cp -a /etc/selinux/config /etc/selinux/config.backup
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
grep '^SELINUX=' /etc/selinux/config
Der Wert in der Konfigurationsdatei wird beim nächsten Neustart angewendet. Der aktuelle Modus kann separat mit setenforce 0 geändert oder nach dem geplanten Neustart überprüft werden.
Versionsspezifisches Deaktivieren und erneutes Aktivieren
Bevorzugen Sie den permissiven Modus für temporäre Diagnosen. Wenn ein vollständiges Deaktivieren unvermeidbar ist, identifizieren Sie die tatsächliche Rocky-Hauptversion und den Bootloader und bereiten Sie Konsolenzugang, Konfigurations- und Kernelargumentaufzeichnungen sowie Backups vor. Das dokumentierte vollständige Deaktivierungsverfahren von RHEL 9 verwendet das Kernelargument selinux=0; betrachten Sie das Ändern von SELINUX=disabled allein nicht als versionunabhängiges Verfahren.
cat /etc/rocky-release
rpm -q grubby
cat /proc/cmdline
sudo grubby --info=ALL
Nachdem bestätigt wurde, dass grubby die Bootkonfiguration dieses Systems verwaltet, wenden Sie das Folgende nur während eines geplanten Wartungsfensters an. Überprüfen Sie zunächst die vorhandenen Argumente für dieselbe Einstellung; ein Beispiel zu lesen ist anders, als eine Sicherheitsänderung auf einem laufenden Server zu genehmigen.
sudo grubby --update-kernel ALL --args selinux=0
Nach dem geplanten Neustart überprüfen Sie getenforce und cat /proc/cmdline. Die SELinux-Durchsetzung und deren Zugriffsverweigerungsprotokollierung sind nicht verfügbar, während sie deaktiviert ist. Bewahren Sie die ursprünglichen Argumente und die Konfiguration auf, damit die Änderung rückgängig gemacht werden kann.
Um sie wieder zu aktivieren, entfernen Sie selinux=0 und bereiten Sie zuerst SELINUX=permissive in /etc/selinux/config vor. Schützen Sie den initialen Start mit enforcing=0 und planen Sie eine erneute Kennzeichnung der Dateisicherheitskontexte (Relabeling). Entfernen Sie nur die durch diese Aufgabe eingeführten Argumente und bewahren Sie alle bestehenden verwalteten Richtlinien.
sudo grubby --update-kernel ALL --remove-args selinux
sudo grubby --update-kernel ALL --args enforcing=0
sudo fixfiles -F onboot
Starten Sie mit einer verfügbaren Wiederherstellungskonsole neu und warten Sie, bis die erneute Kennzeichnung abgeschlossen ist; viele Dateien können dies verlangsamen. Überprüfen Sie die Dienste und AVC-Protokolle im permissiven Modus, bevor Sie SELINUX=enforcing setzen, enforcing=0 aus den Startparametern entfernen und sudo setenforce 1 verwenden. Überprüfen Sie sowohl den aktuellen Status als auch den nächsten Neustart. Dies ist kein universelles Wiederherstellungsskript für beliebige Produktionsplatten.
RHEL 9 SELinux-Modus und Wiederaktivierungsdokumentation
Empfohlene Reihenfolge zur Fehlerbehebung
- Überprüfen Sie den aktuellen Status mit
getenforceundsestatus. - Überprüfen Sie zuerst die Servicelogdateien, Dateiberechtigungen und die Firewall.
- Falls erforderlich, wechseln Sie vorübergehend in den permissiven Modus und vergleichen Sie die Symptome.
- Überprüfen Sie die tatsächlichen Verweigerungsprotokolle mit
ausearch. - Ändern Sie nur den minimalen Bereich mit dem korrekten Dateikontext, Boolean oder Porttyp.
- Wechseln Sie zurück in den durchsetzenden Modus und überprüfen Sie erneut die Funktionalität und Protokolle.
Referenzdokumente
Der Rocky Linux SELinux Learning Guide erklärt die Grundprinzipien von Modi, Sicherheitskontexten, Booleans und Fehlerbehebung.




