Вопрос: Как заблокировать nginx на debian wheezy (running systemd)?


Системный файл systemd, который поставляется вместе с пакетом nginx-common, запускает мастер-процесс как root, что заставляет меня нервничать.

Я предполагаю, что единственная причина, по которой он запускается, как root, - связать порт 80, но для этого root является чрезмерным, поэтому я запускаю его как обычного пользователя и предоставляю ему CAP_NET_BIND_SERVICE возможность.

Я изменил файл блока, чтобы он выглядел так:

[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

Есть ли недостатки в этом подходе? Предполагает ли nginx быть root по какой-то другой причине? Есть ли лучший способ заблокировать nginx? Я знаю, что некоторым людям нравится это делать, но это похоже на много хлопот.


6
2018-05-27 12:46


Источник


Мне любопытно. У вас это работает? Я пробовал, но не мог заставить его работать с fedora 19. Непосредственный запуск setcap сделал трюк. - Alexander Kellett
Он всегда работал нормально, но я до сих пор не знаю, мог ли он ввести какую-то непонятную проблему или уязвимость системы безопасности ... следовательно, вопрос;) - ashleyh


Ответы:


Мастер-процесс должен выполняться как root, иначе nginx не сможет привязываться к порту 80, так как это привилегированный порт.

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

Вместо этого вы должны убедиться, что рабочие процессы используют другого пользователя. Этот пользователь может быть указан в вашем nginx.conf,


4
2018-05-27 13:02



Если у вас есть CAP_NET_BIND_SERVICE тогда вам не нужно быть root для привязки привилегированного порта. - ashleyh