如何在 debian wheezy(运行 systemd)上锁定 nginx?

如何在 debian wheezy(运行 systemd)上锁定 nginx?

nginx-common 包附带的 systemd 单元文件以 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 它,但这似乎很麻烦。

答案1

主进程必须以 root 身份运行,否则 nginx 将无法绑定到端口 80,因为这是一个特权端口。

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

您应该确保工作进程使用不同的用户。您可以在 中指定此用户nginx.conf

相关内容