2 votes

Erreur de permissions de journalisation Python/django

Lorsque vous exécutez une commande à l'aide de l'option manage.py script, django me donne une erreur de permission refusée :

vagrant@vagrant:/opt/proj$ python3 manage.py migrate

Traceback (most recent call last):
  File "/usr/lib/python3.5/logging/config.py", line 558, in configure
    handler = self.configure_handler(handlers[name])
  File "/usr/lib/python3.5/logging/config.py", line 731, in configure_handler
    result = factory(**kwargs)
  File "/usr/lib/python3.5/logging/__init__.py", line 1008, in __init__
    StreamHandler.__init__(self, self._open())
  File "/usr/lib/python3.5/logging/__init__.py", line 1037, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding)
PermissionError: [Errno 13] Permission denied: '/var/log/django/debug.log'

Mais je suis dans le bon groupe (d'après ce que je vois), et je peux toucher le fichier journal en utilisant le shell :

vagrant@vagrant:/var/log/django$ ls -la
total 20
drwxrwxr-x  2 nobody www-data  4096 Jul 20 13:06 .
drwxrwxr-x 12 root   syslog    4096 Jul 20 12:37 ..
-rwxrwxr-x  1 nobody www-data 11283 Jul 20 13:07 debug.log

vagrant@vagrant:/var/log/django$ groups
vagrant adm cdrom sudo dip www-data plugdev lxd lpadmin sambashare

vagrant@vagrant:/var/log/django$ touch debug.log

vagrant@vagrant:/var/log/django$

Quelqu'un peut-il m'aider à comprendre quel est le problème ? J'utilise l'image vagrant 'bento' ubuntu 16.04.

Edit : Juste pour être clair, cela fonctionne bien si je règle les autorisations à 777 sur le fichier journal. Mais je préfère les garder à 775 (ou moins).

1voto

Benjamin Hicks Points 636

Vous ne dites pas quelle image vous utilisez, mais si SELinux ou AppArmor est installé, les options de contrôle d'accès obligatoire peuvent interférer.

Si vous êtes sur une distro qui utilise SELinux, sudo setsenforce 0 et ensuite essayer de lancer Django. Si cela fonctionne, cela permettra de déterminer s'il s'agit d'un problème SELinux. À partir de là, je vous suggère de lire https://wiki.centos.org/HowTos/SELinux ou toute autre documentation similaire existant pour votre distribution afin de résoudre les problèmes liés à l'utilisation de audit2allow ou des booléens SE pour trier les refus de sécurité.

Edit : Après avoir éliminé les problèmes de MAC, je parie que c'est un problème de groupe primaire ou secondaire. Si vous exécutez la commande sg www-data -c 'python3 manage.py migrate' et que cela fonctionne, cela signifie que le processus que vous créez hérite vagrant mais pas les secondaires. sg vous permet de lancer un processus avec n'importe lequel de vos groupes secondaires.

0voto

Pour le dépannage, vous pouvez temporairement mettre le monde en écriture sur le fichier :

chmod 777 /var/log/django/debug.log

Vous pouvez également essayer d'utiliser

sudo python3 manage.py migrate

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X