[Systemd] Einem Service erlauben einen privilegierten Port zu nutzen

Datum

Manchmal möchte man einem Prozess oder Tool, welches nicht als root Benutzer läuft, erlauben einen Port unterhalb von 1024 zu nutzen.
Ein Beispiel dafür findet sich in dem Techgoat-Artikel zu Caddy, wo dem Webserver Caddy mithilfe des Befehls sudo setcap cap_net_bind_service=+ep $(which caddy) gestattet wurde den Port 80 bzw. 443 zu öffnen ohne als root Benutzer gestartet worden zu sein.

Dieser Schritt mit der Freigabe kann auch direkt in der entsprechenden Systemd .service Datei hinterlegt werden.

Systemd-Service Datei bearbeiten

Grundsätzlich lässt sich ein servive-Script von Systemd mit systemctl edit <servicename>.service bearbeiten.
Hierbei wird ein drop-in script erzeugt, welche unter /etc/systemd/system/<servicename>.service.d/override.conf zu finden ist und die entsprechende .service-Datei erweitert.
Mit der Option --full kann man auch direkt die entsprechende .service-Datei bearbeiten.

Um nun einem unprivilegierten Prozess zu erlauben einen Port unter 1024 zu verwenden fügt man folgende Zeile(n) in das entsprechende .service-Script ein:

[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE

Anmerkung: Dies funktioniert allerdings erst ab systemd v229 oder später

Autor
Kategorien Linux

PRTG Map