2016-07-02 44 views
0

Ich habe Probleme mit meiner Django-Anwendung zu schreiben, die meine Named Pipe mit meinem Dämon kommuniziert:Django - Berechtigungsfehler beim Öffnen von Rohr

Django application -> garage_gate_pipe -> python daemon

Der Dämon von gate Benutzern verwendet wird, und ich nahm an, dass www-data verantwortlich für die Ausführung meiner Django app (wird Anwendung von uwsgi angetrieben), so habe ich www-data-gate Gruppe hinzugefügt:

$ sudo -u www-data groups 
gate www-data 

und ich habe fürrichtigen Zugriffsrechte gewährt:

[Errno 13] Permission denied: '/path/to/garage_gate_pipe'

Hier ist die Fehlerzeile:

pipeout = open(settings.PIPE_NAME, 'w') 

Es ist sehr seltsam, denn in Command alles hat gut funktioniert

prw-rw---- 1 gate gate 0 Jul 2 17:55 garage_gate_pipe 

leider nicht wegen der Berechtigungsfehler nicht funktioniert:

echo -n 'Open' | sudo -u www-data tee ./garage_gate_pipe 

entschied ich mich verantwortlich, welcher Benutzer zu überprüfen, ist Django App für die Verwaltung, also habe ich Berechtigungen Rohr geändert:

sudo chmod 666 garage_gate_pipe 

und entschied whoami Befehl von Shell aufzurufen und sie zu meinem Named Pipe senden und drucken Sie es in meinem python-Daemon:

os.system("whoami > /home/gate/garage_gate/gate_gpio/garage_gate_pipe") 
pipeout = open(settings.PIPE_NAME, 'w') 

Und alles ...

Der Ausgang von meinem Dämon gearbeitet wurde:

'www-data

'

Es ist seltsam, weil meine uwsgi Django App scheint von www-data Benutzer ausgeführt werden.

Mein Named Pipe garage_gate_pipe gute Zugriffsrechte hat, so kann ich es von Kommandozeilen schreiben, aber von django Anwendung funktioniert es nicht, wenn ich die Schreibberechtigung für others hinzufügen ...

Jede Idee, was ich kann ändern, um diese Lösung mit 660 Berechtigungen für garage_gate_pipe arbeiten zu lassen?

Antwort

1

änderte ich --gid Parameter in uwsgi Befehl in meinem /etc/rc.local-Skript, das für den Start-Server auf Start verantwortlich ist:

/usr/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid gate 

Jetzt funktioniert es.