我有一个网站在Django和阿帕奇(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()
但我收到一个错误呃出口:
Exception: /bin/sh: /usr/local/bin/ffmpeg: Permission denied
经过一些测试,我发现 SELinux 正在阻止并记录它。当我禁用 SELinux 时,它起作用了,但由于我们的客户端内部策略,我必须保持它处于启用状态。
我发现了一些应该读取阻止规则并可以使用“audit2allow”禁用它们的命令:
grep httpd /var/log/audit/audit.log | audit2allow -m httpdlocal > httpdlocal.te
以上规则见本地网站文件。下面应用它们。
grep httpd /var/log/audit/audit.log | audit2allow -M httpdlocal
semodule -i httpdlocal.pp
即使如此,仍然记录“没有权限”。
我走在正确的轨道上,或者有更好的方法让 SELinux 保持开启“执行”模式并解锁Apache下的FFMPEG执行?