这是一个相当普通的 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 20
20、21等等。通过验证semanage port -l | grep haproxy
显示包含的自定义端口。