Django + apache2 ошибка: [Errno 13] Permission denied: '/photos'

У меня есть сервер ubuntu, на котором размещено мое приложение, состоящее из front-end, сделанного с помощью angular, и API, сделанного с помощью django.

Когда я пытаюсь загрузить изображения через API, я получаю ошибку: [Errno 13] Permission denied: '/photos'

Я пробовал установить разрешения 644/755, полные разрешения на чтение и запись в каталог, я также пробовал создавать группы и давать www-data контроль над каталогом... но пока ничего не получилось.

Я использую Apache2 с mod_wsgi для обслуживания моего приложения django. Вот структура папок:

/var/www/html/api
│   manage.py
│   passenger.wsgi
│   requirements.txt 
│
│───photos (this is the related directory)
│
└───apiX
│   │   serializers.py
│   │   views.py
│   │   ........
│   │
└───apiMain
    │   asgi.py
    │   settings.py
    │   wsgi.py

Вот мои /etc/apache2/apache2.conf настройки:

# Django app config!
WSGIScriptAlias /api /var/www/html/api/apiMain/wsgi.py

WSGIPythonHome /var/www/html/api/venv

WSGIPythonPath /var/www/html/api/venv/lib64/python3.8/site-packages

WSGIDaemonProcess x_api python-home=/var/www/html/api/venv python-path=/var/www/html/api
WSGIProcessGroup x_api

<Directory /var/www/html/api>

<Files apiMain/wsgi.py>

Require all granted

</Files>

</Directory>

Alias /photos/ /var/www/html/api/photos
Alias /photos /var/www/html/api/photos
<Directory /var/www/html/api/photos>

Require all granted

</Directory>

Спасибо!

Сервис Apache требует разрешения на чтение всего пути к целевому каталогу/файлам, поэтому необходимо предоставить такие права пользователю Apache.

Для имитации записи пользователя вы можете inpersonate и имитировать пользователя (я бы предположил, что служба apache называется www-data):

sudo -u www-data ls -al /var/www/html/api/photos

Если вы получаете Permission denied, то вам нужно проверить папку за папкой:

sudo -u www-data ls -al /var/
sudo -u www-data ls -al /var/www/
sudo -u www-data ls -al /var/www/html/
sudo -u www-data ls -al /var/www/html/api/
sudo -u www-data ls -al /var/www/html/api/photos

в какой папке отсутствуют права на чтение, затем установите правильные разрешения, например:

chmod o+r /var/www/html ...

(or chgrp www-data /var/www... + chmod g+r ...)

Но возникает проблема безопасности - безопасно ли разрешать такие права всем пользователям? Иногда лучшим решением будет разместить папки менее глубоко в системе, например, разместить фотографии и установить права в:

/srv/photos
Вернуться на верх