web-dev-qa-db-fra.com

Autorisation refusée lors de l'écriture du fichier journal

J'utilise Ubuntu 13.04. J'utilise uwsgi en utilisant Sudo service uwsgi start

J'ai configuré le fichier journal dans Django en tant que /home/shwetanka/logs/mysite/mysite.log

Mais je reçois cette erreur - 

ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/home/shwetanka/logs/mysite/mysite.log'

Comment je le répare? Cela ne devrait pas arriver quand je lance uwsgi en tant que Sudo.

13
Shwetanka

Vous devez corriger les autorisations avec la commande chmod, comme ceci: chmod 775 /home/shwetanka/logs/mysite/mysite.log.

Examinez le propriétaire du fichier avec ls -l /home/shwetanka/logs/mysite/mysite.log et rendez-le en écriture dans uwsgi. Si le fichier n'appartient pas à uwsgi, vous devrez utiliser la commande chown.

Examinez le nom d'utilisateur sous lequel votre service s'exécute avec ps aux | grep 'uwsgi'.

Si la sécurité ne vous semble pas très importante pour le moment, utilisez chmod 777 /home/shwetanka/logs/mysite/mysite.log et le tour est joué. Mais ce n'est pas comme ça que ça se passe.

Pour ce faire, le moyen le plus sûr consiste à vérifier le propriétaire et le groupe du fichier, puis de les modifier si nécessaire et d'ajuster les autorisations en conséquence.

Donnons un exemple.

Si j'ai un fichier dans /home/shwetanka/logs/mysite/mysite.log et que la commande ls -l /home/shwetanka/logs/mysite/mysite.log donne le résultat suivant:

-rw-rw-r-- 1 shwetanka shwetanka 1089 Aug 26 18:15 /home/shwetanka/logs/mysite/mysite.log

cela signifie que le propriétaire du fichier est shwetanka et que le groupe est également shwetanka. Lisons maintenant les rwx bits. Le premier groupe étant lié au propriétaire du fichier, rw- signifie que le fichier est lisible et inscriptible par le propriétaire, lisible et inscriptible par le groupe et lisible par les autres. Vous devez vous assurer que le propriétaire du fichier est le service qui tente de lui écrire quelque chose ou que le fichier appartient au groupe du service, sinon vous obtiendrez une erreur permission denied.

Maintenant, si j'ai un nom d'utilisateur uwsgi utilisé par le service USWGI et que je souhaite que le fichier ci-dessus soit accessible en écriture par ce service, je dois changer le propriétaire du fichier, comme suit:

chown uwsgi /home/shwetanka/logs/mysite/mysite.log. Étant donné que le bit d'écriture pour le propriétaire (le premier groupe rwx) est déjà défini sur 1, ce fichier sera désormais accessible en écriture pour le service UWSGI. Pour toute autre question, s'il vous plaît laissez un commentaire.

24
Luka

Vous pouvez également définir l’option umask pour uwsgi ( http://uwsgi-docs.readthedocs.org/en/latest/Options.html#umask ).

J'ai eu la même situation, je courais uwsgi via www-data et j'ai utilisé buildout. Donc, ce correctif dans mon cas ressemblait à ceci: 

[uwsgi]
recipe = buildout.recipe.uwsgi
xml-socket = /tmp/uwsgi.sock
xml-master = True
xml-chmod-socket = 666
xml-umask = 0002
xml-workers = 3
xml-env = ...
xml-wsgi-file = ...

Après que les autorisations du fichier journal soient devenues 664, les membres du groupe du groupe www-data peuvent également y écrire.

1
Gleb