Django Отказано в доступе: «/ media / images» загрузка изображения - PullRequest
0 голосов
/ 30 апреля 2019

Пожалуйста, помогите.Я пытаюсь следовать следующему уроку https://wsvincent.com/django-image-uploads/ Я получаю сообщение об ошибке «Отказано в доступе», как только я пытаюсь опубликовать изображение djangopony.png в разделе.Я использую Ubuntu 19 и Django 2.1.5.

Моя виртуальная среда и проект находятся в папке direcotry / 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/

Настройка MEDIA_ROOT и MEDIA_URL в settings.py:

STATIC_URL = '/static/'

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

Спасибо.

1 Ответ

0 голосов
/ 30 апреля 2019

Я решил это сам в конце.

Когда я работаю на машинах разработчика, я на самом деле использую права текущего пользователя. Однако при работе на сервере развертывания я фактически запускаю wsgi, что означает, что он работает с привилегиями www-data.

www-data не является ни владельцем, ни группой пользователей, которым принадлежит /var/www. Это означает, что www-data рассматривается как other и имеет права доступа, установленные для других.

ПЛОХОЙ решение этой проблемы заключается в следующем:

sudo chmod -R 777 /var/www/

Это даст всем полный доступ ко всему в /var/www/, , что очень плохая идея .

Другое ПЛОХОЕ решение будет делать:

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

Это изменит владельца на www-data, , что открывает уязвимости безопасности .

ХОРОШЕЕ решение будет:

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, если вы не очень уверены в том, что вы делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...