Bei der Sicherheit von Linux-Servern ist es einer der wichtigsten Schritte, unnötige Root-Rechte einzuschränken. Was aber, wenn Ihre Anwendung einen Port unter 1024 abhören muss und Sie sie nicht als Root ausführen möchten? Hier kommen Linux Capabilities ins Spiel. In diesem Artikel erklären wir Schritt für Schritt, wie Sie mit dem Linux-Berechtigungssystem (Capabilities) Ports ohne Root-Rechte öffnen können.
Was sind Linux Capabilities?
Im herkömmlichen Unix-Modell wurde nur geprüft, ob ein Prozess Root ist oder nicht. Root hatte uneingeschränkte Rechte im gesamten System; normale Benutzer waren stark eingeschränkt. Linux Capabilities färben dieses Schwarz-Weiß-Bild ein: Sie teilen Root in kleine, unabhängige Einheiten auf. Beispielsweise erlaubt die Fähigkeit CAP_NET_BIND_SERVICE einem Prozess, sich an Ports unter 1024 zu binden, ohne andere Root-Rechte zu verleihen.
Dieses System ist besonders ideal für Dienste wie Webserver, DNS-Server oder Datenbanken. Wenn Ihre Anwendung Ports wie 80, 443 oder 53 verwendet, können Sie sie dank Capabilities als normalen Benutzer ausführen und im Falle einer Sicherheitslücke verhindern, dass ein Angreifer das gesamte System übernimmt.
Wie öffnet man Ports ohne Root-Rechte?
1. Zuweisen von Capabilities zu Binärdateien
Um einer Anwendung eine bestimmte Fähigkeit zu geben, verwenden wir den Befehl setcap. Beispielsweise fügen wir CAP_NET_BIND_SERVICE zur nginx-Binärdatei hinzu:
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginxDieser Befehl ermöglicht es nginx, sich auch dann an Port 80 zu binden, wenn es als normaler Benutzer läuft. Die Angabe +ep bedeutet, dass die Fähigkeit sowohl im effektiven (effective) als auch im erlaubten (permitted) Satz vorhanden sein muss.
2. Zuweisen von Capabilities zu laufenden Prozessen
In manchen Fällen möchten Sie einem bereits laufenden Prozess nachträglich Capabilities geben. Dazu können Sie capsh oder prctl verwenden. Die praktischste Methode ist jedoch die Verwendung von ambient Capabilities beim Starten der Anwendung. Zum Beispiel in einer systemd-Service-Datei:
[Service] AmbientCapabilities=CAP_NET_BIND_SERVICE User=nginx ExecStart=/usr/sbin/nginx -g 'daemon off;'Dadurch läuft nginx als Benutzer nginx, hat aber die Berechtigung, sich an Port 80 zu binden.
Wichtige Punkte und Sicherheitstipps
- Geben Sie nur die benötigten Capabilities. Beispielsweise umfasst CAP_NET_ADMIN viel weitreichendere Rechte; verwenden Sie es nur, wenn es unbedingt nötig ist.
- Verhindern Sie, dass unberechtigte Benutzer setcap verwenden. Nur Root oder Benutzer mit sudo sollten dies tun können.
- Überprüfen Sie regelmäßig die Capabilities. Mit dem Befehl getcap können Sie sehen, welche Dateien welche Capabilities haben:
Ein praktisches Beispiel: Ein einfacher HTTP-Server mit Python
Angenommen, Sie haben einen einfachen Python-HTTP-Server, der auf Port 80 läuft. Normalerweise können Sie ihn nicht ohne Root ausführen. Hier sind die Schritte:
- Weisen Sie dem Python-Interpreter die Fähigkeit zu: sudo setcap 'cap_net_bind_service=+ep' /usr/bin/python3
- Starten Sie den Server als normaler Benutzer: python3 -m http.server 80
- Jetzt wird Port 80 ohne Root-Rechte abgehört.
Warnung: Diese Methode gewährt allen Python-Skripten diese Fähigkeit, seien Sie also vorsichtig. Besser ist es, nur das betreffende Skript mit einem speziellen Benutzer auszuführen.
Müssen wir Capabilities verwenden?
Natürlich gibt es Alternativen: authbind, iptables-Portweiterleitung oder systemd-Socket- Aktivierung. Capabilities sind jedoch der direkteste und modernste Ansatz. Insbesondere Container-Technologien (Docker, Podman) bauen auf Capabilities auf. In Docker-Containern wird Ähnliches mit --cap-add erreicht.
Fazit
Linux Capabilities sind ein unverzichtbares Werkzeug zur Verbesserung der Serversicherheit. Durch die Einschränkung von Root-Rechten minimieren Sie die Auswirkungen eines möglichen Einbruchs. Insbesondere das Öffnen von Ports mit CAP_NET_BIND_SERVICE ist eine der am häufigsten verwendeten Methoden neben Firewall-Einstellungen.
Als HostingServer.com.tr teilen wir weiterhin die aktuellsten Techniken, um Ihre Server sicher und leistungsfähig zu halten. Bei Fragen freuen wir uns auf Ihre Kommentare!