systemd Service Sandboxing: ProtectSystem, PrivateTmp, NoNewPrivileges

Systemd bietet weitreichende Möglichkeiten, Dienste innerhalb von Linux-Systemen zu isolieren und abzusichern. Sandboxing-Optionen wie ProtectSystem, PrivateTmp und NoNewPrivileges reduzieren die Angriffsfläche und verhindern, dass kompromittierte Services das System weiter gefährden. In diesem Tutorial lernen Sie, wie diese Optionen eingesetzt werden, um Serverdienste sicher zu betreiben.

Grundlagen der systemd Service Sandboxing

Systemd ermöglicht es, für jeden Dienst individuelle Sicherheitsrichtlinien zu definieren. Dabei werden Prozesse eingeschränkt, Dateisystembereiche geschützt und Privilegien kontrolliert. Wichtige Parameter sind:

  • ProtectSystem: Einschränkung des Zugriffs auf das Root-Dateisystem.
  • PrivateTmp: Isolierung des /tmp-Verzeichnisses für den Dienst.
  • NoNewPrivileges: Verhindert das Erlangen neuer Privilegien, z. B. durch SUID-Binaries.

ProtectSystem im Detail

Mit ProtectSystem kann ein Dienst auf bestimmte Teile des Dateisystems beschränkt werden:

  • ProtectSystem=full: /usr und /boot nur lesbar, /etc standardmäßig schreibbar.
  • ProtectSystem=strict: Nur /etc ist beschreibbar, alle anderen Pfade nur lesbar.
  • ProtectSystem=yes: Basisverzeichnisse wie /usr, /bin, /sbin schreibgeschützt.

Beispielkonfiguration

[Service]
ExecStart=/usr/bin/myapp
ProtectSystem=full

Damit kann der Dienst nur noch auf /etc und temporäre Bereiche schreiben. Änderungen an Systembinaries werden verhindert, was die Integrität des Systems erhöht.

PrivateTmp zur Isolation temporärer Dateien

Mit PrivateTmp=yes erhält jeder Dienst ein eigenes, isoliertes /tmp- und /var/tmp-Verzeichnis. Prozesse können so keine temporären Dateien anderer Dienste sehen oder manipulieren.

Beispiel

[Service]
ExecStart=/usr/bin/myapp
PrivateTmp=yes

Dies ist besonders sinnvoll für Webserver oder Dienste, die temporäre Dateien für Session-Daten nutzen. Ein Zugriff auf das System-/tmp wird damit unterbunden.

NoNewPrivileges: Schutz vor Privilege Escalation

Die Option NoNewPrivileges=yes verhindert, dass ein Dienst zusätzliche Rechte erlangt. Selbst wenn ein Angreifer einen Prozess übernimmt, kann kein SUID-Binary oder Kernel-Exploit zusätzliche Privilegien erzeugen.

Beispiel

[Service]
ExecStart=/usr/bin/myapp
NoNewPrivileges=yes

Kombiniert mit anderen Sicherheitsoptionen reduziert dies das Risiko einer Privilege Escalation erheblich.

Weitere Security-Optionen von systemd

Für maximale Absicherung können mehrere Optionen kombiniert werden:

  • PrivateDevices=yes: Zugriff auf /dev auf ein Minimum beschränken.
  • ProtectHome=yes: Verhindert Zugriff auf /home der Benutzer.
  • ReadOnlyPaths=/opt: Spezifische Verzeichnisse schreibgeschützt halten.
  • CapabilityBoundingSet=CAP_NET_BIND_SERVICE: Nur notwendige Capabilities erlauben.

Kombinationsbeispiel

[Service]
ExecStart=/usr/bin/myapp
ProtectSystem=strict
PrivateTmp=yes
NoNewPrivileges=yes
ProtectHome=yes
ReadOnlyPaths=/opt
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

Testing und Troubleshooting

Nach Anpassung der Unit-Dateien ist es wichtig, Dienste zu reloaden und den Status zu prüfen:

sudo systemctl daemon-reexec
sudo systemctl restart myapp
sudo systemctl status myapp

Audit-Logs und journalctl zeigen Verstöße gegen gesetzte Beschränkungen an.

Best Practices für produktive Umgebungen

  • Dienste zunächst im Testsystem mit ProtectSystem=full und PrivateTmp=yes ausführen, bevor Enforcing auf Produktivsystemen.
  • Keine unnötigen Capabilities erlauben, Capabilities auf das absolute Minimum beschränken.
  • Unit-Dateien versionieren und in CI/CD-Pipelines einbinden, um Änderungen nachzuverfolgen.
  • Kombination aus NoNewPrivileges, PrivateTmp und ProtectSystem erhöht die Sicherheit ohne großen Administrationsaufwand.

Fazit

Systemd-Sandboxing mit ProtectSystem, PrivateTmp und NoNewPrivileges bietet einfache, aber effektive Mittel, Dienste zu isolieren und Systeme abzusichern. Durch die Kombination mehrerer Optionen können Administratoren eine solide Baseline für sicheren Serverbetrieb schaffen und gleichzeitig die Wartbarkeit und Automatisierbarkeit erhalten.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles