Wie sperre ich nginx auf debian wheezy (laufendes systemd)?

8

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_SERVICEFä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.

ashleyh
quelle
Ich bin neugierig. Hast du das funktioniert? Ich habe es versucht, konnte es aber mit Fedora 19 nicht zum Laufen bringen. Das direkte Ausführen von setcap hat jedoch den Trick getan.
Alexander Kellett
Es schien immer gut zu funktionieren, aber ich weiß immer noch nicht, ob es ein obskures Problem oder eine Sicherheitslücke hätte verursachen können ... daher die Frage;)
ashleyh

Antworten:

5

Der Master-Prozess muss als Root ausgeführt werden, da sonst Nginx nicht an Port 80 binden kann, da dies ein privilegierter Port ist.

http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html

Sie sollten stattdessen sicherstellen, dass die Worker-Prozesse einen anderen Benutzer verwenden. Dieser Benutzer kann in Ihrem angegeben werden nginx.conf.

etagenklo
quelle
5
Wenn Sie die CAP_NET_BIND_SERVICEFähigkeit haben, müssen Sie nicht root sein, um einen privilegierten Port zu binden.
Ashley