Я использую uWSGI (за nginx) без Император, беги как systemd
служба.
uwsgi.service:
[Service]
ExecStart=/usr/local/bin/uwsgi --ini /var/www/CONSTANd++/uwsgi_config.ini
(...)
uwsgi_config.ini:
(...)
gid = www-data
uid = www-data
chdir = /var/www/CONSTANd++/constandpp_web/constandpp_web
(...)
Терминал:
$ ls -la /var/www/CONSTANd++/constandpp_web/constandpp_web
drwxrwxr-x 5 pdiracdelta www-data 4096 Sep 6 10:42 .
(...)
Очевидно, что эта папка имеет все разрешения для группы www-data, но все же, когда я запускаю эту службу uWSGI, журнал uWSGI жалуется:
(...)
setgid() to 33
setuid() to 33
chdir() to /var/www/CONSTANd++/constandpp_web/constandpp_web
chdir(): Permission denied [core/uwsgi.c line 2591]
chdir(): Permission denied [core/uwsgi.c line 1613]
Почему это происходит и как это исправить? Если я удалю uid=www-data
из uwsgi_config.ini все запускается нормально, но, конечно, файлы, созданные моим приложением WSGI, имеют права root, а я не хочу.
Как оказалось, пользователю www-data необходимы разрешения для «полного» пути к вашему файлу / папке. Это может быть сложнее, чем вы думаете:
+x
разрешения, чтобы иметь возможность cd
в папку ...Вы можете проверить все (как относительные, так и абсолютные) разрешения пути в одной команде, используя namei -m <any_path>
.
Этот ответ частично основан на комментариях @ Khaled и некоторых других поисках: