Linux/SELinux/01 Grundlagen/Quickstart: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| (35 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''SELinux/ | '''Linux/SELinux/01 Grundlagen/Quickstart''' - [[SELinux]] unter [[Debian]] | ||
== Beschreibung == | == Beschreibung == | ||
Die Unterstützung von SELinux ist in den von Debian bereitgestellten Standard-Kerneln enthalten | Die Unterstützung von SELinux ist in den von Debian bereitgestellten Standard-Kerneln enthalten | ||
* Die Kernprogramme von Unix unterstützen SELinux ohne Änderungen | * Die Kernprogramme von Unix unterstützen SELinux ohne Änderungen | ||
* Es ist daher recht einfach, SELinux zu aktivieren | * Es ist daher recht einfach, SELinux zu aktivieren | ||
Der Befehl | |||
apt install selinux-basics selinux-policy-default auditd | |||
installiert automatisch die Pakete, die zur Konfiguration eines SELinux-Systems erforderlich sind | |||
; Paket selinux-policy-default | |||
Enthält einen Satz von Standardregeln | |||
* Standardmäßig beschränkt dieses Regelwerk nur den Zugang für einige besonders gefährdete Dienste | * Standardmäßig beschränkt dieses Regelwerk nur den Zugang für einige besonders gefährdete Dienste | ||
* Die Nutzersitzungen sind nicht eingeschränkt und es ist daher unwahrscheinlich, dass SELinux legitime Nutzeraktionen blockieren würde | * Die Nutzersitzungen sind nicht eingeschränkt und es ist daher unwahrscheinlich, dass SELinux legitime Nutzeraktionen blockieren würde | ||
* Dieses erhöht jedoch die Sicherheit von Systemdiensten, die auf dem Rechner laufen | * Dieses erhöht jedoch die Sicherheit von Systemdiensten, die auf dem Rechner laufen | ||
* Um ein Regelwerk einzurichten, das den alten „strengen“ Regeln entspricht, müssen Sie nur das Modul unconfined deaktivieren ( | * Um ein Regelwerk einzurichten, das den alten „strengen“ Regeln entspricht, müssen Sie nur das Modul unconfined deaktivieren ([[Linux/SELinux/01 Grundlagen/Debian/Module]]) | ||
Sobald das Regelwerk installiert ist, sollten Sie alle verfügbaren Dateien kennzeichnen (das heißt, sie einem Typ zuzuordnen) | Sobald das Regelwerk installiert ist, sollten Sie alle verfügbaren Dateien kennzeichnen (das heißt, sie einem Typ zuzuordnen) | ||
* Dieser Vorgang muss mit dem Befehl fixfiles relabel von Hand gestartet werden | * Dieser Vorgang muss mit dem Befehl '''[[fixfiles]]''' relabel von Hand gestartet werden | ||
Das SELinux-System ist nun einsatzbereit | ; Das SELinux-System ist nun einsatzbereit | ||
* Um es zu aktivieren, sollten Sie den Parameter selinux=1 security=selinux zum Linux-Kernel hinzufügen | * Um es zu aktivieren, sollten Sie den Parameter '''selinux=1 security=selinux''' zum Linux-Kernel hinzufügen | ||
* Der Parameter audit=1 aktiviert bei SELinux das Protokollieren, durch das alle unterbundenen Vorgänge aufgezeichnet werden | * Der Parameter '''audit=1''' aktiviert bei SELinux das Protokollieren, durch das alle unterbundenen Vorgänge aufgezeichnet werden | ||
* Schließlich bringt der Parameter enforcing=1 das Regelwerk zur Anwendung | * Schließlich bringt der Parameter '''enforcing=1''' das Regelwerk zur Anwendung | ||
** ohne ihn läuft SELinux in seinem standardmäßigen '''permissive'''-Modus | |||
** bei dem unterbundene Vorgänge zwar protokolliert, aber dennoch ausgeführt werden | |||
Sie sollten daher die Konfigurationsdatei des GRUB-Bootloaders anpassen, indem Sie die gewünschten Parameter anhängen | |||
* Ein einfacher Weg, dies zu tun, besteht darin, die Variable '''GRUB_CMDLINE_LINUX''' in der Datei '''/etc/default/grub''' zu ändern und dann den Befehl update-grub auszuführen | |||
* SELinux ist nach einem Neustart aktiv | |||
; Hinweis | |||
<blockquote> | |||
Das Skript '''[[selinux-activate]]''' automatisiert diese Vorgänge und erzwingt das Kennzeichnen der Dateien beim nächsten Rechnerstart | |||
* wodurch vermieden wird, dass neue, nicht gekennzeichnete Dateien erstellt werden, während SELinux noch nicht aktiv ist und das Kennzeichnen noch andauert | |||
</blockquote> | |||
== SELinux-System verwalten == | == SELinux-System verwalten == | ||
Das SELinux-Regelwerk ist ein modularer Satz von Regeln und mit seiner | Das SELinux-Regelwerk ist ein modularer Satz von Regeln, und mit seiner Installation werden automatisch alle relevanten Module entsprechend den bereits installierten Diensten erkannt und aktiviert | ||
* Das System ist hierdurch sofort funktionsfähig | * Das System ist hierdurch sofort funktionsfähig | ||
* Wenn jedoch ein Dienst später als das SELinux-Regelwerk installiert wird, müssen Sie in der Lage sein, das entsprechende Modul manuell zu aktivieren | * Wenn jedoch ein Dienst später als das SELinux-Regelwerk installiert wird, müssen Sie in der Lage sein, das entsprechende Modul manuell zu aktivieren | ||
* Hierzu dient der Befehl semodule | * Hierzu dient der Befehl '''[[semodule]]''' | ||
* Darüber hinaus müssen Sie in der Lage sein, die Rollen festzulegen, die jeder Nutzer bestätigen kann | * Darüber hinaus müssen Sie in der Lage sein, die Rollen festzulegen, die jeder Nutzer bestätigen kann | ||
* Dies geschieht mit dem Befehl semanage | * Dies geschieht mit dem Befehl semanage | ||
Diese beiden Befehle können somit dazu benutzt werden, die aktuelle SELinux-Konfiguration, die in /etc/selinux/default/ gespeichert ist, zu ändern | Diese beiden Befehle können somit dazu benutzt werden, die aktuelle SELinux-Konfiguration, die in '''/etc/selinux/default/''' gespeichert ist, zu ändern | ||
* Im Gegensatz zu anderen Konfigurationsdateien, die Sie in /etc/ finden, dürfen diese Dateien nicht manuell verändert werden | * Im Gegensatz zu anderen Konfigurationsdateien, die Sie in /etc/ finden, dürfen diese Dateien nicht manuell verändert werden | ||
* Sie sollten hierzu die für diesen Zweck vorgesehenen Programme verwenden | * Sie sollten hierzu die für diesen Zweck vorgesehenen Programme verwenden | ||
=== Module verwalten === | |||
=== | |||
Verfügbare SELinux-Module sind im Verzeichnis '''/usr/share/selinux/default/''' gespeichert | Verfügbare SELinux-Module sind im Verzeichnis '''/usr/share/selinux/default/''' gespeichert | ||
* Um eines dieser Module in der aktuellen Konfiguration zu aktivieren, sollten Sie den Befehl semodule -i ''Modul.pp.bz2'' benutzen | * Um eines dieser Module in der aktuellen Konfiguration zu aktivieren, sollten Sie den Befehl semodule -i ''Modul.pp.bz2'' benutzen | ||
| Zeile 155: | Zeile 84: | ||
* die Option -s ändert dieses Verhalten | * die Option -s ändert dieses Verhalten | ||
</blockquote> | </blockquote> | ||
; Siehe auch | |||
* [[Linux/SELinux/05_SEPolicy]] | |||
=== Identitäten verwalten === | === Identitäten verwalten === | ||
Jedes Mal, wenn sich ein Benutzer anmeldet, wird ihm eine SELinux-Identität zugewiesen | Jedes Mal, wenn sich ein Benutzer anmeldet, wird ihm eine SELinux-Identität zugewiesen | ||
* Diese bestimmt die Rollen, die er bestätigen kann | * Diese bestimmt die Rollen, die er bestätigen kann | ||
* | * Zuordnungen können mit dem Befehl semanage konfiguriert werden | ||
** des Benutzers zur Identität und der Identität zu den Rollen | |||
Sie sollten | Sie sollten die Handbuchseite zu semanage(8) lesen | ||
* Alle verwalteten Konzepte verfügen über eine eigene Handbuchseite | * Alle verwalteten Konzepte verfügen über eine eigene Handbuchseite | ||
** Beispiel: semanage-login(8) | |||
* Auch wenn die Syntax des Befehls für alle verwalteten Konzepte in der Regel ähnlich ist, wird empfohlen, die jeweilige Handbuchseite zu lesen | * Auch wenn die Syntax des Befehls für alle verwalteten Konzepte in der Regel ähnlich ist, wird empfohlen, die jeweilige Handbuchseite zu lesen | ||
; Optionen | ; Optionen | ||
die für die meisten Unterbefehle gelten | |||
{| class="wikitable options big col1center" | |||
|- | |||
! Option !! Beschreibung | |||
|- | |||
| -a || add | |||
|- | |||
| -d || delete | |||
|- | |||
| -m || modify | |||
|- | |||
| -l || list | |||
|- | |||
| -t || indicate a type (or domain) | |||
|} | |||
; semanage login -l | ; semanage login -l | ||
Führt die aktuellen Zuordnungen zwischen Benutzerkennungen und SELinux-Identitäten auf | |||
* Benutzer, die keinen ausdrücklichen Eintrag haben, erhalten die Identität, die im Eintrag '''__default__''' angegeben ist | * Benutzer, die keinen ausdrücklichen Eintrag haben, erhalten die Identität, die im Eintrag '''__default__''' angegeben ist | ||
; semanage login -a -s user_u ''benutzer'' | ; semanage login -a -s user_u ''benutzer'' | ||
Ordnet die Identität ''user_u'' dem angegebenen Benutzer zu | |||
; semanage login -d ''benutzer'' | ; semanage login -d ''benutzer'' | ||
Entfernt den Zuordnungseintrag, der an diesen Benutzer vergeben war | |||
sudo semanage login -a -s user_u rhertzog | sudo semanage login -a -s user_u rhertzog | ||
sudo semanage login -l | sudo semanage login -l | ||
| Zeile 220: | Zeile 164: | ||
=== Dateikontexte, Ports und Boolesche Optionen verwalten === | === Dateikontexte, Ports und Boolesche Optionen verwalten === | ||
Jedes SELinux-Modul stellt einen Satz von Dateibezeichnungsregeln zur Verfügung, aber es ist auch möglich, eigene Bezeichnungsregeln hinzuzufügen, um einen speziellen Fall abzudecken | Jedes SELinux-Modul stellt einen Satz von Dateibezeichnungsregeln zur Verfügung, aber es ist auch möglich, eigene Bezeichnungsregeln hinzuzufügen, um einen speziellen Fall abzudecken | ||
Wenn Sie zum Beispiel möchten, dass der Webserver in der Lage ist, Dateien innerhalb der /srv/www/-Dateihierarchie zu lesen, könnten Sie | |||
semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?" | |||
restorecon -R /srv/www/ ausführen | |||
Der erste Befehl registriert die neue Bezeichnungsregel und der zweite gleicht die Dateitypen gemäß den derzeitigen Bezeichnungsregeln an | |||
Ebenso sind die TCP/UDP-Ports in einer Weise gekennzeichnet, die sicherstellt, dass nur die entsprechenden Daemons an ihnen Verbindungen annehmen können | Ebenso sind die TCP/UDP-Ports in einer Weise gekennzeichnet, die sicherstellt, dass nur die entsprechenden Daemons an ihnen Verbindungen annehmen können | ||
* Wenn Sie zum Beispiel möchten, dass der Web-Server am Port 8080 Verbindungen annehmen kann, sollten Sie den Befehl semanage port -m -t http_port_t -p tcp 8080 ausführen | * Wenn Sie zum Beispiel möchten, dass der Web-Server am Port 8080 Verbindungen annehmen kann, sollten Sie den Befehl | ||
semanage port -m -t http_port_t -p tcp 8080 ausführen | |||
Einige SELinux-Module exportieren boolesche Optionen, die Sie anpassen können, um das Verhalten der Standardregeln zu ändern | Einige SELinux-Module exportieren boolesche Optionen, die Sie anpassen können, um das Verhalten der Standardregeln zu ändern | ||
* Mit dem Dienstprogramm getsebool können Sie diese Optionen einsehen (getsebool „boolean“ zeigt eine Option an, getsebool -a alle) | * Mit dem Dienstprogramm getsebool können Sie diese Optionen einsehen (getsebool „boolean“ zeigt eine Option an, getsebool -a alle) | ||
* Der Befehl setsebool „boolean“ „value“ ändert den aktuellen Wert einer booleschen Option | * Der Befehl setsebool „boolean“ „value“ ändert den aktuellen Wert einer booleschen Option | ||
* Die Option -P macht die Änderung dauerhaft, d. h., der neue Wert wird zum Standardwert und bleibt auch nach einem Neustart erhalten | * Die Option -P macht die Änderung dauerhaft, d. h., der neue Wert wird zum Standardwert und bleibt auch nach einem Neustart erhalten | ||
Das folgende Beispiel gewährt Webservern Zugriff auf Home-Verzeichnisse (dies ist nützlich, wenn Benutzer persönliche Websites in ~/public_html/ haben) | Das folgende Beispiel gewährt Webservern Zugriff auf Home-Verzeichnisse (dies ist nützlich, wenn Benutzer persönliche Websites in ~/public_html/ haben) | ||
sudo getsebool httpd_enable_homedirs | |||
httpd_enable_homedirs --> off | |||
sudo setsebool -P httpd_enable_homedirs on | |||
sudo getsebool httpd_enable_homedirs | |||
httpd_enable_homedirs --> on | |||
=== Regeln anpassen === | |||
[[Linux/SELinux/Regeln anpassen]] | |||
{{Navigation|Linux/SELinux/01 Grundlagen/Installation|Linux/SELinux/02 Kontext}} | |||
<noinclude> | <noinclude> | ||
Aktuelle Version vom 29. März 2026, 17:37 Uhr
Linux/SELinux/01 Grundlagen/Quickstart - SELinux unter Debian
Beschreibung
Die Unterstützung von SELinux ist in den von Debian bereitgestellten Standard-Kerneln enthalten
- Die Kernprogramme von Unix unterstützen SELinux ohne Änderungen
- Es ist daher recht einfach, SELinux zu aktivieren
Der Befehl
apt install selinux-basics selinux-policy-default auditd
installiert automatisch die Pakete, die zur Konfiguration eines SELinux-Systems erforderlich sind
- Paket selinux-policy-default
Enthält einen Satz von Standardregeln
- Standardmäßig beschränkt dieses Regelwerk nur den Zugang für einige besonders gefährdete Dienste
- Die Nutzersitzungen sind nicht eingeschränkt und es ist daher unwahrscheinlich, dass SELinux legitime Nutzeraktionen blockieren würde
- Dieses erhöht jedoch die Sicherheit von Systemdiensten, die auf dem Rechner laufen
- Um ein Regelwerk einzurichten, das den alten „strengen“ Regeln entspricht, müssen Sie nur das Modul unconfined deaktivieren (Linux/SELinux/01 Grundlagen/Debian/Module)
Sobald das Regelwerk installiert ist, sollten Sie alle verfügbaren Dateien kennzeichnen (das heißt, sie einem Typ zuzuordnen)
- Dieser Vorgang muss mit dem Befehl fixfiles relabel von Hand gestartet werden
- Das SELinux-System ist nun einsatzbereit
- Um es zu aktivieren, sollten Sie den Parameter selinux=1 security=selinux zum Linux-Kernel hinzufügen
- Der Parameter audit=1 aktiviert bei SELinux das Protokollieren, durch das alle unterbundenen Vorgänge aufgezeichnet werden
- Schließlich bringt der Parameter enforcing=1 das Regelwerk zur Anwendung
- ohne ihn läuft SELinux in seinem standardmäßigen permissive-Modus
- bei dem unterbundene Vorgänge zwar protokolliert, aber dennoch ausgeführt werden
Sie sollten daher die Konfigurationsdatei des GRUB-Bootloaders anpassen, indem Sie die gewünschten Parameter anhängen
- Ein einfacher Weg, dies zu tun, besteht darin, die Variable GRUB_CMDLINE_LINUX in der Datei /etc/default/grub zu ändern und dann den Befehl update-grub auszuführen
- SELinux ist nach einem Neustart aktiv
- Hinweis
Das Skript selinux-activate automatisiert diese Vorgänge und erzwingt das Kennzeichnen der Dateien beim nächsten Rechnerstart
- wodurch vermieden wird, dass neue, nicht gekennzeichnete Dateien erstellt werden, während SELinux noch nicht aktiv ist und das Kennzeichnen noch andauert
SELinux-System verwalten
Das SELinux-Regelwerk ist ein modularer Satz von Regeln, und mit seiner Installation werden automatisch alle relevanten Module entsprechend den bereits installierten Diensten erkannt und aktiviert
- Das System ist hierdurch sofort funktionsfähig
- Wenn jedoch ein Dienst später als das SELinux-Regelwerk installiert wird, müssen Sie in der Lage sein, das entsprechende Modul manuell zu aktivieren
- Hierzu dient der Befehl semodule
- Darüber hinaus müssen Sie in der Lage sein, die Rollen festzulegen, die jeder Nutzer bestätigen kann
- Dies geschieht mit dem Befehl semanage
Diese beiden Befehle können somit dazu benutzt werden, die aktuelle SELinux-Konfiguration, die in /etc/selinux/default/ gespeichert ist, zu ändern
- Im Gegensatz zu anderen Konfigurationsdateien, die Sie in /etc/ finden, dürfen diese Dateien nicht manuell verändert werden
- Sie sollten hierzu die für diesen Zweck vorgesehenen Programme verwenden
Module verwalten
Verfügbare SELinux-Module sind im Verzeichnis /usr/share/selinux/default/ gespeichert
- Um eines dieser Module in der aktuellen Konfiguration zu aktivieren, sollten Sie den Befehl semodule -i Modul.pp.bz2 benutzen
- Die Erweiterung pp.bz2 steht für policy package (komprimiert mit bzip2)
Das Entfernen eines Moduls aus der aktuellen Konfiguration erfolgt mit semodule -r module
- Letztlich listet der Befehl semodule -l die aktuell installierten Module auf
- Es gibt auch deren Versionsnummern aus
Module können selektiv mit semodul -e aktiviert und mit semodul -d deaktiviert werden
sudo semodule -i /usr/share/selinux/default/abrt.pp.bz2 libsemanage.semanage_direct_install_info: abrt module will be disabled after install as there is a disabled instance of this module present in the system sudo semodule -l accountsd acct []
sudo semodule -e abrt sudo semodule -d accountsd sudo semodule -l abrt acct []
sudo semodule -r abrt libsemanage.semanage_direct_remove_key: abrt module at priority 100 is now active
semodule lädt die neue Konfiguration unmittelbar, es sei denn, Sie verwenden seine Option -n
- Hinweise
Das Programm wirkt standardmäßig auf die aktuelle Konfiguration
- die unter der Variablen SELINUXTYPE in der Datei /etc/selinux/config angegeben ist
- die Option -s ändert dieses Verhalten
- Siehe auch
Identitäten verwalten
Jedes Mal, wenn sich ein Benutzer anmeldet, wird ihm eine SELinux-Identität zugewiesen
- Diese bestimmt die Rollen, die er bestätigen kann
- Zuordnungen können mit dem Befehl semanage konfiguriert werden
- des Benutzers zur Identität und der Identität zu den Rollen
Sie sollten die Handbuchseite zu semanage(8) lesen
- Alle verwalteten Konzepte verfügen über eine eigene Handbuchseite
- Beispiel: semanage-login(8)
- Auch wenn die Syntax des Befehls für alle verwalteten Konzepte in der Regel ähnlich ist, wird empfohlen, die jeweilige Handbuchseite zu lesen
- Optionen
die für die meisten Unterbefehle gelten
| Option | Beschreibung |
|---|---|
| -a | add |
| -d | delete |
| -m | modify |
| -l | list |
| -t | indicate a type (or domain) |
- semanage login -l
Führt die aktuellen Zuordnungen zwischen Benutzerkennungen und SELinux-Identitäten auf
- Benutzer, die keinen ausdrücklichen Eintrag haben, erhalten die Identität, die im Eintrag __default__ angegeben ist
- semanage login -a -s user_u benutzer
Ordnet die Identität user_u dem angegebenen Benutzer zu
- semanage login -d benutzer
Entfernt den Zuordnungseintrag, der an diesen Benutzer vergeben war
sudo semanage login -a -s user_u rhertzog sudo semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * rhertzog user_u s0 * root unconfined_u s0-s0:c0.c1023 *
sudo semanage login -d rhertzog
- semanage user -l
Listet die Zuordnungen zwischen den SELinux-Benutzeridentitäten und den erlaubten Rollen auf
- Um eine neue Identität hinzuzufügen, ist es erforderlich, sowohl die entsprechenden Rollen als auch ein kennzeichnendes Präfix festzulegen, das dazu benutzt wird, einem Typ persönliche Dateien (/home/benutzer/*) zuzuordnen
- Als Präfix muss user, staff oder sysadm gewählt werden
- Das Präfix „staff“ ergibt Dateien des Typs „staff_home_dir_t“
- Das Erstellen einer neuen SELinux-Benutzeridentität geschieht mit dem Befehl semanage user -a -R rollen -P präfix identität
Schließlich kann eine SELinux-Benutzeridentität mit dem Befehl semanage user -d identität entfernt werden
sudo semanage user -a -R 'staff_r user_r' -P staff test_u sudo semanage user -l Labeling MLS/ MLS/ SELinux User Prefix MCS Level MCS Range SELinux Roles root sysadm s0 s0-s0:c0.c1023 staff_r sysadm_r system_r staff_u staff s0 s0-s0:c0.c1023 staff_r sysadm_r sysadm_u sysadm s0 s0-s0:c0.c1023 sysadm_r system_u user s0 s0-s0:c0.c1023 system_r test_u staff s0 s0 staff_r user_r unconfined_u unconfined s0 s0-s0:c0.c1023 system_r unconfined_r user_u user s0 s0 user_r
sudo semanage user -d test_u
Dateikontexte, Ports und Boolesche Optionen verwalten
Jedes SELinux-Modul stellt einen Satz von Dateibezeichnungsregeln zur Verfügung, aber es ist auch möglich, eigene Bezeichnungsregeln hinzuzufügen, um einen speziellen Fall abzudecken
Wenn Sie zum Beispiel möchten, dass der Webserver in der Lage ist, Dateien innerhalb der /srv/www/-Dateihierarchie zu lesen, könnten Sie
semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?" restorecon -R /srv/www/ ausführen
Der erste Befehl registriert die neue Bezeichnungsregel und der zweite gleicht die Dateitypen gemäß den derzeitigen Bezeichnungsregeln an
Ebenso sind die TCP/UDP-Ports in einer Weise gekennzeichnet, die sicherstellt, dass nur die entsprechenden Daemons an ihnen Verbindungen annehmen können
- Wenn Sie zum Beispiel möchten, dass der Web-Server am Port 8080 Verbindungen annehmen kann, sollten Sie den Befehl
semanage port -m -t http_port_t -p tcp 8080 ausführen
Einige SELinux-Module exportieren boolesche Optionen, die Sie anpassen können, um das Verhalten der Standardregeln zu ändern
- Mit dem Dienstprogramm getsebool können Sie diese Optionen einsehen (getsebool „boolean“ zeigt eine Option an, getsebool -a alle)
- Der Befehl setsebool „boolean“ „value“ ändert den aktuellen Wert einer booleschen Option
- Die Option -P macht die Änderung dauerhaft, d. h., der neue Wert wird zum Standardwert und bleibt auch nach einem Neustart erhalten
Das folgende Beispiel gewährt Webservern Zugriff auf Home-Verzeichnisse (dies ist nützlich, wenn Benutzer persönliche Websites in ~/public_html/ haben)
sudo getsebool httpd_enable_homedirs httpd_enable_homedirs --> off
sudo setsebool -P httpd_enable_homedirs on
sudo getsebool httpd_enable_homedirs httpd_enable_homedirs --> on
Regeln anpassen
Anhang
Siehe auch
Dokumentation
Links
Projekt
Weblinks