Die systemd-Unit-Datei, die mit dem nginx-common-Paket geliefert wird, führt den Master-Prozess als root aus, was mich nervös macht.
Ich gehe davon aus, dass der einzige Grund, warum es als root ausgeführt wird, darin besteht, Port 80 zu binden, aber root zu sein, ist dafür übertrieben, also führe ich es als normaler Benutzer aus und gebe ihm die CAP_NET_BIND_SERVICE
Fähigkeit.
Ich habe die Gerätedatei so angepasst, dass sie folgendermaßen aussieht:
[Service]
Type=forking
PIDFile=/var/run/nginx/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=/usr/sbin/nginx -s quit
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
Capabilities=cap_net_bind_service+=ep
user=www-data
Gibt es Nachteile bei diesem Ansatz? Erwartet Nginx aus einem anderen Grund Root? Gibt es eine bessere Möglichkeit, Nginx zu sperren? Ich weiß, dass einige Leute es gerne chrooten, aber das scheint eine Menge Ärger zu sein.