webentwicklung-frage-antwort-db.com.de

Berechtigung abgelehnt, wenn Protokolldatei geschrieben wird

Ich verwende Ubuntu 13.04. Ich verwende uwsgi mit Sudo service uwsgi start

Ich habe die Protokolldatei in Django als /home/shwetanka/logs/mysite/mysite.log konfiguriert.

Aber ich bekomme diesen Fehler - 

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

Wie kann ich das beheben? Dies sollte nicht passieren, wenn ich als Sudo uwsgi betreibe.

13
Shwetanka

Sie müssen die Berechtigungen mit dem Befehl chmod wie folgt festlegen: chmod 775 /home/shwetanka/logs/mysite/mysite.log.

Schauen Sie sich den Besitzer der Datei mit ls -l /home/shwetanka/logs/mysite/mysite.log an und machen Sie sie für uwsgi beschreibbar. Wenn die Datei nicht im Besitz von uwsgi ist, müssen Sie den Befehl chown verwenden.

Sehen Sie sich den Benutzernamen an, unter dem Ihr Dienst mit ps aux | grep 'uwsgi' ausgeführt wird.

Wenn die Sicherheit im Moment für Sie nicht so wichtig ist, verwenden Sie chmod 777 /home/shwetanka/logs/mysite/mysite.log und fertig. Aber so wird das nicht gemacht.

Am sichersten ist es, wenn Sie den Eigentümer und die Gruppe der Datei überprüfen und gegebenenfalls ändern und die Berechtigungen entsprechend anpassen.

Lassen Sie uns ein Beispiel geben.

Wenn ich eine Datei in /home/shwetanka/logs/mysite/mysite.log habe und der Befehl ls -l /home/shwetanka/logs/mysite/mysite.log die folgende Ausgabe gibt:

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

dies bedeutet, dass der Besitzer der Datei shwetanka und die Gruppe auch shwetanka ist. Nun lesen wir die rwx Bits. Die erste Gruppe bezieht sich auf den Dateieigentümer. Daher bedeutet rw-, dass die Datei vom Eigentümer lesbar und beschreibbar, von der Gruppe lesbar und beschreibbar und von den anderen lesbar ist. Sie müssen sicherstellen, dass der Eigentümer der Datei der Dienst ist, der versucht, etwas in die Datei zu schreiben, oder dass die Datei zu einer Gruppe des Dienstes gehört. Andernfalls wird ein permission denied-Fehler angezeigt.

Wenn ich nun einen Benutzernamen uwsgi habe, der vom USWGI-Dienst verwendet wird und die oben genannte Datei von diesem Dienst beschreibbar sein soll, muss ich den Eigentümer der Datei wie folgt ändern:

chown uwsgi /home/shwetanka/logs/mysite/mysite.log. Da das Schreibbit für den Eigentümer (die erste rwx-Gruppe) bereits auf 1 gesetzt ist, kann diese Datei nun vom UWSGI-Dienst beschrieben werden. Für weitere Fragen, bitte hinterlassen Sie einen Kommentar.

24
Luka

Alternativ können Sie die Option umask für uwsgi einstellen ( http://uwsgi-docs.readthedocs.org/de/latest/Options.html#umask ).

Ich hatte die gleiche Situation, ich habe uwsgi über www-data laufen lassen und Buildout verwendet. Dieser Fix in meinem Fall sah also so aus: 

[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 = ...

Nachdem diese Protokolldateiberechtigungen 664 wurden, können auch Gruppenmitglieder der Gruppe "www-data" in die Protokolldatei schreiben.

1
Gleb