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=fullundPrivateTmp=yesausfü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,PrivateTmpundProtectSystemerhö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.

