<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Selinux_mit_Rocky</id>
	<title>Selinux mit Rocky - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Selinux_mit_Rocky"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Selinux_mit_Rocky&amp;action=history"/>
	<updated>2026-06-28T18:33:32Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Selinux_mit_Rocky&amp;diff=70285&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= SELinux =  SELinux (Security-Enhanced Linux) ist ein Sicherheitsmodul im Linux-Kernel das eine zusätzliche Zugriffssteuerung über die klassischen Unix-Rech…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Selinux_mit_Rocky&amp;diff=70285&amp;oldid=prev"/>
		<updated>2026-05-20T11:28:41Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= SELinux =  SELinux (Security-Enhanced Linux) ist ein Sicherheitsmodul im Linux-Kernel das eine zusätzliche Zugriffssteuerung über die klassischen Unix-Rech…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= SELinux =&lt;br /&gt;
&lt;br /&gt;
SELinux (Security-Enhanced Linux) ist ein Sicherheitsmodul im Linux-Kernel das eine zusätzliche Zugriffssteuerung über die klassischen Unix-Rechte hinaus implementiert. Es wurde ursprünglich von der NSA entwickelt und ist unter Rocky Linux standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
Der entscheidende Unterschied zu klassischen Dateiberechtigungen: Selbst wenn ein Prozess die nötigen Unix-Rechte hat, kann SELinux den Zugriff trotzdem verweigern. SELinux entscheidet anhand von Sicherheitskontexten wer auf was zugreifen darf – nicht anhand von Benutzer und Gruppe.&lt;br /&gt;
&lt;br /&gt;
= Modi =&lt;br /&gt;
&lt;br /&gt;
SELinux kennt drei Betriebsmodi:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Modus !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| enforcing || SELinux ist aktiv und blockiert verbotene Zugriffe – Standard unter Rocky Linux&lt;br /&gt;
|-&lt;br /&gt;
| permissive || SELinux protokolliert Verstöße aber blockiert nichts – nützlich zur Fehlersuche&lt;br /&gt;
|-&lt;br /&gt;
| disabled || SELinux ist komplett deaktiviert – nicht empfohlen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Aktuellen Modus anzeigen ==&lt;br /&gt;
* getenforce&lt;br /&gt;
 Enforcing&lt;br /&gt;
* sestatus&lt;br /&gt;
 SELinux status:                 enabled&lt;br /&gt;
 SELinuxfs mount:                /sys/fs/selinux&lt;br /&gt;
 SELinux mount point:            /sys/fs/selinux&lt;br /&gt;
 Loaded policy name:             targeted&lt;br /&gt;
 Current mode:                   enforcing&lt;br /&gt;
 Mode from config file:          enforcing&lt;br /&gt;
&lt;br /&gt;
== Modus temporär wechseln ==&lt;br /&gt;
;Gilt nur bis zum nächsten Reboot – nützlich zur schnellen Fehlersuche&lt;br /&gt;
* setenforce 0&lt;br /&gt;
 # Wechsel zu permissive&lt;br /&gt;
* setenforce 1&lt;br /&gt;
 # Zurück zu enforcing&lt;br /&gt;
&lt;br /&gt;
== Modus dauerhaft setzen ==&lt;br /&gt;
;Die dauerhafte Konfiguration liegt in /etc/selinux/config&lt;br /&gt;
* vi /etc/selinux/config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELINUX=enforcing&lt;br /&gt;
SELINUXTYPE=targeted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Nach einer Änderung ist ein Reboot nötig&lt;br /&gt;
&lt;br /&gt;
= Sicherheitskontexte =&lt;br /&gt;
&lt;br /&gt;
Jede Datei, jeder Prozess und jeder Port hat unter SELinux einen Sicherheitskontext. Der Kontext besteht aus vier Teilen:&lt;br /&gt;
&lt;br /&gt;
 system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
 │         │        │                  │&lt;br /&gt;
 │         │        │                  └── Sensitivity Level&lt;br /&gt;
 │         │        └── Typ – das wichtigste Feld&lt;br /&gt;
 │         └── Rolle&lt;br /&gt;
 └── Benutzer&lt;br /&gt;
