【问题标题】:403 permission denied nginx, vagrant, centos403 权限被拒绝 nginx、vagrant、centos
【发布时间】:2016-08-14 14:51:06
【问题描述】:

我在设置基本的 vagrant VM 以提供某些内容时遇到问题。 Nginx 说它无权为我的项目文件夹提供索引。我已尝试将项目目录的所有权限设置为 777,并将 Nginx 用户更改为 vagrant。

我不确定,但通过阅读,显然 SELinux 可能会导致问题,因为它在服务器上启用,/var/log/audit/audit.log 中有这样的行:

type=AVC msg=audit(1471185070.388:854): avc:  denied  { getattr } for  pid=4653 comm="nginx" path="/var/www/project/index.html" dev="0:37" ino=12161210 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=file

我的 nginx 配置如下所示:

server {
    listen 80 default_server;
    server_name knifesprinter.local;
    index index.html;

    location /{
        root /var/www/project;
        autoindex on;
    }

    error_page  404              /404.html;
    location = /404.html {
    root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

并且允许对/var/www/project 的所有权限。有人知道这里有什么交易吗?我之前用 Nginx 设置了一些服务器,但在 CentOS 7 上没有设置

【问题讨论】:

    标签: nginx permissions vagrant centos7


    【解决方案1】:

    是的,绝对是 SELinux 问题。请不要通过将强制设置为 0 来禁用 SELinux。您可以使用 audit2allow 允许 Nginx 访问。这将为您生成一个策略,您可以使用semodule 应用该策略。您需要以root 的身份运行以下命令。你可以 sudo 命令,但你会遇到semodule 的问题。

    首先,如果您的系统没有audit2allow

    yum install policycoreutils-python
    

    接下来,创建策略:

    grep httpd /var/log/audit/audit.log | audit2allow -M mypol
    

    然后应用策略:

    semodule -i mypol.pp
    

    值得注意的是,audit2allow 可能会提供比所需更多的访问权限。如果您对此有所顾虑,也可以在某些情况下使用restorecon or chcon

    我希望这会有所帮助。

    【讨论】:

    • 是的,完全禁用它感觉不对,使用 grep http 由于某种原因无法正常工作,但是我不得不在页面加载后使用 audit2allow -a -M。
    • 啊,我明白了。感谢您指出了这一点。将来可能有用。
    • 想加你+100加。感谢您的解决方案!
    • @DenisSavenko,谢谢 :) 奇怪的是,两年后人们仍然遇到这些问题。无论如何,很高兴它有所帮助。
    猜你喜欢
    • 2020-08-25
    • 2020-02-08
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多