Zum Inhalt springen

Linux/SELinux/10 Systemd: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(39 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== SELinux systemd Access Control ===
'''Linux/SELinux/10 Systemd''' - SELinux-Zugriffskontrolle mit systemdn steuern
; System services are controlled by the '''systemd''' daemon
{{navigation|Linux/SELinux/09 Container|Linux/SELinux/11 Fehlerbehebung}}
Earlier daemons could be started in two ways
* At boot time, the System V '''init''' daemon launched an '''init.rc''' script and then this script launched the required daemon


For example, the Apache server, which was started at boot, got the following SELinux label:
== Beschreibung ==
system_u:system_r:httpd_t:s0
; Systemd
Nahezu jeder Dienst in Linux erzeugt beim Start oder im laufenden Betrieb Hilfsobjekte: Verzeichnisse unter /run, PID-Dateien, UNIX-Sockets, Journal-Verzeichnisse, temporäre Dateien, Caches und andere Betriebsdaten


An administrator launched the '''init.rc''' script manually, causing the daemon to run
Verzeichnisse wie /run oder /tmp können als temporäre Dateisysteme (tmpfs) eingehängt sein
* Das bedeutet, dass ihr Inhalt bei jedem Neustart des Servers vollständig gelöscht wird


For example, when the '''service httpd restart''' command was invoked on the Apache server, the resulting SELinux label looked as follows:
Wenn ein Dienst (zum Beispiel ein Webserver oder ein DBMS) für seinen Betrieb ein eigenes Verzeichnis unter /run benötigt (zum Beispiel /run/myapp/), entstehen zwei Probleme
unconfined_u:system_r:httpd_t:s0


When launched manually, the process adopted the user portion of the SELinux label that started it, making the labeling in the two scenarios above inconsistent
# Das Verzeichnis muss bei jedem Systemstart erneut angelegt werden, bevor der Dienst versucht, darauf zuzugreifen
* With the '''systemd''' daemon, the transitions are very different
# Wenn der Dienst das Verzeichnis selbst anlegt, kann es den Standardkontext des Elternverzeichnisses erben (zum Beispiel var_run_t)
* As '''systemd''' handles all the calls to start and stop daemons on the system, using the '''init_t''' type, it can override the user part of the label when a daemon is restarted manually
* In einer strikten SELinux-Policy kann dem Dienst die Arbeit mit dem Basistyp var_run_t untersagt sein, sodass ein spezifischer Kontext erforderlich ist (zum Beispiel myapp_var_run_t)
* As a result, the labels in both scenarios above are '''system_u:system_r:httpd_t:s0''' as expected and the SELinux policy could be improved to govern which domains are able to control which units


=== SELinux Access Permissions for Services ===
=== systemd-tmpfiles ===
In previous versions of Red Hat Enterprise Linux, an administrator was able to control, which users or applications were able to start or stop services based on the label of the System V Init script
; Zur Verwaltung temporärer Dateien und Verzeichnisse dient das Werkzeug systemd-tmpfiles
* Now, '''systemd''' starts and stops all services, and users and processes communicate with '''systemd''' using the '''systemctl''' utility
* Beim Systemstart (oder per Timer) liest es Konfigurationsdateien aus den Verzeichnissen /etc/tmpfiles.d/, /run/tmpfiles.d/ und /usr/lib/tmpfiles.d/ und erstellt, entfernt oder bereinigt Dateien und Verzeichnisse entsprechend den Regeln
* The '''systemd''' daemon has the ability to consult the SELinux policy and check the label of the calling process and the label of the unit file that the caller tries to manage, and then ask SELinux whether or not the caller is allowed the access
* This approach strengthens access control to critical system capabilities, which include starting and stopping system services


For example, previously, administrators had to allow NetworkManager to execute '''systemctl''' to send a D-Bus message to '''systemd''', which would in turn start or stop whatever service NetworkManager requested
systemd-tmpfiles ist eng mit SELinux integriert
* In fact, NetworkManager was allowed to do everything '''systemctl''' could do
* Beim Erzeugen eines beliebigen Objekts greift das Werkzeug automatisch auf die SELinux-Kontextdatenbank (file_contexts) zu
* It was also impossible to setup confined administrators so that they could start or stop just particular services
* Dadurch wird das korrekte Label automatisch gesetzt, ohne dass nach jedem Neustart manuell restorecon ausgeführt werden muss


To fix these issues, '''systemd''' also works as an SELinux Access Manager
==== Regeln ====
* It can retrieve the label of the process running '''systemctl''' or the process that sent a D-Bus message to '''systemd'''
Regeln können unter folgenden Pfaden gefunden werden
* The daemon then looks up the label of the unit file that the process wanted to configure
* /usr/lib/tmpfiles.d/ — vordefinierte Regeln
* Finally, '''systemd''' can retrieve information from the kernel if the SELinux policy allows the specific access between the process label and the unit file label
* /run/tmpfiles.d/ — Runtime-Regeln
* This means a compromised application that needs to interact with '''systemd''' for a specific service can now be confined by SELinux
* /etc/tmpfiles.d/ — lokale und administrative Regeln
* Policy writers can also use these fine-grained controls to confine administrators


Policy changes involve a new class called '''service''', with the following permissions
Die Regeln haben folgendes Format
  class service
<syntaxhighlight lang="bash" highlight="1" copy line>
  {
Typ  Pfad  Modus  Benutzer  Gruppe Alter Argument
        start
</syntaxhighlight>
        stop
        status
        reload
        kill
        load
        enable
        disable
}


For example, a policy writer can now allow a domain to get the status of a service or start and stop a service, but not enable or disable a service
* '''Typ:''' Gibt an, was getan werden soll
* Access control operations in SELinux and '''systemd''' do not match in all cases
** d (Verzeichnis anlegen, falls es nicht existiert)
* A mapping was defined to line up '''systemd''' method calls with SELinux access checks
** f (Datei anlegen)
* Table&nbsp;10.1, “Mapping of systemd unit file method calls on SELinux access checks” maps access checks on unit files while Table&nbsp;10.2, “Mapping of systemd general system calls on SELinux access checks” covers access checks for the system in general
** z (SELinux-Kontext und Rechte wiederherstellen, ohne das Objekt zu erzeugen)
* If no match is found in either table, then the '''undefined''' system check is called
** Z (SELinux-Kontext rekursiv wiederherstellen)
* '''Pfad:''' Absoluter Pfad zum Objekt
* '''Modus:''' Zugriffsrechte (zum Beispiel 0755)
* '''Benutzer/Gruppe (UID/GID):''' Eigentümer des Objekts


; Mapping of systemd unit file method calls on SELinux access checks
==== Regel anlegen ====
{|  
Hier wird der Prozess zur Vorbereitung einer Umgebung unter Verwendung des Typs httpd_runtime_t für einen neuen Dienst myapp demonstriert, der eine PID-Datei im Verzeichnis /run/myapp benötigt
 
Zunächst muss eine File-Context-Regel in die SELinux-Policy-Datenbank eingetragen werden, damit das System weiß, welcher Kontext für den benötigten Pfad erwartet wird
<syntaxhighlight lang="bash" highlight="1" copy line>
semanage fcontext -a -t httpd_runtime_t "/run/myapp(/.*)?"
</syntaxhighlight>
 
Danach muss eine Konfigurationsdatei für den Dienst myapp erstellt werden
<syntaxhighlight lang="bash" highlight="1" copy line>
nano /etc/tmpfiles.d/myapp.conf
</syntaxhighlight>
 
Inhalt der Datei
<syntaxhighlight lang="bash" highlight="" copy line>
d /run/myapp 0755 root root - -
z /run/myapp 0755 root root - -
</syntaxhighlight>
 
Erläuterung
* Die erste Zeile legt das Verzeichnis an, falls es noch nicht existiert
* Die zweite Zeile bringt das Verzeichnis explizit in den erwarteten Zustand zurück und stellt den SELinux-Kontext dafür wieder her
 
systemd erzeugt die Objekte beim Systemstart selbstständig, der Vorgang kann jedoch auch manuell ausgelöst werden
<syntaxhighlight lang="bash" highlight="1" copy line>
systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf
</syntaxhighlight>
 
Ergebnis prüfen
<syntaxhighlight lang="bash" highlight="" copy line>
ls -Zld /run/myapp
drwxr-xr-x. 2 root root system_u:object_r:httpd_runtime_t:s0 40 ... /run/myapp
</syntaxhighlight>
 
; Der Dienst systemd-tmpfiles hat das Verzeichnis erfolgreich mit dem erforderlichen Kontext vorbereitet
 
In modernen systemd-Versionen werden für einfache Aufgaben häufig Direktiven wie RuntimeDirectory= direkt in der Unit-Datei eines Dienstes (zum Beispiel in myapp.service) verwendet
* Diese Direktive arbeitet nach einem ähnlichen Prinzip: systemd erstellt das Verzeichnis vor dem Start des Dienstes und wendet darauf automatisch die Kontextregeln aus der SELinux-Datenbank an
 
tmpfiles.d bleibt jedoch für komplexere Szenarien, die Bereinigung alter Dateien und die Konfiguration gemeinsam genutzter Ressourcen unverzichtbar
 
{{navigation|Linux/SELinux/09 Container|Linux/SELinux/11 Fehlerbehebung}}
 
= RHEL =
 
== Beschreibung ==
; Systemdienste werden vom '''systemd'''-Daemon gesteuert
Frühere Daemons konnten auf zwei Arten gestartet werden
* Beim Systemstart führte der System-V-Daemon '''init''' ein Skript namens '''init.rc''' aus, woraufhin dieses Skript den erforderlichen Daemon startete
 
Beispielsweise erhielt der Apache-Server, der beim Systemstart gestartet wurde, das folgende SELinux-Label:
<syntaxhighlight lang="bash" highlight="1">
system_u:system_r:httpd_t:s0
</syntaxhighlight>
 
Ein Administrator startete das '''init.rc''' Skript manuell, wodurch der Daemon ausgeführt wurde
 
Wenn der Befehl '''service httpd restart''' auf dem Apache-Server aufgerufen wurde, sah das resultierende SELinux-Label wie folgt aus:
<syntaxhighlight lang="bash" highlight="1">
unconfined_u:system_r:httpd_t:s0
</syntaxhighlight>
 
Bei manuellem Start übernahm der Prozess den Benutzerteil des SELinux-Labels, das ihn gestartet hatte, was die Labeling-Praktiken in den beiden oben genannten Szenarien inkonsistent machte
* Beim '''systemd'''-Daemon verlaufen die Übergänge ganz anders
* Da '''systemd''' alle Aufrufe zum Starten und Beenden von Daemons auf dem System unter Verwendung des Typs '''init_t''' verarbeitet, kann es den Benutzerteil des Labels überschreiben, wenn ein Daemon manuell neu gestartet wird
* Infolgedessen lauten die Labels in beiden oben genannten Szenarien wie erwartet '''system_u:system_r:httpd_t:s0''' und die SELinux-Richtlinie könnte verbessert werden, um zu regeln, welche Domänen welche Einheiten steuern dürfen
 
== Berechtigungen für Dienste ==
In früheren Versionen von Red Hat Enterprise Linux konnte ein Administrator anhand des Labels des System V-Init-Skripts steuern, welche Benutzer oder Anwendungen Dienste starten oder stoppen durften
* Jetzt startet und stoppt '''systemd''' alle Dienste, und Benutzer und Prozesse kommunizieren mit '''systemd''' über das Dienstprogramm '''systemctl'''
* Der '''systemd'''-Daemon kann die SELinux-Richtlinie abfragen und die Kennzeichnung des aufrufenden Prozesses sowie die Kennzeichnung der Unit-Datei, die der Aufrufer zu verwalten versucht, überprüfen und anschließend bei SELinux erfragen, ob dem Aufrufer der Zugriff gestattet ist
* Dieser Ansatz stärkt die Zugriffskontrolle auf kritische Systemfunktionen, zu denen das Starten und Beenden von Systemdiensten gehört
 
Administratoren mussten etwa zuvor dem NetworkManager erlauben, '''systemctl''' auszuführen, um eine D-Bus-Nachricht an '''systemd''' zu senden, das daraufhin den vom NetworkManager angeforderten Dienst startete oder stoppte
* Tatsächlich durfte der NetworkManager alles tun, was '''systemctl''' tun konnte
* Es war zudem unmöglich, Administratoren mit eingeschränkten Rechten so einzurichten, dass sie nur bestimmte Dienste starten oder stoppen konnten
 
Um diese Probleme zu beheben, fungiert '''systemd''' auch als SELinux-Zugriffsmanager
* Es kann das Label des Prozesses abrufen, der '''systemctl''' ausführt, oder des Prozesses, der eine D-Bus-Nachricht an '''systemd''' gesendet hat
* Der Daemon sucht dann nach dem Label der Unit-Datei, die der Prozess konfigurieren wollte
* Schließlich kann '''systemd''' Informationen vom Kernel abrufen, wenn die SELinux-Richtlinie den spezifischen Zugriff zwischen dem Prozess-Label und dem Unit-Datei-Label erlaubt
* Das bedeutet, dass eine kompromittierte Anwendung, die für einen bestimmten Dienst mit '''systemd''' interagieren muss, nun durch SELinux eingeschränkt werden kann
* Richtlinienentwickler können diese fein abgestimmten Steuerungen auch nutzen, um Administratoren einzuschränken
 
Die Richtlinienänderungen beinhalten eine neue Klasse namens '''service''', mit den folgenden Berechtigungen
<syntaxhighlight lang="bash" highlight="" line>
class service
{
      start
      stop
      status
      reload
      kill
      load
      enable
      disable
}
</syntaxhighlight>
 
Beispielsweise kann ein Richtlinienentwickler nun einer Domäne erlauben, den Status eines Dienstes abzurufen oder einen Dienst zu starten und zu stoppen, jedoch nicht, einen Dienst zu aktivieren oder zu deaktivieren
* Zugriffskontrolloperationen in SELinux und '''systemd''' stimmen nicht in allen Fällen überein
* Es wurde eine Zuordnung definiert, um '''systemd'''-Methodenaufrufe mit SELinux-Zugriffsprüfungen abzugleichen
* Tabelle „Zuordnung von Methodenaufrufen in systemd-Unit-Dateien zu SELinux-Zugriffsprüfungen“, ordnet Zugriffsprüfungen für Unit-Dateien zu, während Tabelle „Zuordnung von allgemeinen systemd-Systemaufrufen zu SELinux-Zugriffsprüfungen“, Zugriffsprüfungen für das System im Allgemeinen abdeckt
* Wird in keiner der beiden Tabellen eine Übereinstimmung gefunden, wird die Systemprüfung „undefined“ aufgerufen
 
== Methodenaufrufe ==
; Systemd-Unit-Datei-Methodenaufrufen
; systemd-Unit-Datei-Methodenaufrufen zu SELinux-Zugriffsprüfungen
{| class="wikitable options big"
|-  
|-  
! align=center| systemd unit file method
! align=center| systemd-Unit-Datei-Methode
! align=center| SELinux access check
! align=center| SELinux-Zugriffsprüfung
|-  
|-  
|| DisableUnitFiles
|| DisableUnitFiles
Zeile 91: Zeile 188:
|| MaskUnitFiles
|| MaskUnitFiles
|| disable
|| disable
|-  
|-
|| PresetUnitFiles
|| PresetUnitFiles
|| enable
|| aktivieren
|-  
|-
|| ReenableUnitFiles
|| ReenableUnitFiles
|| enable
|| aktivieren
|-  
|-
|| Reexecute
|| Reexecute
|| start
|| starten
|-  
|-
|| Reload
|| Reload
|| reload
|| neu laden
|-  
|-
|| ReloadOrRestart
|| ReloadOrRestart
|| start
|| starten
|-  
|-
|| ReloadOrRestartUnit
|| ReloadOrRestartUnit
|| start
|| starten
|-  
|-
|| ReloadOrTryRestart
|| ReloadOrTryRestart
|| start
|| starten
|-  
|-
|| ReloadOrTryRestartUnit
|| ReloadOrTryRestartUnit
|| start
|| start
|-  
|-
|| ReloadUnit
|| ReloadUnit
|| reload
|| reload
|-  
|-
|| ResetFailed
|| ResetFailed
|| stop
|| stop
|-  
|-
|| ResetFailedUnit
|| ResetFailedUnit
|| stop
|| stop
|-  
|-
|| Restart
|| Restart
|| start
|| start
|-  
|-
|| RestartUnit
|| RestartUnit
|| start
|| start
|-  
|-
|| Start
|| Start
|| start
|| start
|-  
|-
|| StartUnit
|| StartUnit
|| start
|| start
|-  
|-
|| StartUnitReplace
|| StartUnitReplace
|| start
|| start
|-  
|-
|| Stop
|| Stop
|| stop
|| stop
|-  
|-
|| StopUnit
|| StopUnit
|| stop
|| stop
|-  
|-
|| TryRestart
|| TryRestart
|| start
|| start
|-  
|-
|| TryRestartUnit
|| TryRestartUnit
|| start
|| start
|-  
|-
|| UnmaskUnitFiles
|| UnmaskUnitFiles
|| enable
|| enable
Zeile 157: Zeile 254:
|}
|}


; Mapping of systemd unit file method calls on SELinux access checks
 
{|  
; Methodenaufrufen in systemd-Unit-Dateien und SELinux-Zugriffsprüfungen
{| class="wikitable options big"
|-  
|-  
! align=center| systemd unit file method
! align=center| Methode in systemd-Unit-Datei
! align=center| SELinux access check
! align=center| SELinux-Zugriffsprüfung
|-  
|-  
|| DisableUnitFiles
|| DisableUnitFiles
|| disable
|| deaktivieren
|-  
|-  
|| EnableUnitFiles
|| EnableUnitFiles
|| enable
|| aktivieren
|-  
|-  
|| GetUnit
|| GetUnit
|| status
|| Status
|-  
|-
|| GetUnitByPID
|| GetUnitByPID
|| status
|| status
|-  
|-
|| GetUnitFileState
|| GetUnitFileState
|| status
|| status
|-  
|-
|| Kill
|| Kill
|| stop
|| stop
|-  
|-
|| KillUnit
|| KillUnit
|| stop
|| stop
|-  
|-
|| LinkUnitFiles
|| LinkUnitFiles
|| enable
|| enable
|-  
|-
|| ListUnits
|| ListUnits
|| status
|| status
|-  
|-
|| LoadUnit
|| LoadUnit
|| status
|| status
|-  
|-
|| MaskUnitFiles
|| MaskUnitFiles
|| disable
|| deaktivieren
|-  
|-
|| PresetUnitFiles
|| PresetUnitFiles
|| enable
|| aktivieren
|-  
|-
|| ReenableUnitFiles
|| ReenableUnitFiles
|| enable
|| aktivieren
|-  
|-
|| Reexecute
|| Reexecute
|| start
|| starten
|-  
|-
|| Reload
|| Reload
|| reload
|| neu laden
|-  
|-
|| ReloadOrRestart
|| ReloadOrRestart
|| start
|| starten
|-  
|-
|| ReloadOrRestartUnit
|| ReloadOrRestartUnit
|| start
|| starten
|-  
|-
|| ReloadOrTryRestart
|| Neu laden oder Neustart versuchen
|| start
|| starten
|-  
|-
|| ReloadOrTryRestartUnit
|| Neu laden oder Neustart versuchen (Einheit)
|| start
|| starten
|-  
|-
|| ReloadUnit
|| Einheit neu laden
|| reload
|| neu laden
|-  
|-
|| ResetFailed
|| Zurücksetzen fehlgeschlagen
|| stop
|| stoppen
|-  
|-
|| ResetFailedUnit
|| Zurücksetzen fehlgeschlagen (Einheit)
|| stop
|| stoppen
|-  
|-
|| Restart
|| Neustart
|| start
|| starten
|-  
|-
|| RestartUnit
|| Einheit neu starten
|| start
|| starten
|-  
|-
|| Start
|| Start
|| start
|| start
|-  
|-
|| StartUnit
|| StartUnit
|| start
|| start
|-  
|-
|| StartUnitReplace
|| StartUnitReplace
|| start
|| start
|-  
|-
|| Stop
|| Stop
|| stop
|| stop
|-  
|-
|| StopUnit
|| StopUnit
|| stop
|| stop
|-  
|-
|| TryRestart
|| TryRestart
|| start
|| start
|-  
|-
|| TryRestartUnit
|| TryRestartUnit
|| start
|| start
|-  
|-
|| UnmaskUnitFiles
|| UnmaskUnitFiles
|| enable
|| enable
Zeile 261: Zeile 359:
|}
|}


Mapping of systemd general system calls on SELinux access checks
== Systemd- und SELinux-Zugriffsprüfungen ==
{|  
; Zuordnung von allgemeinen systemd-Systemaufrufen zu SELinux-Zugriffsprüfungen
{| class="wikitable options big"
|-  
|-  
! align=center| systemd general system call
! align=center| Allgemeiner systemd-Systemaufruf
! align=center| SELinux access check
! align=center| SELinux-Zugriffsprüfung
|-  
|-  
|| ClearJobs
|| ClearJobs
Zeile 278: Zeile 377:
|| GetAll
|| GetAll
|| status
|| status
|-  
|-
|| GetJob
|| GetJob
|| status
|| status
|-  
|-
|| GetSeat
|| GetSeat
|| status
|| status
|-  
|-
|| GetSession
|| GetSession
|| status
|| status
|-  
|-
|| GetSessionByPID
|| GetSessionByPID
|| status
|| status
|-  
|-
|| GetUser
|| GetUser
|| status
|| status
|-  
|-
|| Halt
|| Halt
|| halt
|| halt
|-  
|-
|| Introspect
|| Introspect
|| status
|| status
|-  
|-
|| KExec
|| KExec
|| reboot
|| reboot
|-  
|-
|| KillSession
|| KillSession
|| halt
|| halt
|-  
|-
|| KillUser
|| KillUser
|| halt
|| halt
|-  
|-
|| ListJobs
|| ListJobs
|| status
|| status
|-  
|-
|| ListSeats
|| ListSeats
|| status
|| status
|-  
|-
|| ListSessions
|| ListSessions
|| status
|| status
|-  
|-
|| ListUsers
|| ListUsers
|| status
|| status
|-  
|-
|| LockSession
|| LockSession
|| halt
|| halt
|-  
|-
|| PowerOff
|| PowerOff
|| halt
|| halt
|-  
|-
|| Reboot
|| Reboot
|| reboot
|| reboot
|-  
|-
|| SetUserLinger
|| SetUserLinger
|| halt
|| halt
|-  
|-
|| TerminateSeat
|| TerminateSeat
|| halt
|| halt
|-  
|-
|| TerminateSession
|| TerminateSession
|| halt
|| halt
|-  
|-
|| TerminateUser
|| TerminateUser
|| halt
|| halt
Zeile 344: Zeile 443:
|}
|}


; Mapping of systemd general system calls on SELinux access checks
== SELinux-Richtlinie für einen Systemdienst ==
{|
Mit dem Dienstprogramm '''sesearch''' können Sie Richtlinienregeln für einen Systemdienst auflisten
|-  
! align=center| systemd general system call
! align=center| SELinux access check
|-
|| ClearJobs
|| reboot
|-
|| FlushDevices
|| halt
|-
|| Get
|| status
|-
|| GetAll
|| status
|-
|| GetJob
|| status
|-
|| GetSeat
|| status
|-
|| GetSession
|| status
|-
|| GetSessionByPID
|| status
|-
|| GetUser
|| status
|-
|| Halt
|| halt
|-
|| Introspect
|| status
|-
|| KExec
|| reboot
|-
|| KillSession
|| halt
|-
|| KillUser
|| halt
|-
|| ListJobs
|| status
|-
|| ListSeats
|| status
|-
|| ListSessions
|| status
|-
|| ListUsers
|| status
|-
|| LockSession
|| halt
|-
|| PowerOff
|| halt
|-
|| Reboot
|| reboot
|-
|| SetUserLinger
|| halt
|-
|| TerminateSeat
|| halt
|-
|| TerminateSession
|| halt
|-
|| TerminateUser
|| halt
|-
|}


; SELinux Policy for a System Service
; Beispiel
By using the '''sesearch''' utility, you can list policy rules for a system service
<syntaxhighlight lang="bash" highlight="1" line copy>
sesearch -A -s NetworkManager_t -c service
allow NetworkManager_t dnsmasq_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t nscd_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t ntpd_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t pppd_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t polipo_unit_file_t : service { start stop status reload kill load } ;
</syntaxhighlight>


For example, calling the '''sesearch -A -s NetworkManager_t -c service''' command returns
== SELinux und journald ==
allow NetworkManager_t dnsmasq_unit_file_t : service { start stop status reload kill load } ;
In '''systemd''' ist der '''journald''' Daemon (auch bekannt als '''systemd-journal''') die Alternative zum '''syslog''' Dienst, einem Systemdienst, der Protokolldaten sammelt und speichert
allow NetworkManager_t nscd_unit_file_t : service { start stop status reload kill load } ;
* Er erstellt und verwaltet strukturierte und indizierte Journale auf der Grundlage von Protokollinformationen, die vom Kernel, von Benutzerprozessen über die '''libc''' '‚'syslog()‘'' -Funktion, aus der Standard- und Fehlerausgabe von Systemdiensten oder über seine native API empfangen werden
allow NetworkManager_t ntpd_unit_file_t : service { start stop status reload kill load } ;
* Er sammelt implizit zahlreiche Metadatenfelder für jede Protokollmeldung auf sichere Weise
allow NetworkManager_t pppd_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t polipo_unit_file_t : service { start stop status reload kill load } ;


=== SELinux and journald ===
Der '''systemd-journal''' -Dienst kann zusammen mit SELinux verwendet werden, um die Sicherheit zu erhöhen
In '''systemd''', the '''journald''' daemon (also known as '''systemd-journal''') is the alternative for the '''syslog''' utility, which is a system service that collects and stores logging data
* SELinux kontrolliert Prozesse, indem es ihnen nur erlaubt, das zu tun, wofür sie vorgesehen sind; manchmal sogar noch weniger, je nach den Sicherheitszielen des Policy-Autors
* It creates and maintains structured and indexed journals based on logging information that is received from the kernel, from user processes using the '''libc''' '''syslog()''' function, from standard and error output of system services, or using its native API
* Beispielsweise verhindert SELinux, dass ein kompromittierter '''ntpd''' -Prozess etwas anderes tut, als die Netzwerkzeit zu verwalten
* It implicitly collects numerous metadata fields for each log message in a secure way
* Der '''ntpd''' -Prozess sendet jedoch '''syslog''' -Meldungen, sodass SELinux dem kompromittierten Prozess erlauben würde, diese Meldungen weiterhin zu senden
* Der kompromittierte '''ntpd''' könnte '''syslog'''-Meldungen so formatieren, dass sie denen anderer Daemons entsprechen, und damit möglicherweise einen Administrator irreführen oder, schlimmer noch, ein Dienstprogramm, das die '''syslog''' -Datei ausliest, dazu bringen, das gesamte System zu kompromittieren


The '''systemd-journal''' service can be used with SELinux to increase security
Der '''systemd-journal''' -Daemon überprüft alle Protokollmeldungen und fügt ihnen unter anderem SELinux-Labels hinzu
* SELinux controls processes by only allowing them to do what they were designed to do; sometimes even less, depending on the security goals of the policy writer
* So lassen sich Unstimmigkeiten in Protokollmeldungen leicht erkennen und Angriffe dieser Art verhindern, bevor sie stattfinden
* For example, SELinux prevents a compromised '''ntpd''' process from doing anything other than handle Network Time
* Mit dem Dienstprogramm '''journalctl''' können Sie die Protokolle der '''systemd''' Journale abfragen
* However, the '''ntpd''' process sends '''syslog''' messages, so that SELinux would allow the compromised process to continue to send those messages
* Wenn keine Befehlszeilenargumente angegeben werden, listet dieses Dienstprogramm den vollständigen Inhalt des Journals auf, beginnend mit den ältesten Einträgen
* The compromised '''ntpd''' could format '''syslog''' messages to match other daemons and potentially mislead an administrator, or even worse, a utility that reads the '''syslog''' file into compromising the whole system
* Um alle auf dem System erzeugten Protokolle anzuzeigen, einschließlich der Protokolle für Systemkomponenten, führen Sie '''journalctl''' als Root aus
* Wenn Sie es als Nicht-Root-Benutzer ausführen, beschränkt sich die Ausgabe nur auf Protokolle, die sich auf den aktuell angemeldeten Benutzer beziehen


The '''systemd-journal''' daemon verifies all log messages and, among other things, adds SELinux labels to them
; Beispiel
* It is then easy to detect inconsistencies in log messages and prevent an attack of this type before it occurs
Auflisten von Protokollen mit '''journalctl'''
* You can use the '''journalctl''' utility to query logs of '''systemd''' journals
* Es ist möglich, '''journalctl''' zu verwenden, um alle Protokolle aufzulisten, die sich auf ein bestimmtes SELinux-Label beziehen
* If no command-line arguments are specified, running this utility lists the full content of the journal, starting from the oldest entries
* To see all logs generated on the system, including logs for system components, execute '''journalctl''' as root
* If you execute it as a non-root user, the output will be limited only to logs related to the currently logged-in user


; Example
Auflisten alle Protokolle, die unter dem Label '''system_u:system_r:policykit_t:s0''' protokolliert wurden
Listing Logs with '''journalctl'''
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
21. Okt. 10:22:42 localhost.localdomain polkitd[647]: polkitd Version 0.112 gestartet
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Regeln aus dem Verzeichnis /etc/polkit-1/rules.d werden geladen
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Lade Regeln aus dem Verzeichnis /usr/share/polkit-1/rules.d
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Laden, Kompilieren und Ausführen von 5 Regeln abgeschlossen
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Name org.freedesktop.PolicyKit1 auf dem Systembus abgerufen 21. Okt. 10:23:10 localhost polkitd [647]: Authentifizierungsagent für unix-session:c1 registriert (Systembus-Name: 1.49, Objektpfad /org/freedesktop/PolicyKit1/AuthenticationAgent, Locale en_US.UTF-8) (vom Bus getrennt)
21. Okt. 10:23:35 localhost polkitd[647]: Authentifizierungsagent für unix-session:c1 abgemeldet (Systembusname :1.80 [/usr/bin/gnome-shell --mode=classic], Objektpfad /org/freedesktop/PolicyKit1/AuthenticationAgent, Locale en_US.utf8)
</syntaxhighlight>


It is possible to use '''journalctl''' for listing all logs related to a particular SELinux label
Weitere Informationen zu '''journalctl''' finden Sie auf der Manpage journalctl(1)
* For example, the following command lists all logs logged under the '''system_u:system_r:policykit_t:s0''' label


sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
== Systemd und Temporäre Verzeichnisse ==
  Oct 21 10:22:42 localhost.localdomain polkitd[647]: Started polkitd version 0.112
* Datei und Verzeichnis Erstellung durch Systemd
  Oct 21 10:22:44 localhost.localdomain polkitd[647]: Loading rules from directory /etc/polkit-1/rules.d
* SELinux Context setzen via systemd-tmpfiles
  Oct 21 10:22:44 localhost.localdomain polkitd[647]: Loading rules from directory /usr/share/polkit-1/rules.d
  Oct 21 10:22:44 localhost.localdomain polkitd[647]: Finished loading, compiling and executing 5 rules
  Oct 21 10:22:44 localhost.localdomain polkitd[647]: Acquired the name org.freedesktop.PolicyKit1 on the system bus Oct 21 10:23:10 localhost polkitd[647]: Registered Authentication Agent for unix-session:c1 (system bus name :1.49, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
  Oct 21 10:23:35 localhost polkitd[647]: Unregistered Authentication Agent for unix-session:c1 (system bus name :1.80 [/usr/bin/gnome-shell --mode=classic], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.utf8)


For more information about '''journalctl''', see the journalctl(1) manual page
{{navigation|Linux/SELinux/09 Container|Linux/SELinux/11 Fehlerbehebung}}


[[Kategorie:SELinux/DOC]]
[[Kategorie:Linux/SELinux]]

Aktuelle Version vom 31. März 2026, 11:23 Uhr

Linux/SELinux/10 Systemd - SELinux-Zugriffskontrolle mit systemdn steuern

Beschreibung

Systemd

Nahezu jeder Dienst in Linux erzeugt beim Start oder im laufenden Betrieb Hilfsobjekte: Verzeichnisse unter /run, PID-Dateien, UNIX-Sockets, Journal-Verzeichnisse, temporäre Dateien, Caches und andere Betriebsdaten

Verzeichnisse wie /run oder /tmp können als temporäre Dateisysteme (tmpfs) eingehängt sein

  • Das bedeutet, dass ihr Inhalt bei jedem Neustart des Servers vollständig gelöscht wird

Wenn ein Dienst (zum Beispiel ein Webserver oder ein DBMS) für seinen Betrieb ein eigenes Verzeichnis unter /run benötigt (zum Beispiel /run/myapp/), entstehen zwei Probleme

  1. Das Verzeichnis muss bei jedem Systemstart erneut angelegt werden, bevor der Dienst versucht, darauf zuzugreifen
  2. Wenn der Dienst das Verzeichnis selbst anlegt, kann es den Standardkontext des Elternverzeichnisses erben (zum Beispiel var_run_t)
  • In einer strikten SELinux-Policy kann dem Dienst die Arbeit mit dem Basistyp var_run_t untersagt sein, sodass ein spezifischer Kontext erforderlich ist (zum Beispiel myapp_var_run_t)

systemd-tmpfiles

Zur Verwaltung temporärer Dateien und Verzeichnisse dient das Werkzeug systemd-tmpfiles
  • Beim Systemstart (oder per Timer) liest es Konfigurationsdateien aus den Verzeichnissen /etc/tmpfiles.d/, /run/tmpfiles.d/ und /usr/lib/tmpfiles.d/ und erstellt, entfernt oder bereinigt Dateien und Verzeichnisse entsprechend den Regeln

systemd-tmpfiles ist eng mit SELinux integriert

  • Beim Erzeugen eines beliebigen Objekts greift das Werkzeug automatisch auf die SELinux-Kontextdatenbank (file_contexts) zu
  • Dadurch wird das korrekte Label automatisch gesetzt, ohne dass nach jedem Neustart manuell restorecon ausgeführt werden muss

Regeln

Regeln können unter folgenden Pfaden gefunden werden

  • /usr/lib/tmpfiles.d/ — vordefinierte Regeln
  • /run/tmpfiles.d/ — Runtime-Regeln
  • /etc/tmpfiles.d/ — lokale und administrative Regeln

Die Regeln haben folgendes Format

Typ  Pfad  Modus  Benutzer  Gruppe  Alter  Argument
  • Typ: Gibt an, was getan werden soll
    • d (Verzeichnis anlegen, falls es nicht existiert)
    • f (Datei anlegen)
    • z (SELinux-Kontext und Rechte wiederherstellen, ohne das Objekt zu erzeugen)
    • Z (SELinux-Kontext rekursiv wiederherstellen)
  • Pfad: Absoluter Pfad zum Objekt
  • Modus: Zugriffsrechte (zum Beispiel 0755)
  • Benutzer/Gruppe (UID/GID): Eigentümer des Objekts

Regel anlegen

Hier wird der Prozess zur Vorbereitung einer Umgebung unter Verwendung des Typs httpd_runtime_t für einen neuen Dienst myapp demonstriert, der eine PID-Datei im Verzeichnis /run/myapp benötigt

Zunächst muss eine File-Context-Regel in die SELinux-Policy-Datenbank eingetragen werden, damit das System weiß, welcher Kontext für den benötigten Pfad erwartet wird

semanage fcontext -a -t httpd_runtime_t "/run/myapp(/.*)?"

Danach muss eine Konfigurationsdatei für den Dienst myapp erstellt werden

nano /etc/tmpfiles.d/myapp.conf

Inhalt der Datei

d /run/myapp 0755 root root - -
z /run/myapp 0755 root root - -

Erläuterung

  • Die erste Zeile legt das Verzeichnis an, falls es noch nicht existiert
  • Die zweite Zeile bringt das Verzeichnis explizit in den erwarteten Zustand zurück und stellt den SELinux-Kontext dafür wieder her

systemd erzeugt die Objekte beim Systemstart selbstständig, der Vorgang kann jedoch auch manuell ausgelöst werden

systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf

Ergebnis prüfen

ls -Zld /run/myapp
drwxr-xr-x. 2 root root system_u:object_r:httpd_runtime_t:s0 40 ... /run/myapp
Der Dienst systemd-tmpfiles hat das Verzeichnis erfolgreich mit dem erforderlichen Kontext vorbereitet

In modernen systemd-Versionen werden für einfache Aufgaben häufig Direktiven wie RuntimeDirectory= direkt in der Unit-Datei eines Dienstes (zum Beispiel in myapp.service) verwendet

  • Diese Direktive arbeitet nach einem ähnlichen Prinzip: systemd erstellt das Verzeichnis vor dem Start des Dienstes und wendet darauf automatisch die Kontextregeln aus der SELinux-Datenbank an

tmpfiles.d bleibt jedoch für komplexere Szenarien, die Bereinigung alter Dateien und die Konfiguration gemeinsam genutzter Ressourcen unverzichtbar

RHEL

Beschreibung

Systemdienste werden vom systemd-Daemon gesteuert

Frühere Daemons konnten auf zwei Arten gestartet werden

  • Beim Systemstart führte der System-V-Daemon init ein Skript namens init.rc aus, woraufhin dieses Skript den erforderlichen Daemon startete

Beispielsweise erhielt der Apache-Server, der beim Systemstart gestartet wurde, das folgende SELinux-Label:

system_u:system_r:httpd_t:s0

Ein Administrator startete das init.rc Skript manuell, wodurch der Daemon ausgeführt wurde

Wenn der Befehl service httpd restart auf dem Apache-Server aufgerufen wurde, sah das resultierende SELinux-Label wie folgt aus:

unconfined_u:system_r:httpd_t:s0

Bei manuellem Start übernahm der Prozess den Benutzerteil des SELinux-Labels, das ihn gestartet hatte, was die Labeling-Praktiken in den beiden oben genannten Szenarien inkonsistent machte

  • Beim systemd-Daemon verlaufen die Übergänge ganz anders
  • Da systemd alle Aufrufe zum Starten und Beenden von Daemons auf dem System unter Verwendung des Typs init_t verarbeitet, kann es den Benutzerteil des Labels überschreiben, wenn ein Daemon manuell neu gestartet wird
  • Infolgedessen lauten die Labels in beiden oben genannten Szenarien wie erwartet system_u:system_r:httpd_t:s0 und die SELinux-Richtlinie könnte verbessert werden, um zu regeln, welche Domänen welche Einheiten steuern dürfen

Berechtigungen für Dienste

In früheren Versionen von Red Hat Enterprise Linux konnte ein Administrator anhand des Labels des System V-Init-Skripts steuern, welche Benutzer oder Anwendungen Dienste starten oder stoppen durften

  • Jetzt startet und stoppt systemd alle Dienste, und Benutzer und Prozesse kommunizieren mit systemd über das Dienstprogramm systemctl
  • Der systemd-Daemon kann die SELinux-Richtlinie abfragen und die Kennzeichnung des aufrufenden Prozesses sowie die Kennzeichnung der Unit-Datei, die der Aufrufer zu verwalten versucht, überprüfen und anschließend bei SELinux erfragen, ob dem Aufrufer der Zugriff gestattet ist
  • Dieser Ansatz stärkt die Zugriffskontrolle auf kritische Systemfunktionen, zu denen das Starten und Beenden von Systemdiensten gehört

Administratoren mussten etwa zuvor dem NetworkManager erlauben, systemctl auszuführen, um eine D-Bus-Nachricht an systemd zu senden, das daraufhin den vom NetworkManager angeforderten Dienst startete oder stoppte

  • Tatsächlich durfte der NetworkManager alles tun, was systemctl tun konnte
  • Es war zudem unmöglich, Administratoren mit eingeschränkten Rechten so einzurichten, dass sie nur bestimmte Dienste starten oder stoppen konnten

Um diese Probleme zu beheben, fungiert systemd auch als SELinux-Zugriffsmanager

  • Es kann das Label des Prozesses abrufen, der systemctl ausführt, oder des Prozesses, der eine D-Bus-Nachricht an systemd gesendet hat
  • Der Daemon sucht dann nach dem Label der Unit-Datei, die der Prozess konfigurieren wollte
  • Schließlich kann systemd Informationen vom Kernel abrufen, wenn die SELinux-Richtlinie den spezifischen Zugriff zwischen dem Prozess-Label und dem Unit-Datei-Label erlaubt
  • Das bedeutet, dass eine kompromittierte Anwendung, die für einen bestimmten Dienst mit systemd interagieren muss, nun durch SELinux eingeschränkt werden kann
  • Richtlinienentwickler können diese fein abgestimmten Steuerungen auch nutzen, um Administratoren einzuschränken

Die Richtlinienänderungen beinhalten eine neue Klasse namens service, mit den folgenden Berechtigungen

class service
{
       start
       stop
       status
       reload
       kill
       load
       enable
       disable
}

Beispielsweise kann ein Richtlinienentwickler nun einer Domäne erlauben, den Status eines Dienstes abzurufen oder einen Dienst zu starten und zu stoppen, jedoch nicht, einen Dienst zu aktivieren oder zu deaktivieren

  • Zugriffskontrolloperationen in SELinux und systemd stimmen nicht in allen Fällen überein
  • Es wurde eine Zuordnung definiert, um systemd-Methodenaufrufe mit SELinux-Zugriffsprüfungen abzugleichen
  • Tabelle „Zuordnung von Methodenaufrufen in systemd-Unit-Dateien zu SELinux-Zugriffsprüfungen“, ordnet Zugriffsprüfungen für Unit-Dateien zu, während Tabelle „Zuordnung von allgemeinen systemd-Systemaufrufen zu SELinux-Zugriffsprüfungen“, Zugriffsprüfungen für das System im Allgemeinen abdeckt
  • Wird in keiner der beiden Tabellen eine Übereinstimmung gefunden, wird die Systemprüfung „undefined“ aufgerufen

Methodenaufrufe

Systemd-Unit-Datei-Methodenaufrufen
systemd-Unit-Datei-Methodenaufrufen zu SELinux-Zugriffsprüfungen
systemd-Unit-Datei-Methode SELinux-Zugriffsprüfung
DisableUnitFiles disable
EnableUnitFiles enable
GetUnit status
GetUnitByPID status
GetUnitFileState status
Kill stop
KillUnit stop
LinkUnitFiles enable
ListUnits status
LoadUnit status
MaskUnitFiles disable
PresetUnitFiles aktivieren
ReenableUnitFiles aktivieren
Reexecute starten
Reload neu laden
ReloadOrRestart starten
ReloadOrRestartUnit starten
ReloadOrTryRestart starten
ReloadOrTryRestartUnit start
ReloadUnit reload
ResetFailed stop
ResetFailedUnit stop
Restart start
RestartUnit start
Start start
StartUnit start
StartUnitReplace start
Stop stop
StopUnit stop
TryRestart start
TryRestartUnit start
UnmaskUnitFiles enable


Methodenaufrufen in systemd-Unit-Dateien und SELinux-Zugriffsprüfungen
Methode in systemd-Unit-Datei SELinux-Zugriffsprüfung
DisableUnitFiles deaktivieren
EnableUnitFiles aktivieren
GetUnit Status
GetUnitByPID status
GetUnitFileState status
Kill stop
KillUnit stop
LinkUnitFiles enable
ListUnits status
LoadUnit status
MaskUnitFiles deaktivieren
PresetUnitFiles aktivieren
ReenableUnitFiles aktivieren
Reexecute starten
Reload neu laden
ReloadOrRestart starten
ReloadOrRestartUnit starten
Neu laden oder Neustart versuchen starten
Neu laden oder Neustart versuchen (Einheit) starten
Einheit neu laden neu laden
Zurücksetzen fehlgeschlagen stoppen
Zurücksetzen fehlgeschlagen (Einheit) stoppen
Neustart starten
Einheit neu starten starten
Start start
StartUnit start
StartUnitReplace start
Stop stop
StopUnit stop
TryRestart start
TryRestartUnit start
UnmaskUnitFiles enable

Systemd- und SELinux-Zugriffsprüfungen

Zuordnung von allgemeinen systemd-Systemaufrufen zu SELinux-Zugriffsprüfungen
Allgemeiner systemd-Systemaufruf SELinux-Zugriffsprüfung
ClearJobs reboot
FlushDevices halt
Get status
GetAll status
GetJob status
GetSeat status
GetSession status
GetSessionByPID status
GetUser status
Halt halt
Introspect status
KExec reboot
KillSession halt
KillUser halt
ListJobs status
ListSeats status
ListSessions status
ListUsers status
LockSession halt
PowerOff halt
Reboot reboot
SetUserLinger halt
TerminateSeat halt
TerminateSession halt
TerminateUser halt

SELinux-Richtlinie für einen Systemdienst

Mit dem Dienstprogramm sesearch können Sie Richtlinienregeln für einen Systemdienst auflisten

Beispiel
sesearch -A -s NetworkManager_t -c service
allow NetworkManager_t dnsmasq_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t nscd_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t ntpd_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t pppd_unit_file_t : service { start stop status reload kill load } ;
allow NetworkManager_t polipo_unit_file_t : service { start stop status reload kill load } ;

SELinux und journald

In systemd ist der journald Daemon (auch bekannt als systemd-journal) die Alternative zum syslog Dienst, einem Systemdienst, der Protokolldaten sammelt und speichert

  • Er erstellt und verwaltet strukturierte und indizierte Journale auf der Grundlage von Protokollinformationen, die vom Kernel, von Benutzerprozessen über die libc '‚'syslog()‘ -Funktion, aus der Standard- und Fehlerausgabe von Systemdiensten oder über seine native API empfangen werden
  • Er sammelt implizit zahlreiche Metadatenfelder für jede Protokollmeldung auf sichere Weise

Der systemd-journal -Dienst kann zusammen mit SELinux verwendet werden, um die Sicherheit zu erhöhen

  • SELinux kontrolliert Prozesse, indem es ihnen nur erlaubt, das zu tun, wofür sie vorgesehen sind; manchmal sogar noch weniger, je nach den Sicherheitszielen des Policy-Autors
  • Beispielsweise verhindert SELinux, dass ein kompromittierter ntpd -Prozess etwas anderes tut, als die Netzwerkzeit zu verwalten
  • Der ntpd -Prozess sendet jedoch syslog -Meldungen, sodass SELinux dem kompromittierten Prozess erlauben würde, diese Meldungen weiterhin zu senden
  • Der kompromittierte ntpd könnte syslog-Meldungen so formatieren, dass sie denen anderer Daemons entsprechen, und damit möglicherweise einen Administrator irreführen oder, schlimmer noch, ein Dienstprogramm, das die syslog -Datei ausliest, dazu bringen, das gesamte System zu kompromittieren

Der systemd-journal -Daemon überprüft alle Protokollmeldungen und fügt ihnen unter anderem SELinux-Labels hinzu

  • So lassen sich Unstimmigkeiten in Protokollmeldungen leicht erkennen und Angriffe dieser Art verhindern, bevor sie stattfinden
  • Mit dem Dienstprogramm journalctl können Sie die Protokolle der systemd Journale abfragen
  • Wenn keine Befehlszeilenargumente angegeben werden, listet dieses Dienstprogramm den vollständigen Inhalt des Journals auf, beginnend mit den ältesten Einträgen
  • Um alle auf dem System erzeugten Protokolle anzuzeigen, einschließlich der Protokolle für Systemkomponenten, führen Sie journalctl als Root aus
  • Wenn Sie es als Nicht-Root-Benutzer ausführen, beschränkt sich die Ausgabe nur auf Protokolle, die sich auf den aktuell angemeldeten Benutzer beziehen
Beispiel

Auflisten von Protokollen mit journalctl

  • Es ist möglich, journalctl zu verwenden, um alle Protokolle aufzulisten, die sich auf ein bestimmtes SELinux-Label beziehen

Auflisten alle Protokolle, die unter dem Label system_u:system_r:policykit_t:s0 protokolliert wurden

sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
21. Okt. 10:22:42 localhost.localdomain polkitd[647]: polkitd Version 0.112 gestartet
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Regeln aus dem Verzeichnis /etc/polkit-1/rules.d werden geladen
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Lade Regeln aus dem Verzeichnis /usr/share/polkit-1/rules.d
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Laden, Kompilieren und Ausführen von 5 Regeln abgeschlossen
21. Okt. 10:22:44 localhost.localdomain polkitd[647]: Name org.freedesktop.PolicyKit1 auf dem Systembus abgerufen 21. Okt. 10:23:10 localhost polkitd [647]: Authentifizierungsagent für unix-session:c1 registriert (Systembus-Name: 1.49, Objektpfad /org/freedesktop/PolicyKit1/AuthenticationAgent, Locale en_US.UTF-8) (vom Bus getrennt)
21. Okt. 10:23:35 localhost polkitd[647]: Authentifizierungsagent für unix-session:c1 abgemeldet (Systembusname :1.80 [/usr/bin/gnome-shell --mode=classic], Objektpfad /org/freedesktop/PolicyKit1/AuthenticationAgent, Locale en_US.utf8)

Weitere Informationen zu journalctl finden Sie auf der Manpage journalctl(1)

Systemd und Temporäre Verzeichnisse

  • Datei und Verzeichnis Erstellung durch Systemd
  • SELinux Context setzen via systemd-tmpfiles