Systemd Fähigkeiten von Diensten wegnehmen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
  • Eine weitere sehr mächtige Sicherheitsoption in systemd ist CapabilityBoundingSet=, die es ermöglicht, auf relativ feinkörnige Weise einzuschränken, welche Kernel-Fähigkeiten ein gestarteter Dienst behält:
... 
[Service]
ExecStart=...
CapabilityBoundingSet=CAP_CHOWN CAP_KILL
...
  • Im obigen Beispiel werden nur die CAP_CHOWN- und CAP_KILL-Fähigkeiten vom Dienst beibehalten, und der Dienst und alle Prozesse, die er möglicherweise erstellt, haben keine Chance,

zu erwerben, nicht einmal über setuid-Binärdateien.

  • Die Liste der aktuell definierten Capabilities ist in Capabilities(7) verfügbar.
  • Leider sind einige der definierten Capabilities zu generisch (zB CAP_SYS_ADMIN), dennoch sind sie dennoch ein sehr nützliches Tool, insbesondere für Dienste, die ansonsten mit vollen Root-Rechten laufen.
  • Es ist nicht immer einfach, genau zu ermitteln, welche Fähigkeiten erforderlich sind, damit ein Dienst sauber läuft, und erfordert ein wenig Testen.
  • Um diesen Prozess ein wenig zu vereinfachen, ist es möglich, bestimmte Fähigkeiten, die definitiv nicht benötigt werden, auf die Blacklist zu setzen, anstatt alle, die möglicherweise benötigt werden, auf die Whitelist zu setzen.
  • Beispiel: CAP_SYS_PTRACE ist eine besonders leistungsfähige und sicherheitsrelevante Fähigkeit, die für die Implementierung von Debuggern benötigt wird, da sie die Introspektion und Manipulation jedes lokalen Prozesses auf dem System ermöglicht.
  • Ein Dienst wie Apache hat offensichtlich nichts damit zu tun, ein Debugger für andere Prozesse zu sein, daher ist es sicher, die Fähigkeit daraus zu entfernen:
...
[Service]
ExecStart=...
CapabilityBoundingSet=~CAP_SYS_PTRACE
...
  • Das Zeichen ~, das der Wertzuweisung hier vorangestellt ist, kehrt die Bedeutung der Option um: Anstatt alle Fähigkeiten aufzulisten, die der Dienst behält, können Sie diejenigen auflisten, die er nicht behält.


  • Achtung: Einige Dienste reagieren möglicherweise verwirrt, wenn bestimmte Funktionen für sie nicht verfügbar sind.
  • Wenn Sie also die richtigen Fähigkeiten bestimmen, die Sie behalten möchten, müssen Sie dies sorgfältig tun, und es könnte eine gute Idee sein, mit den Upstream-Betreuern zu sprechen, da sie am besten wissen sollten, welche Operationen ein Dienst möglicherweise erfolgreich ausführen muss.
  • Vorbehalt 2: Fähigkeiten sind kein Zauberstab. Sie möchten sie wahrscheinlich kombinieren und in Verbindung mit anderen Sicherheitsoptionen verwenden, um sie wirklich nützlich zu machen.
  • Um einfach zu überprüfen, welche Prozesse auf Ihrem System welche Fähigkeiten behalten, verwenden Sie das Tool pscap aus dem Paket libcap-ng-utils.

Die Verwendung der CapabilityBoundingSet=-Option von systemd ist oft ein einfacher, auffindbarer und kostengünstiger Ersatz für das individuelle Patchen aller System-Daemons, um das Capability Bounding Set selbst zu steuern.