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