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

ash*_*eyh 8 debian nginx systemd

nginx-common 包自带的systemd单元文件以root身份运行master进程,这让我很紧张。

我认为它以 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
Run Code Online (Sandbox Code Playgroud)

这种方法有什么缺点吗?nginx 是否希望成为 root 用户?有没有更好的方法来锁定 nginx?我知道有些人喜欢 chroot 它,但这似乎很麻烦。

eta*_*klo 5

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

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

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

  • 如果你有`CAP_NET_BIND_SERVICE` 能力,那么你不需要是root 用户来绑定一个特权端口。 (5认同)