Nginx 主进程以 root 身份运行,但警告指出它不是

Nginx 主进程以 root 身份运行,但警告指出它不是

我在 Ubuntu 14.04.3 服务器上运行 nginx 1.11.3,它是从源代码编译的,并添加了 ngx_cache_purge 模块。

我在 nginx error.log 中看到以下内容:

2016/08/03 14:30:00 [warn] 21827#21827: the "user" directive makes sense only if the master
  process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1

2016/08/03 14:30:00 [emerg] 15611#15611: BIO_new_file("/etc/letsencrypt/live/example.com/fullchain.pem") failed
  (SSL: error:0200100D:system library:fopen:Permission denied:fopen('/etc/letsencrypt/live/example.com/fullchain.pem','r')
  error:2006D002:BIO routines:BIO_new_file:system lib)

这两行总是接连出现。奇怪的是,该网站似乎服务正常,https 似乎也正常工作,尽管它在该错误中声称(我认为)它无法读取证书链。

在 nginx.conf 中,我将第一行设置为user www-data www-data;

如果我执行ps aux | grep nginx,我会看到主进程正在以 root 身份运行,而工作进程和缓存进程正在以 root 身份运行www-data– 一切正常。我通过运行 来启动 nginx sudo service nginx start

权限/etc/letsencrypt/live/example.com/如下所示:

ls -lah /etc/letsencrypt/live/example.com/
total 24K
drwxr-xr-x. 2 root root   93 Jan 20  2022 .
drwxr-xr-x. 3 root root   27 Nov  9  2021 ..
-rw-r--r--. 1 root root 3.7K Dec 27 00:03 ca.pem
-rw-r--r--. 1 root root 2.1K Dec 27 00:03 cert.pem
-rw-r--r--. 1 root root 2.2K Nov  9  2021 chain.pem
-rw-r--r--. 1 root root 5.8K Dec 27 00:03 fullchain.pem
-rw-r--r--. 1 root root 3.2K Dec 27 00:03 privkey.pem

nginx -V 输出以防有用:

nginx version: nginx/1.11.3
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
built with OpenSSL 1.0.2h  3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --add-module=/opt/nginx_cachepurge_module/ngx_cache_purge --add-dynamic-module=debian/extra/njs-0.1.0/nginx --with-threads --with-stream --with-stream_ssl_module --with-stream_geoip_module=dynamic --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro'

答案1

我找到了答案。对于它的一些 https 协商(我认为只有 nginx 启动后每个服务器块的第一次 https 协商),nginx 会启动一个临时的 root 用户进程,该进程在协商完成后立即关闭。对我来说,这是失败的,因为我之前安装了存储库版本,然后自己编译了 nginx。虽然我在安装apt-get remove自己编译的 nginx 之前删除了标准版本,但原始启动脚本的某些部分仍保留了下来,当我的新 nginx 尝试启动该进程时(似乎只有该进程,没有其他部分),它失败了。我通过完成apt-get remove --purge并重新安装编译后的版本解决了这个问题。

答案2

就我而言,放大代理定期nginx -t以非 root 用户身份执行,导致 error.log 中出现记录。

Enable periodic "nginx -t"可以通过在放大网页上的设置 > 代理中禁用来关闭此行为。

答案3

你应该让你的私钥可以被 ssl-cert 组读取。尝试

sudo chown -R root:ssl-cert /etc/letsencrypt/live/XXXXXXX.com/

相关内容