我正在尝试在 Redhat Linux 7 (RHEL7) 上安装 RabbitMQ。我按照 RabbitMQ 网站上的说明进行操作,安装得很好。但是,它不会运行,因为 SELinux 阻止 Erlang 绑定到端口 25672。
我在 github 上的 SELinux 存储库中找到了 SELinux 策略文件,但我不知道如何构建并应用它们。
我的谷歌搜索一直不成功,因为我不断提出对其他 Linux 发行版的引用,或者使用audit2allow。
如何应用rabbitmq策略文件https://github.com/selinux-policy/selinux-policy/tree/f21-contrib到我的 RHEL7 盒子吗?
答案1
这些是应用自定义策略的说明斯普朗克在 RHEL7 中。对于您的应用程序来说,它应该几乎相同,只需按照说明操作并使用 fedora 存储库中的策略文件即可。显然,首先在开发环境中执行此操作以验证它是否适用于您的应用程序。
以下是逐字复制的核心指令:
- 将此策略下载/上传到您的服务器(并解压 zip - 如果不使用 git 克隆),然后
cd
进入目录 yum install policycoreutils-python setools-console selinux-policy-devel
cp splunk.if /usr/share/selinux/devel/include/services/
make -f /usr/share/selinux/devel/Makefile DISTRO=rhel7
semodule -i splunk.pp
semanage permissive -a splunk_t
restorecon -R /opt/splunk
restorecon /etc/init.d/splunk
/etc/init.d/splunk restart
答案2
查看您的端口使用的上下文:
# seinfo --portcon=25672
portcon tcp 25672 system_u:object_r:rabbitmq_port_t:s0
portcon tcp 1024-32767 system_u:object_r:unreserved_port_t:s0
portcon udp 1024-32767 system_u:object_r:unreserved_port_t:s0
所以我想看看什么可以运行:
# sesearch -A -s rabbitmq_t -t rabbitmq_port_t
Found 5 semantic av rules:
allow rabbitmq_t rabbitmq_port_t : tcp_socket { name_bind name_connect } ;
allow nsswitch_domain port_type : tcp_socket { recv_msg send_msg } ;
allow nsswitch_domain port_type : udp_socket { recv_msg send_msg } ;
allow rabbitmq_t port_type : tcp_socket { recv_msg send_msg } ;
allow rabbitmq_t port_type : udp_socket { recv_msg send_msg } ;
所以我怀疑你需要重新标记你的rabbitmq可执行文件,以便rabbitmq_exec_t
它可以绑定到端口。它是 RHEL7 中基本策略的一部分。 (这就是为什么你应该使用包而不是从头开始编译)