在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方面遇到的问题非常多,造成了额外的工作时间,所以不值得。