试图让 selinux 允许 apache 运行 使用端口的可执行文件

Trying to get selinux to allow apache to run an executable that uses a port

我正在尝试让 apache 到 运行 一个 bash 脚本,该脚本使用 ffmpeg 从 mp4 流中获取快照。我收到一个 "Input/Output" 错误,其中 ffmpeg 被阻止访问端口 80。

我已经将 apache 连接到 运行 ffmpeg,它似乎在端口访问上被阻止了。

我假设它是一个 selinux 权限问题,当 apache 运行 时,ffmpeg 需要特殊权限才能访问端口 80(或任何端口)。

脚本 运行 在命令行中运行良好,只是远程启动它就死机了。

感谢您的帮助!

sudo semanage port -l | grep http_port http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000 pegasus_http_port_t tcp 5988

ls -Z /usr/bin/ffmpeg -rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/bin/ffmpeg

来自 var/log/audit/audit.log:

type=AVC msg=audit(1502245154.609:23912): avc: denied { name_connect } for pid=12043 comm="ffmpeg" dest=80 scontext=system_u:system_r:httpd_sys_script_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket

type=SYSCALL msg=audit(1502245154.609:23912):arch=c000003e syscall=42 success=no exit=-13 a0=3 a1=1775f00 a2=10 a3=7ffd7a6af0d0 items=0 ppid=12041 pid= 12043 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="ffmpeg" exe=" /usr/bin/ffmpeg" subj=system_u:system_r:httpd_sys_script_t:s0 key=(null)

运行 红帽企业版 Linux 7.4

使用https://wiki.centos.org/HowTos/SELinux#head-faa96b3fdd922004cdb988c1989e56191c257c01

解决

创建了特定于访问要求的策略 - 文档中的第 7 步