Назад | Перейти на главную страницу

Разрешение uwsgi отклонено для chdir, у которого есть разрешения для этого uid

Я использую 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 необходимы разрешения для «полного» пути к вашему файлу / папке. Это может быть сложнее, чем вы думаете:

  1. Пользователь www-data должен иметь +x разрешения, чтобы иметь возможность cd в папку ...
  2. ... а также в каждом родитель папка, указанная в пути, который вы используете ...
  3. ... и также, если символическая ссылка участвует в каждой родительской папке абсолютный путь к этому файлу / папке.

Вы можете проверить все (как относительные, так и абсолютные) разрешения пути в одной команде, используя namei -m <any_path>.

Этот ответ частично основан на комментариях @ Khaled и некоторых других поисках: