在SELinux中管理自定义端口的最佳方法

前端之家收集整理的这篇文章主要介绍了在SELinux中管理自定义端口的最佳方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在RHEL 6.2上,我们在主机上使用httpd作为另一台主机上Tomcat的前端代理,我们还将mod_status配置为侦听非标准端口以向监视工具提供状态信息.因此,我们需要httpd来1)建立网络连接,2)监听非标准端口.

默认目标策略(当前处于许可模式)仅允许httpd侦听已定义的端口列表(semanage port -l | grep http_port_t),并且不允许httpd进行出站网络连接. aureport -a显示当httpd尝试绑定到自定义状态端口时以及当它尝试连接到其他主机上的AJP端口时AVC拒绝.

我发现了两种解决方案,但其中一种似乎过于宽松,而另一种解决方案太脆弱(即可能在政策升级时破坏).

“广泛”的解决方

我使用audit2allow生成本地策略源,然后使用checkmodule编译它,semodule_package生成策略包,并使用semanage开始强制执行它.然后我重新启动了httpd,并确认没有生成AVC拒绝. audit2allow生成的本地策略使用以下授权:

allow httpd_t port_t:tcp_socket { name_bind name_connect };

它允许httpd绑定到任何端口(不仅仅是http_port_t中列出的端口),并连接到任何端口.这种方法的专业是它包含在本地策略中,并且不会在下一次yum更新时被覆盖.可以肯定的是,它授予了比必要更广泛的许可; httpd可以绑定并连接到任何端口.

“狭隘”的解决方

绑定的替代方法是使用以下命令将我们的自定义端口添加到http_port_t列表:

semanage port -a -t http_port_t -p tcp (custom-port-number)

我知道我可以使用semanage port -l |查看http_port_t下的端口列表grep http_port_t,但我不知道这个列表的存储位置,也不知道下一个使用新策略的yum更新是否会覆盖该列表.

连接的替代方法是使用以下命令创建新的端口列表:

semanage port -a -t ajp_port_t -p tcp 9010

然后使用以下内容创建本地策略:

allow httpd_t ajp_port_t:tcp_socket { name_connect };

就像增强的http_port_t列表一样,我不知道我的新ajp_port_t列表是否能够在安装新的目标策略版本后继续存在.

解决方法

semanage创建了不受策略包控制的新模块.升级策略包后,这些模块将保留,并在加载时应用于新策略.

猜你在找的Linux相关文章