FFMPEG-Ausführung unter Apache + Django + WSGI auf CentOS 7 (SELinux) aktivieren

623
digofreitas

Ich habe eine Website, die unter Django und Apache (httpd) ausgeführt wird, und innerhalb einer Ansicht muss ich FFMPEG aufrufen, um ein Bild in ein Video zu konvertieren. Unter Ubuntu 12 hat es jahrelang funktioniert, aber jetzt müssen wir es auf CentOS 7 migrieren, und die Dinge wurden kompliziert. Der Code ist wie folgt:

ffcmd = '/usr/local/bin/ffmpeg -y -loop 1 -i %s -t %d -vf "fade=in:0:5,fade=out:%d:5" -pix_fmt yuv420p -r "30" -c:v libx264 %s %s.mp4 %s' % (##PARAMS##) import subprocess  p = subprocess.Popen(ffcmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) out, err = p.communicate() 

Aber ich erhalte eine Fehlermeldung auf der err Ausfahrt:

Exception: /bin/sh: /usr/local/bin/ffmpeg: Permission denied 

Nach einigen Tests entdeckte ich, dass SELinux es blockiert und protokolliert. Wenn ich SELinux deaktiviert habe, hat es funktioniert, aber ich muss es aufgrund unserer internen Richtlinien für Kunden aktiviert lassen.

Ich habe einige Befehle gefunden, die die gesperrten Regeln lesen sollen und sie mit "audit2allow" deaktivieren könnten:

grep httpd /var/log/audit/audit.log | audit2allow -m httpdlocal > httpdlocal.te 

Oben, um die Regeln in der Datei httpdlocal.te anzuzeigen . Unten, um sie anzuwenden.

grep httpd /var/log/audit/audit.log | audit2allow -M httpdlocal semodule -i httpdlocal.pp 

Trotzdem meldet sich immer noch "Erlaubnis verweigert" .

Ich bin auf dem richtigen Weg oder gibt es eine bessere Möglichkeit, SELinux im Durchsetzungsmodus zu halten und die Ausführung von FFMPEG unter Apache freizuschalten?

0
Anstatt zu versuchen, die Regeln zu umgehen (ohne zu wissen, was sie wirklich sind), sollten Sie sich an die Leute wenden, die sie erstellt haben, damit sie geändert oder zumindest detailliert erklärt werden können. Sind Sie sicher, dass es sich bei dem Problem wirklich um ffmpeg handelt und nicht um die Verwendung einer Shell (`shell = True`)? Oder zumindest, wenn Sie eine Shell verwenden, lassen Sie den Pfad zu `ffmpeg` auflösen. xenoid vor 7 Jahren 1
Die SELinux-Regeln sind Standard, unser Client fordert sie nur auf, aber wir können jetzt jede Regel aktivieren und deaktivieren. Die Python-Befehle funktionieren außerhalb von Apache und dieses "shell = True" ist nur eine Möglichkeit, den Shell-Befehl (String über Liste) zu schreiben. Eigentlich habe ich gerade die Installation von FFMPEG im Ordner der Website mit dem obigen SEMODULE-Befehl gestartet, aber ich warte auf eine schönere Lösung, bevor der Thread geschlossen wird. digofreitas vor 7 Jahren 0

0 Antworten auf die Frage