Nginx: 拒绝Ubuntu上的nginx权限。

问题描述 投票:57回答:10

我是系统管理新手。安装了nginx后 傀儡 在Ubuntu上,我得到以下输出。

[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),每次创建一个新的服务器都要重复这样做。因此,我在想必须在puppet清单中添加什么?

在这种情况下,最好的系统管理员做法是:改变varlognginx的所有者权限或将日志存储在不同的位置?如果采用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
ubuntu nginx debian vagrant puppet
10个回答
178
投票

确保你是以超级用户的身份运行测试的。

sudo nginx -t

否则,测试就不会有正确完成测试所需的所有权限。


33
投票

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

sudo chown -R www-data:www-data /var/log/nginx;
sudo chmod -R 755 /var/log/nginx;

31
投票

我在重新启动 Nginx 并发现它是一个原因。SeLinux. 请务必在禁用SeLinux或将其暂时设置为 允许性 模式,使用下面的命令。

setenforce 0

希望对你有帮助:)


9
投票

只是因为你无权访问该文件,所以请使用

chmod -R 755 /var/log/nginx;

或者你可以改成sudo,然后它


5
投票

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

要在命令行中添加一个用户到这个组中。

sudo usermod -aG adm <USER>

3
投票

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


1
投票

在Debian WSL(Windows Subsystem for Linux)上,我必须使用:

sudo chmod -R 775 /var/log/nginx

0
投票

对我来说,我只是把selinux从强制改为允许,然后我就可以无误地启动nginx了。


0
投票

我只是把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

它可以用于测试。


-4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.