【问题标题】:Django Permission denied: '/media/images' uploading imageDjango Permission denied: '/media/images' 上传图片
【发布时间】:2019-04-30 12:15:21
【问题描述】:

请帮忙。我正在尝试遵循以下教程https://wsvincent.com/django-image-uploads/ 一旦我尝试在该部分中发布 djangopony.png 图像,我就会收到权限被拒绝错误。我正在使用 Ubuntu 19 和 Django 2.1.5。

我的虚拟环境和项目位于目录中 /home/sgoodman/insta

├── db.sqlite3
├── insta_project
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── media
│   └── images
├── Pipfile
├── Pipfile.lock
└── posts
    ├── admin.py
    ├── apps.py
    ├── __init__.py
    ├── migrations
    │   ├── 0001_initial.py
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

权限:

drwxrwxrwx 5 sgoodman sgoodman   4096 Apr 30 13:53 ./
drwxr-xr-x 9 sgoodman sgoodman   4096 Apr 30 13:50 ../
-rw-r--r-- 1 sgoodman sgoodman 135168 Apr 30 13:53 db.sqlite3
drwxrwxr-x 2 sgoodman sgoodman   4096 Apr 30 13:50 insta_project/
-rwxrwxr-x 1 sgoodman sgoodman    545 Apr 30 12:57 manage.py*
drwxrwxrwx 3 sgoodman sgoodman   4096 Apr 30 13:46 media/
-rw-rw-r-- 1 sgoodman sgoodman    176 Apr 30 12:56 Pipfile
-rw-r--r-- 1 sgoodman sgoodman   3914 Apr 30 12:56 Pipfile.lock
drwxrwxr-x 3 sgoodman sgoodman   4096 Apr 30 13:46 posts/

settings.py 中的 MEDIA_ROOT 和 MEDIA_URL 设置:

STATIC_URL = '/static/'

MEDIA_ROOT = '/media/'
MEDIA_URL = os.path.join(BASE_DIR, '/media/')

谢谢。

【问题讨论】:

    标签: django


    【解决方案1】:

    最后我自己解决了这个问题。

    在开发机器上运行时,我实际上是在使用当前用户的权限运行。但是,在部署服务器上运行时,我实际上是通过wsgi运行的,也就是说它是使用www-data的权限运行的。

    www-data 既不是所有者,也不是拥有/var/www 的用户组。这意味着www-data 被视为other 并具有设置为其他人的权限。

    BAD 解决方案是:

    sudo chmod -R 777 /var/www/
    

    这将使每个人都可以完全访问/var/www/which is a very bad idea 中的所有内容。

    另一个不好的解决方案是:

    sudo chown -R www-data /var/www/
    

    这会将所有者更改为www-datawhich opens security vulnerabilities

    GOOD 解决方案是:

    sudo groupadd varwwwusers
    sudo adduser www-data varwwwusers
    sudo chgrp -R varwwwusers /var/www/
    sudo chmod -R 760 /var/www/
    

    这会将www-data 添加到varwwwusers 组,然后将其设置为/var/www/ 及其所有子文件夹的组。 chmod 将授予所有者读取、写入、执行权限,但如果网络服务器被黑客入侵,该组将无法执行可能上传的任何脚本。

    您可以将其设置为740 以使其更安全,但您将无法使用Django's collectstatic 功能,因此请坚持使用760,除非您对自己的身份非常有信心做。

    【讨论】:

    • 我没有 /var/www 目录。我正在从 /home/sgoodman/insta 运行 pipenv
    • 使用 sudo 创建环境
    猜你喜欢
    • 2012-02-18
    • 2019-07-04
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多