在SELinux中pipe理自定义端口的最佳方式

在RHEL 6.2上,我们使用主机上的httpd作为另一台主机上的Tomcat的前端代理,并且我们还configuration了mod_status,以便在非标准端口上侦听,以向监视工具提供状态信息。 因此,我们需要httpd来1)build立networking连接,2)在非标准端口上侦听。

默认的目标策略(目前处于允许模式)只允许httpd侦听已定义的端口列表( semanage port -l | grep http_port_t ),并且不允许httpd进行出站networking连接。 aureport -a显示httpd试图绑定到自定义状态端口时,以及何时尝试连接到另一个主机上的AJP端口时的AVC拒绝。

我find了两个解决scheme,但一个似乎太宽松了,另一个太脆弱(即在政策升级时可能会中断)。

“广泛”的解决scheme

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

允许httpd_t port_t:tcp_socket {name_bind name_connect};

它允许httpd绑定到任何端口(不只是在http_port_t中列出的端口),并连接到任何端口。 这种方法的亲是,它包含在本地政策,并不会被覆盖下一个yum update 。 意思是它给予比必要的更广泛的许可; httpd可以绑定并连接到任何端口。

“窄”解决scheme

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

semanage port -a -t http_port_t -p tcp(自定义端口号)

我知道我可以使用semanage port -l | grep http_port_t查看semanage port -l | grep http_port_t semanage port -l | grep http_port_t ,但我不知道这个列表存储在哪里,不知道下一个yum update用新策略yum update是否会覆盖列表。

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

semanage port -a -t ajp_port_t -p tcp 9010

然后用以下方法创build一个本地策略:

允许httpd_t ajp_port_t:tcp_socket {name_connect};

就像增加的http_port_t列表,我不知道我的新ajp_port_t列表将继续安装新的目标政策版本。

semanage会创build不受策略包控制的新模块。 当策略包升级时,这些模块将保留并在加载时应用于新策略。