75

我是系统管理的新手。在 Ubuntu 上通过 puppet安装 nginx 后,我得到以下输出:

[alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)

[warn] 1898#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1

[emerg] 1898#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)

我如何摆脱所有这些消息?

我不想直接使用命令行(chown / chmod)并在每次创建新服务器时重复它。因此,我正在考虑必须添加到木偶清单中的内容。

在这种情况下,最佳系统管理员做法是什么:更改 /var/log/nginx 的所有者/权限或将日志存储在不同的位置?如果 chown / chmod 是要走的路,哪些特定权限可以确保最高级别的安全性?

我试过这个,但它没有帮助:

  file { '/var/log/nginx':
    ensure  => directory,
    mode    => '0755',
    owner   => 'www-data',
    group   => 'www-data',
    recurse => true
  }

编辑:

vagrant@precise64:~$ ps aux | grep [n]ginx
root      1001  0.0  0.1  62908  1388 ?        Ss   08:47   0:00 nginx: master process /usr/sbin/nginx
www-data  1002  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
www-data  1003  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
www-data  1004  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
www-data  1005  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
4

12 回答 12

217

确保您以超级用户身份运行测试。

sudo nginx -t

否则测试将不具备正确完成测试所需的所有权限。

于 2014-05-23T05:31:18.093 回答
38

我在重启Nginx时遇到了类似的问题,发现它是SeLinux的原因。请务必在禁用 SeLinux 或使用以下命令将其临时设置为Permissive模式后尝试一下:

setenforce 0

我希望它有帮助:)

于 2016-10-11T14:39:03.730 回答
36

如果我假设您的第二个代码是 puppet 配置,那么我有一个合乎逻辑的解释,如果之前创建了错误和日志文件,您可以试试这个

sudo chown -R www-data:www-data /var/log/nginx;
sudo chmod -R 755 /var/log/nginx;
于 2013-09-10T10:29:29.687 回答
8

仅仅因为您无权访问该文件,请使用

chmod -R 755 /var/log/nginx;

或者您可以更改为 sudo 然后

于 2015-08-06T08:17:57.810 回答
7

如果您不想以 root 身份启动 nginx。

首先创建日志文件:

sudo touch /var/log/nginx/error.log

然后修复权限:

sudo chown -R www-data:www-data /var/log/nginx

sudo find /var/log/nginx -type f -exec chmod 666 {} \;

sudo find /var/log/nginx -type d -exec chmod 755 {} \;

于 2019-04-25T17:11:56.453 回答
5

授予组 adm 中的用户查看日志文件的权限。

要在命令行问题上将用户添加到该组:

sudo usermod -aG adm <USER>
于 2016-02-05T16:03:19.933 回答
1

对我来说,我只是将 selinux 从强制更改为许可,然后我就能够启动 nginx 而没有任何错误。

于 2015-03-18T04:15:06.483 回答
0

在 Debian WSL(Linux 的 Windows 子系统)上,我必须使用:

sudo chmod -R 775 /var/log/nginx
于 2019-12-17T11:50:05.250 回答
0

找到了一个很好的描述该怎么做。

    # 支持以属于root组的任意用户身份运行
    运行 chmod g+rwx /var/cache/nginx /var/run /var/log/nginx
    # 不允许用户监听特权端口
    运行 sed -i.bak 's/listen\(.*\)80;/listen 8081;/' /etc/nginx/conf.d/default.conf
    暴露 8081
    # 注释用户指令作为主进程在 OpenShift 中以用户身份运行
    运行 sed -i.bak 's/^user/#user/' /etc/nginx/nginx.conf

修复了在没有 root 的情况下运行 NGNIX 的所有问题。

于 2021-05-31T15:17:47.660 回答
-1

这对我有用,

sudo chmod -R 777 /var/log/nginx
于 2020-08-04T11:41:28.807 回答
-1

我只是用本地路径修补 nginx 二进制替换路径/var/log/nginx/error.log和其他路径。

$ perl -pi \
    -e 's@/var/log/nginx/@_var_log_nginx/@g;' \
    -e 's@/var/lib/nginx/@_var_lib_nginx/@g;' \
    -e 's@/var/run/nginx.pid@_var_run/nginx.pid@g;' \
    -e 's@/run/nginx.pid@_run/nginx.pid@g;' \
    < /usr/sbin/nginx > nginx
$ chmod +x nginx
$ mkdir _var_log_nginx _var_lib_nginx _var_run _run
$ ./nginx -p . -c nginx.conf

它适用于测试。

于 2016-02-26T20:35:03.390 回答
-5

Nginx 需要通过命令运行'sudo /etc/init.d/nginx start'

于 2013-09-20T16:33:33.457 回答