Ubuntu上的nginx:权限被拒绝

krn*_*krn 49 ubuntu debian nginx puppet vagrant

我是系统管理的新手.在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)
Run Code Online (Sandbox Code Playgroud)

如何摆脱所有这些消息?

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

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

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

  file { '/var/log/nginx':
    ensure  => directory,
    mode    => '0755',
    owner   => 'www-data',
    group   => 'www-data',
    recurse => true
  }
Run Code Online (Sandbox Code Playgroud)

编辑:

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
Run Code Online (Sandbox Code Playgroud)

小智 161

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

sudo nginx -t
Run Code Online (Sandbox Code Playgroud)

或者测试不具备正确完成测试所需的所有权限.


Moh*_*ady 31

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

sudo chown -R www-data:www-data /var/log/nginx;
sudo chmod -R 755 /var/log/nginx;
Run Code Online (Sandbox Code Playgroud)

  • 该`chmod`的潜在安全问题-还将所有日志文件设置为可执行文件。改为执行此操作:`sudo chmod -R u + X / var / log / nginx` (2认同)
  • 我永远不会这样做,因为这是一个安全缺陷。apache 的规则相同:日志必须由 root 而不是工作用户拥有 (2认同)

小智 25

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

setenforce 0

我希望它有帮助:)


小智 8

只是因为你没有权利获取文件,请使用

chmod -R 755 /var/log/nginx;
Run Code Online (Sandbox Code Playgroud)

或者你可以改为sudo然后呢

  • 但是我想以root身份运行nginx吗? (2认同)

Ami*_*aqi 6

如果您不想以 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 {} \;


小智 5

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

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

sudo usermod -aG adm <USER>
Run Code Online (Sandbox Code Playgroud)

  • 如果有的话,这种方法的缺点是什么? (2认同)