Nginx:Ubuntu上的nginx权限被拒绝[关闭]

Posted

技术标签:

【中文标题】Nginx:Ubuntu上的nginx权限被拒绝[关闭]【英文标题】:Nginx: Permission denied for nginx on Ubuntu [closed] 【发布时间】:2013-09-13 22:13:28 【问题描述】:

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

[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 manifest 中添加什么。

在这种情况下,最佳系统管理员做法是什么:更改 /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

【问题讨论】:

您确定应用了人偶代码(例如使用vagrant provision)? /etc/nginx/nginx.conf 是使用www-data 还是nginx 来运行 nginx 非主进程? 检查一次已经运行的端口,如果nginx端口44380如果被其他进程使用,可能会导致类似的错误。使用命令sudo netstat -tulpn检查端口80或443是否被其他进程使用。 【参考方案1】:

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

sudo nginx -t

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

【讨论】:

你为我节省了几个小时。我应该考虑一下的。 哇!在这里我把它复杂化了。谢谢大佬! 这是否意味着只要 sudo nginx -t 工作正常且 nginx 主进程具有 sudo 权限,就可以简单地忽略 OP 的 3 个警报/警告?【参考方案2】:

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

setenforce 0

希望对你有帮助:)

【讨论】:

setenforce 0 for selinux backed-in distros (Redhat, Centos, Fedore, ...) 如果您 100% 确定您在目录上设置了正确的权限,这确实是一个非常有效的答案。 如果您 100% 不关心安全性,这是一个非常有效的答案...【参考方案3】:

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

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

【讨论】:

chmod 的潜在安全问题 - 它还将所有日志文件设置为可执行文件。改为这样做:sudo chmod -R u+X /var/log/nginx 我永远不会这样做,因为这是一个安全漏洞。 apache 的相同规则:日志必须由 root 拥有,而不是工作用户【参考方案4】:

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

chmod -R 755 /var/log/nginx;

或者你可以改为sudo然后它

【讨论】:

您不希望除根以外的任何人都可以阅读您的日志。 但是我想以 root 身份运行 nginx 吗? How do I configure nginx to put its error.log file somewhere I have write privileges?中的类似答案【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

sudo usermod -aG adm <USER>

【讨论】:

这种方法有什么缺点(如果有的话)? adm:组adm用于系统监控任务。该组的成员可以读取 /var/log 中的许多日志文件,并且可以使用 xconsole。从历史上看,/var/log 是 /usr/adm(后来是 /var/adm),因此是该组的名称。【参考方案7】:

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

【讨论】:

禁用 selinux 违背了 selinux 的目的。是的,这是一种手段的快速结束——但它不一定是手段的正确目的。最好学习使用 selinux 的正确方法。 selinux 是生产的神,也是开发的恶魔。【参考方案8】:

在 Debian WSL(Linux 的 Windows 子系统)上我不得不使用:

sudo chmod -R 775 /var/log/nginx

【讨论】:

【参考方案9】:

找到了good description怎么办。

# 支持以属于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 的所有问题。

【讨论】:

【参考方案10】:

我只是用本地路径修补了 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

它适用于测试。

【讨论】:

【参考方案11】:

这对我有用,

sudo chmod -R 777 /var/log/nginx

【讨论】:

【参考方案12】:

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

【讨论】:

我无法让 sudo service nginx restart 工作,得到这个输出:service nginx restart Failed to restart nginx.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files,但 sudo /etc/init.d/nginx restart 对我来说就像一个魅力。

以上是关于Nginx:Ubuntu上的nginx权限被拒绝[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Nginx:stat()失败(13:权限被拒绝)

nginx 错误:(13:权限被拒绝)同时连接到上游)

运行python app时,MySql Access被拒绝[Ubuntu 1604 / NGINX / uWSGI]

403 nginx 错误 - 权限被拒绝

Nginx 错误:(13:权限被拒绝)同时连接到上游

nginx 500 错误,tmp 文件夹的权限被拒绝