我有一个 CentOS 7 盒子,在同一个 NIC 上有多个 IP 地址。一个 IP 使用 443 进行 ssh,我希望另一个 IP 使用 443 作为 Web 服务器。SELinux 不允许 httpd 启动,提示:
(13)Permission denied: AH00072: make_sock: could not bind to address MYIPADDRESS:443
我已将这两项服务设置为通过其相关配置文件中的 Listen 参数专门侦听相关 IP 地址。在我关闭 SELinux 之前,有没有办法同时允许这两项服务?我的 SELinux 配置目前如下所示:
# semanage port -l | grep 443
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pki_ca_port_t tcp 829, 9180, 9701, 9443-9447
pki_kra_port_t tcp 10180, 10701, 10443-10446
pki_ocsp_port_t tcp 11180, 11701, 11443-11446
pki_tks_port_t tcp 13180, 13701, 13443-13446
ssh_port_t tcp 443, 22
来自审计日志:
type=AVC msg=audit(1547705364.251:191844): avc: denied { name_bind } for pid=17495 comm="httpd" src=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ssh_port_t:s0 tclass=tcp_socket
答案1
好的,这是一个非常老的话题,但有趣的是,我刚刚遇到了与多宿主主机相同的问题。
假设一台拥有两个网络接口的机器将一个进程绑定到 wxyz:port,将另一个进程绑定到 abcd:port,那么理想情况下,应该有一种相当轻松的方式将其封装在 SELinux 中
我猜可能使用自定义策略是可能的,但这看起来好像是 SELinux 使之变得困难的一件事,其实并不困难。