2017-07-20 7 views
2

Wenn ein Befehl Ausführen des manage.py Skript, gibt django mir eine Erlaubnis verweigert Fehler:Python/Django Protokollierung Berechtigungsfehler

[email protected]:/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' 

Aber ich bin in der richtigen Gruppe (soweit ich sehen kann), und Ich kann das Logfile mit der Shell berühren:

[email protected]:/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 

[email protected]:/var/log/django$ groups 
vagrant adm cdrom sudo dip www-data plugdev lxd lpadmin sambashare 

[email protected]:/var/log/django$ touch debug.log 

[email protected]:/var/log/django$ 

Kann mir jemand helfen zu verstehen, was das Problem hier ist? Ich benutze das vagabund 'bento' ubuntu 16.04 Bild.

Edit: Nur um klar zu sein, es funktioniert gut, wenn ich die Berechtigungen auf 777 in der Protokolldatei festlegen. Aber ich würde sie lieber als 775 (oder weniger) behalten.

Antwort

1

Sie verwenden könnten versuchen, nicht sagen, welches Bild Sie verwenden , aber wenn SELinux oder AppArmor installiert ist, können die Optionen der obligatorischen Zugriffssteuerung stören.

Wenn Sie sich auf einer Distro befinden, die SELinux verwendet, versuchen Sie, Django auszuführen, sudo setsenforce 0. Wenn es funktioniert, wird festgestellt, ob es sich um ein SELinux-Problem handelt. Von dort empfehle ich, https://wiki.centos.org/HowTos/SELinux oder was auch immer ähnliche Dokumentation für Ihre Distribution zu lesen, um zu beheben, wie man audit2allow oder SE booleans benutzt, um die Sicherheitsablehnungen auszusortieren.

Edit: Nachdem ich MAC-Probleme ausgeschlossen habe, wette ich, es ist eine primäre vs. sekundäre Gruppe Problem. Wenn Sie den Befehl sg www-data -c 'python3 manage.py migrate' ausführen und es funktioniert, bedeutet das, dass der von Ihnen erstellte Prozess die primäre Gruppe vagrant erbt, aber keine der sekundären. sg können Sie einen Prozess mit einer Ihrer sekundären Gruppen starten.

+0

danke für deinen Vorschlag. Ich habe gerade die IMG Informationen hinzugefügt, es ist Ubuntu 16.04. Ich habe SELinux nicht (glaube ich), aber ich habe AppArmor mit 'sudo invoke-rc.d apparmor kill' deaktiviert und habe immer noch das gleiche Problem. – jeremy

+0

Ich denke, dies ist ein primäres oder sekundäres Gruppenberechtigungsproblem. Wird die Antwort überarbeiten, um es zu reflektieren. –

0

Für Sie zur Fehlerbehebung können vorübergehend Welt beschreibbare auf die Datei gesetzt:

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

Sie auch

sudo python3 manage.py migrate

+0

Danke. Leider, obwohl es mit 777 Dauerwellen funktioniert, möchte ich es nicht so lassen. Ich bin mir nicht sicher, was du mit deinem zweiten Vorschlag meinst, das ist der Befehl, den ich bereits ausgeführt habe? – jeremy

+0

Ich schlug vor, dass Sie 777 verwenden, um zu sehen, ob der Befehl in das Protokoll schreiben könnte. Sie wissen, dass die Anwendung nicht der Eigentümer oder in der Gruppe ist. –

Verwandte Themen