Назад | Перейти на главную страницу

Как заблокировать nginx на debian wheezy (работает 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? Я знаю, что некоторым людям нравится chroot, но это похоже на много хлопот.

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

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

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