在 SELinux 中打开端口:如何授予守护进程监听预定义端口类型的权限?

在 SELinux 中打开端口:如何授予守护进程监听预定义端口类型的权限?

这是一个相当普通的 SELinux 问题,但有一个具体的例子。我对 SELinux 还不太熟悉,所以经常为此而苦恼!

我想知道我是否可以设置一个守护进程(在本例中为haproxy)来监听比其默认 selinux 策略允许的更多的端口。例如,SMTP 和 FTP 是一些可能适合负载平衡或代理的服务,但默认 SELinux 策略不允许。

haproxy已经有一个相当好的问题和答案描述了允许监听的端口:https://unix.stackexchange.com/questions/363878/which-selinux-policies-apply-to-haproxy

我现在想做的是允许 haproxy 监听 FTP,并且只监听 FTP 端口。已经有定义 FTP 使用的典型端口的端口类型:-

#> semanage port -l | grep ftp
ftp_data_port_t                tcp      20
ftp_port_t                     tcp      21, 989, 990
ftp_port_t                     udp      989, 990
tftp_port_t                    udp      69

但是,我如何允许 haproxy 监听这些端口?

我在网上看到了一些建议,但由于各种原因,我并不特别喜欢这些建议:-

  • 将 selinux 置于宽容模式(不敢相信甚至有人提出这个建议)
  • 允许 haproxy 监听任意端口setsebool -P haproxy_connect_any 1。这对我来说又有点太宽容了。
  • 上述链接问题的答案是,在 haproxy 已经可以访问的端口类型之一上添加我感兴趣的端口。好的,所以我可以将端口 21 添加到 http 端口(或复杂端口等),但这似乎违背了ftp_port_t已经定义的观点。
  • 使用 创建新策略audit2allow。我个人不喜欢这样做,因为这需要许多依赖项(好吧,数量不是很多),然后在多个负载均衡器上部署会有点麻烦。

理想情况下,我只想知道是否有可用的命令(理想情况下无需安装任何其他东西),该命令可授予进程类型(在本例中为haproxy_t)在特定端口类型(ftp_port_t)上进行监听的权限。有什么建议吗?

答案1

看来这个例子可以工作semanage port -m -t haproxy_t -p tcp 2020、21等等。通过验证semanage port -l | grep haproxy显示包含的自定义端口。

相关内容