在 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 生成的本地策略使用以下授权:
允许 httpd_t port_t:tcp_socket { name_bind name_connect };
它允许 httpd 绑定到任何端口(不仅仅是 http_port_t 中列出的端口),并连接到任何端口。这种方法的优点是它包含在本地策略中,并且不会在下一个yum update. 缺点是它授予了比必要更广泛的许可;httpd 可以绑定并连接到任何端口。
绑定的替代方法是使用以下命令将我们的自定义端口添加到 http_port_t 列表:
semanage port -a -t http_port_t -p tcp (自定义端口号)
我知道我可以看到 http_port_t using 下的端口列表semanage port -l | grep http_port_t,但我不知道这个列表存储在哪里,也不知道下yum update一个新策略是否会覆盖该列表。
连接的替代方法是使用以下命令创建新的端口列表:
semanage port -a -t ajp_port_t -p tcp 9010
然后使用以下内容创建本地策略:
允许 httpd_t ajp_port_t:tcp_socket { name_connect };
就像增强的 http_port_t 列表一样,我不知道我的新ajp_port_t列表是否能在安装新的目标策略版本后继续存在。
semanage创建不受策略包控制的新模块。当策略包升级时,这些模块将保留并在加载新策略时应用到新策略。
| 归档时间: |
|
| 查看次数: |
7326 次 |
| 最近记录: |