У меня есть веб-сайт, работающий под Django и Apache (httpd), и в представлении мне нужно вызвать FFMPEG для преобразования изображения в видео. Он работал на Ubuntu 12 годами, но теперь нам нужно перенести его на CentOS 7, и все стало сложнее. Код выглядит так:
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()
Но я получаю ошибку на выходе ERR:
Exception: /bin/sh: /usr/local/bin/ffmpeg: Permission denied
После некоторого тестирования я обнаружил, что SELinux блокирует и регистрирует его. Когда я отключил SELinux, он работал, но я должен оставить его включенным из-за внутренней политики нашего клиента.
Я нашел несколько команд, которые должны прочитать заблокированные правила и отключить их, используя "audit2allow":
grep httpd /var/log/audit/audit.log | audit2allow -m httpdlocal > httpdlocal.te
Выше, чтобы увидеть правила в файле httpdlocal.te . Ниже их применять.
grep httpd /var/log/audit/audit.log | audit2allow -M httpdlocal
semodule -i httpdlocal.pp
Даже с этим, все еще логирование "Отказано в доступе".
Я на правильном пути или есть лучший способ сохранить SELinux в "принудительном" режиме и разблокировать выполнение FFMPEG под Apache?