使用SELinux强制Linux允许程序绑定到低于1024的端口号

在SELinux中有一种方法来强制linux允许程序能够绑定到低于1024的端口号。

假设你有适当的应用程序的策略模块(让我们称你的应用程序为“foo”),你可以做两件事情之一。 您可以在策略中定义一个foo_port_ttypes,允许您的应用程序访问它,如下所示:

 allow foo_t foo_port_t:tcp_socket name_bind; 

并使用这样的东西来标记实际的端口

 semanage port -a -t foo_port_t -p tcp 803 

这将为您的应用程序要求TCP端口803。 1023以下的大多数端口已经有了标签,不能多次标注端口,文件。

所以选项二:你可以允许你的应用绑定到一个不同标签的端口,把这样的行放到你的策略模块中:

 require { type http_port_t; } allow foo_t http_port_t:tcp_socket name_bind; 

这将允许您的应用程序绑定到具有http_port_t (意思是http_port_t和8443)的任何端口。 您可以通过以下命令find要使用的端口(本例中为803)的标签:

 semanage port -l | grep 803 

运行它作为根或sudo它。 你只能使用root进行testing,而不能在生产环境中使用。 内核不允许你在没有这些权限的情况下打开一个低于1024的端口(知名端口)。 它与SELinux无关,但与内核无关。

不是SELinux不允许你的程序在特权端口上绑定,而是Linux内核。 您可以执行从所需端口到非特权端口的端口转发,并在非特权端口上运行该应用程序。 这是安全的,SELinux允许的。

在我们的商店和经验中,我们发现最好禁用SELinux。 我知道有些人觉得有用,但我们没有。

我们禁用SELinux =禁用/ etc / sysconfig / selinux(或/ etc / selinux / config)中的所有内容

我们在SELinux方面遇到的问题非常多,造成了额外的工作时间,所以不值得。