默认目标策略(当前处于许可模式)仅允许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列表是否能够在安装新的目标策略版本后继续存在.