Zum Inhalt springen

Linux/SELinux/01 Grundlagen/Quickstart: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „ TCP“ durch „ TCP
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''SELinux/Debian''' - [[SELinux]] unter [[Debian]]
{{Navigation|Linux/SELinux/02 Installation|Linux/SELinux/02 Kontext}}
 
'''Linux/SELinux/01 Grundlagen/Quickstart''' - [[SELinux]] unter [[Debian]]


== Beschreibung ==
== Beschreibung ==
 
SELinux-Unterstützung ist in den von Debian bereitgestellten Standard-Kerneln enthalten
== SELinux einrichten ==
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


The apt install selinux-basics selinux-policy-default auditd command will automatically install the packages required to configure an SELinux system
== Installation ==
<syntaxhighlight lang="bash" highlight="1" copy>
sudo apt install selinux-basics selinux-policy-default auditd
</syntaxhighlight>


Das Paket selinux-policy-default enthält einen Satz von Standardregeln
== Standardregeln ==
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 (die Modulverwaltung wird in diesem Kapitel ausführlich beschrieben)
* 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
== Aktivierung ==
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
** ohne ihn läuft SELinux in seinem standardmäßigen '''permissive'''-Modus
** bei dem unterbundene Vorgänge zwar protokolliert, aber dennoch ausgeführt werden
** 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
 
== Beim Systemstart aktivieren ==
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
* 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 dann nach einem Neustart aktiv
* SELinux ist nach einem Neustart aktiv


; Hinweis
; Hinweis
Zeile 39: Zeile 46:
* 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
Zeile 47: Zeile 54:
* Sie sollten hierzu die für diesen Zweck vorgesehenen Programme verwenden
* Sie sollten hierzu die für diesen Zweck vorgesehenen Programme verwenden


== Weitere Schritte ==
=== Module verwalten ===
=== Module verwalten ===
* [[Linux/SELinux/01 Grundlagen/Debian/Module]]
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
<blockquote>
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
</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
* Diese beiden Zuordnungen (des Benutzers zur Identität und der Identität zu den Rollen) können mit dem Befehl semanage konfiguriert werden
* Zuordnungen können mit dem Befehl semanage konfiguriert werden
** des Benutzers zur Identität und der Identität zu den Rollen


Sie sollten unbedingt die Handbuchseite zu semanage(8) lesen
Sie sollten die Handbuchseite zu semanage(8) lesen
* Alle verwalteten Konzepte verfügen über eine eigene Handbuchseite; zum Beispiel semanage-login(8)
* 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, die für die meisten Unterbefehle gelten
; Optionen
* -a to add
die für die meisten Unterbefehle gelten
* -d to delete
{| class="wikitable options big col1center"
* -m to modify
|-
* -l to list
! Option !! Beschreibung
* -t to indicate a type (or domain)
|-
| -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
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
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
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 122: Zeile 176:
Der erste Befehl registriert die neue Bezeichnungsregel und der zweite gleicht die Dateitypen gemäß den derzeitigen Bezeichnungsregeln an
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
* 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
  semanage port -m -t http_port_t -p tcp 8080 ausführen
Zeile 133: Zeile 187:
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
  sudo getsebool httpd_enable_homedirs
  httpd_enable_homedirs --> off
httpd_enable_homedirs --> off


  sudo setsebool -P httpd_enable_homedirs on
  sudo setsebool -P httpd_enable_homedirs on


  sudo getsebool httpd_enable_homedirs
  sudo getsebool httpd_enable_homedirs
  httpd_enable_homedirs --> on
httpd_enable_homedirs --> on


== Regeln anpassen ==
=== Regeln anpassen ===
[[Linux/SELinux/01 Grundlagen/Debian/Regeln anpassen]]
[[Linux/SELinux/Regeln anpassen]]


{{Navigation|Linux/SELinux/02 Installation|Linux/SELinux/02 Kontext}}


<noinclude>


{{Navigation|Linux/SELinux/01_Grundlagen|Linux/SELinux/01_Grundlagen/Debian/Module}}
<noinclude>
== Anhang ==
== Anhang ==
=== Siehe auch ===
=== Siehe auch ===

Aktuelle Version vom 4. Juli 2026, 12:00 Uhr

Linux/SELinux/01 Grundlagen/Quickstart - SELinux unter Debian

Beschreibung

SELinux-Unterstützung 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

Installation

sudo apt install selinux-basics selinux-policy-default auditd

Standardregeln

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

Aktivierung

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

Beim Systemstart aktivieren

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

Linux/SELinux/Regeln anpassen


Anhang

Siehe auch



Dokumentation

Projekt