&lt;br /&gt;
;Der Typ ist entscheidend – SELinux entscheidet anhand des Typs ob ein Prozess auf eine Datei zugreifen darf. httpd darf nur auf Dateien mit dem Typ httpd_sys_content_t zugreifen.&lt;br /&gt;
&lt;br /&gt;
== Kontexte anzeigen ==&lt;br /&gt;
;Dateien&lt;br /&gt;
* ls -Z /var/www/html&lt;br /&gt;
 system_u:object_r:httpd_sys_content_t:s0 index.html&lt;br /&gt;
;Prozesse&lt;br /&gt;
* ps -eZ | grep httpd&lt;br /&gt;
 system_u:system_r:httpd_t:s0  httpd&lt;br /&gt;
;Ports&lt;br /&gt;
* semanage port -l | grep http&lt;br /&gt;
 http_port_t  tcp  80, 443, 8008, 8009, 8443&lt;br /&gt;
&lt;br /&gt;
= Kontexte setzen und verwalten =&lt;br /&gt;
&lt;br /&gt;
== Kontext temporär ändern ==&lt;br /&gt;
;Gilt bis zum nächsten restorecon oder Relabeling&lt;br /&gt;
* chcon -t httpd_sys_content_t /var/www/meinseite/index.html&lt;br /&gt;
;Rekursiv für ein Verzeichnis&lt;br /&gt;
* chcon -Rt httpd_sys_content_t /var/www/meinseite&lt;br /&gt;
&lt;br /&gt;
== Kontext dauerhaft setzen ==&lt;br /&gt;
;restorecon setzt den Kontext auf den in der Policy definierten Standardwert zurück&lt;br /&gt;
;Damit chcon dauerhaft wirkt muss der Standardkontext in der Policy angepasst werden&lt;br /&gt;
* semanage fcontext -a -t httpd_sys_content_t &amp;quot;/var/www/meinseite(/.*)?&amp;quot;&lt;br /&gt;
* restorecon -Rv /var/www/meinseite&lt;br /&gt;
&lt;br /&gt;
== Kontext wiederherstellen ==&lt;br /&gt;
;Setzt alle Kontexte auf die Policy-Standardwerte zurück&lt;br /&gt;
* restorecon -Rv /var/www/html&lt;br /&gt;
&lt;br /&gt;
== Gesamtes System neu labeln ==&lt;br /&gt;
;Nach dem Deaktivieren und Wiederaktivieren von SELinux müssen alle Kontexte neu gesetzt werden&lt;br /&gt;
* touch /.autorelabel&lt;br /&gt;
* reboot&lt;br /&gt;
&lt;br /&gt;
= Booleans =&lt;br /&gt;
&lt;br /&gt;
Booleans sind Ein/Aus-Schalter in der SELinux-Policy – sie erlauben es bestimmte Verhaltensweisen ohne Änderung der Policy zu aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Booleans anzeigen ==&lt;br /&gt;
;Alle Booleans&lt;br /&gt;
* getsebool -a&lt;br /&gt;
;Nur httpd-Booleans&lt;br /&gt;
* getsebool -a | grep httpd&lt;br /&gt;
&lt;br /&gt;
== Boolean setzen ==&lt;br /&gt;
;Temporär – bis zum nächsten Reboot&lt;br /&gt;
* setsebool httpd_can_network_connect on&lt;br /&gt;
;Dauerhaft&lt;br /&gt;
* setsebool -P httpd_can_network_connect on&lt;br /&gt;
&lt;br /&gt;
== Wichtige Booleans ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Boolean !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| httpd_can_network_connect || Apache darf Netzwerkverbindungen aufbauen (z.B. für Proxying)&lt;br /&gt;
|-&lt;br /&gt;
| httpd_can_network_connect_db || Apache darf Datenbankverbindungen aufbauen&lt;br /&gt;
|-&lt;br /&gt;
| httpd_use_nfs || Apache darf auf NFS-Shares zugreifen&lt;br /&gt;
|-&lt;br /&gt;
| samba_enable_home_dirs || Samba darf Home-Verzeichnisse freigeben&lt;br /&gt;
|-&lt;br /&gt;
| ldap_can_access_certs || LDAP darf auf Zertifikate außerhalb seiner Verzeichnisse zugreifen&lt;br /&gt;
|-&lt;br /&gt;
| ssh_sysadm_login || SSH erlaubt Login als sysadm_r Rolle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Ports =&lt;br /&gt;
&lt;br /&gt;
;SELinux kontrolliert auch auf welchen Ports Dienste lauschen dürfen – ein Webserver darf standardmäßig nur auf http_port_t lauschen&lt;br /&gt;
&lt;br /&gt;
== Erlaubte Ports anzeigen ==&lt;br /&gt;
* semanage port -l | grep http&lt;br /&gt;
* semanage port -l | grep ssh&lt;br /&gt;
&lt;br /&gt;
== Port hinzufügen ==&lt;br /&gt;
;Apache soll zusätzlich auf Port 8080 lauschen dürfen&lt;br /&gt;
* semanage port -a -t http_port_t -p tcp 8080&lt;br /&gt;
&lt;br /&gt;
== Port entfernen ==&lt;br /&gt;
* semanage port -d -t http_port_t -p tcp 8080&lt;br /&gt;
&lt;br /&gt;
= Fehlersuche =&lt;br /&gt;
&lt;br /&gt;
== Blockaden anzeigen ==&lt;br /&gt;
;Alle SELinux-Blockaden seit dem letzten Boot&lt;br /&gt;
* ausearch -m avc -ts recent&lt;br /&gt;
;Live mitverfolgen&lt;br /&gt;
* tail -f /var/log/audit/audit.log | grep AVC&lt;br /&gt;
&lt;br /&gt;
== sealert ==&lt;br /&gt;
;sealert analysiert AVC-Meldungen und gibt konkrete Lösungsvorschläge&lt;br /&gt;
* dnf install -y setroubleshoot-server&lt;br /&gt;
* sealert -a /var/log/audit/audit.log&lt;br /&gt;
&lt;br /&gt;
== audit2allow ==&lt;br /&gt;
;Generiert eine SELinux-Policy aus AVC-Meldungen – letztes Mittel wenn nichts anderes hilft&lt;br /&gt;
* ausearch -m avc -ts recent | audit2allow -M meinmodul&lt;br /&gt;
* semodule -i meinmodul.pp&lt;br /&gt;
&lt;br /&gt;
;Vorsicht: audit2allow erlaubt alles was in den AVC-Meldungen steht – nur verwenden wenn man weiß was man tut&lt;br /&gt;
&lt;br /&gt;
= Typische Fehler im Labor =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Situation !! Problem !! Lösung&lt;br /&gt;
|-&lt;br /&gt;
| Apache liefert 403 obwohl Rechte stimmen || Falscher SELinux-Kontext auf dem Verzeichnis || chcon -Rt httpd_sys_content_t /var/www/...&lt;br /&gt;
|-&lt;br /&gt;
| slapd kann Zertifikat nicht lesen || SELinux blockiert Zugriff auf /etc/ssl/ || setsebool -P ldap_can_access_certs 1&lt;br /&gt;
|-&lt;br /&gt;
| named kann Zone nicht laden || Zonendatei liegt nicht unter /var/named || Datei nach /var/named verschieben&lt;br /&gt;
|-&lt;br /&gt;
| SSH lauscht nicht auf neuem Port || Port nicht in SELinux-Policy || semanage port -a -t ssh_port_t -p tcp XXXX&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>