【问题标题】:Errno 13 Permission denied using GunicornErrno 13 权限被拒绝使用 Gunicorn
【发布时间】:2015-03-30 17:01:34
【问题描述】:

我正在使用 gunicornnginx 在 Digital Ocean 上运行 django。 Gunicorn 为 django 和 nginx 提供静态文件。

通过网站上传文件时,我无法保存到 /home 目录中的文件夹。我得到[Errno 13] Permission denied.

请问,如何让网络服务器能够对 /home 下的任意文件夹进行读写访问?

【问题讨论】:

    标签: gunicorn


    【解决方案1】:

    这一切都取决于运行您的应用程序的用户。

    如果您检查ps aux | grep gunicorn Gunicorn 服务器正在运行您的应用程序的用户,那么您可以相应地更改chmodchown 权限。

    ls -lash 将向您显示当前仅拥有该文件夹的用户以及您尝试写入的文件夹的权限:

    4.0K drwxrwx--- 4 username username 4.0K Dec 9 14:11 uploads

    然后您可以使用它来检查任何问题。

    关于更改所有权和权限的一些文档

    http://linux.die.net/man/1/chmod

    http://linux.die.net/man/1/chown

    我建议您非常小心您可以访问磁盘上的哪些位置以供 Web 服务器读取/写入。这可能会产生巨大的安全隐患。

    【讨论】:

    • 为我工作。我不得不更改我的目录以使用 Django 用户帐户,因为 gunicorn 使用该用户运行
    • @theflash 现在更新了链接。感谢您的提醒。
    【解决方案2】:

    嗯,我在这个问题上工作了一个多星期,终于能够弄清楚。 请点击来自digital ocean 的链接,但他们没有指出重要的问题之一,其中包括

    1. 连接上游时没有实时上游
    2. *4 connect() to unix:/myproject.sock 在连接上游时失败(13:权限被拒绝)
    3. gunicorn OSError: [Errno 1] Operation not allowed
    4. *1 connect() to unix:/tmp/myproject.sock failed (2: No such file or directory)

    这些问题基本上是Nginx 和 Gunicorn 连接的权限问题。 为简单起见,我建议为您创建的每个文件/项目/python 程序授予相同的 nginx 权限

    要解决所有问题,请遵循以下方法: 首先是:

    1. 以root用户登录系统
    2. 创建 /home/nginx 目录。
    3. 完成此操作后,按照website 进行操作直到创建一个 Upstart 脚本。
    4. 运行 chown -R nginx:nginx /home/nginx
    5. 对于 upstart 脚本,在最后一行进行以下更改: exec gunicorn --workers 3 --bind unix:myproject.sock -u nginx -g nginx wsgi 不要添加 -m 权限,因为它会弄乱套接字。从 Gunicorn 的文档来看,默认 -m 时,python 会找出最佳权限
    6. 启动新贵脚本
    7. 现在只需转到 /etc/nginx/nginx.conf 文件。 转到服务器模块并附加:

      位置/{ 包括代理参数; proxy_pass http://unix:/home/nginx/myproject.sock; } 删除 不要从这里开始关注数字海洋文章

      1. 现在重启 nginx 服务器,一切顺利。

    【讨论】:

    • nginx相关的东西,停止nginx工作,谢谢。
    【解决方案3】:

    更改 /home 的所有者

    见实际所有者$ ls -l /

    f1  f2  f3  f4  f5  f6      f6      f8  f9              f10
    -   rwx r-x r-x 1   root    root    209 Mar 30 17:41    /home
    

    https://www.garron.me/en/go2linux/ls-file-permissions.html
    f2 文件或目录的所有者权限
    f3 对文件或目录的组权限
    f4 其他人对该文件或目录的权限
    f6 拥有文件或目录的用户

    递归更改文件夹所有者 sudo chown -R ubuntu /home/ 用非 root 用户替换 ubuntu

    良好做法

    • 使用子目录home/ubuntu 作为服务器目录,ubuntu 文件夹有ubuntu 用户作为所有者。
    • 将用户所有者权限设置为所有人。你的组和其他用户只读sudo chmod -R 744 /home/ubuntu/

    【讨论】:

      【解决方案4】:

      在我的情况下,产生类似错误的事情非常简单,我只需要检查控制 Gunicorn 的用户和控制 NGINX 的用户,他们有不同的权限。

      【讨论】:

        猜你喜欢
        • 2023-02-26
        • 1970-01-01
        • 2017-10-02
        • 2017-04-20
        • 2011-06-11
        • 2014-07-15
        • 2015-07-17
        • 2016-07-25
        • 2013-06-12
        相关资源
        最近更新 更多