2 votes

uwsgi permission denied on chdir that does have permissions for that uid

J'utilise uWSGI (derrière nginx). sans Empereur, exécuté en tant que systemd service.

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
(...)

terminal :

$ ls -la /var/www/CONSTANd++/constandpp_web/constandpp_web
drwxrwxr-x 5 pdiracdelta www-data  4096 Sep  6 10:42 .
(...)

Il est clair que ce dossier possède toutes les autorisations pour le groupe www-data, mais pourtant, lorsque je démarre ce service uWSGI, le journal uWSGI se plaint :

(...)
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]

Pourquoi cela se produit-il et comment puis-je le réparer ? Si je retire le uid=www-data à partir du fichier uwsgi_config.ini, tout démarre bien, mais bien sûr, les fichiers créés par mon application WSGI ont la propriété de la racine, ce que je ne veux pas.

3 votes

Qu'en est-il des répertoires de niveau supérieur ? Avez-vous vérifié leurs permissions ? Vous ne pouvez pas cd à moins que vous n'ayez suffisamment de privilèges pour accéder à tous les répertoires !

0 votes

Vous êtes sûr ? Je viens de faire cd / en tant qu'utilisateur régulier et cela m'amène à / très bien. Ou cela fonctionne-t-il différemment avec les uWSGI ? chdir() commande ? Bien sûr, /var/ n'appartient pas au groupe www-data, comme vous le soupçonniez probablement...

0 votes

"Avoir suffisamment de privilèges" ne signifie pas posséder le répertoire !

2voto

Jaes Points 11

Il s'avère que l'utilisateur www-data a besoin d'autorisations pour le chemin d'accès "complet" à votre fichier/dossier. Cela peut être plus délicat que vous ne le pensez :

  1. L'utilisateur www-data doit avoir +x les permissions pour pouvoir cd dans un dossier ...
  2. ... et aussi dans chaque parent dossier spécifié dans le chemin que vous utilisez ...
  3. ... et également si un lien symbolique est impliqué, dans chaque dossier parent de l absolu le chemin d'accès à ce fichier/dossier.

Vous pouvez vérifier toutes les permissions de chemin (relatives et absolues) en une seule commande en utilisant namei -m <any_path> .

Cette réponse est partiellement basée sur les commentaires de @Khaled et quelques recherches supplémentaires :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X