我有几件事希望能够在 Fedora 上作为服务器站起来。我知道我至少可以运行其中的一些,podman
或者docker
但我已经知道如何做到这一点。我也已经知道如何将其用于现有服务,例如ssh
我只想通过以下方式使用自定义端口:
sudo semanage port -a -t ssh_port_t -p tcp 2222
但我的问题是 selinux 已经定义了ssh_port_t
类型。如果我有一些由于某种原因我不能或不想在容器中运行的自定义应用程序怎么办,我将如何允许端口用于没有预定义类型的东西semanage port --list
?
对于此示例,假设我正在尝试运行 /path/myNiftyGameServer 并希望允许它连接到 udp 端口 12345(目前在我的系统上未使用)。我怎样才能做到这一点?
背景方面,我并不声称自己是大师,但总体上我感觉对 bash 和 Linux 相对精通,但在 SELinux 方面我仍然是一个新手(我知道标签、restorecon
. 和一些基本semanage
命令,但我仍然学习)。
请假设我不愿意简单地禁用 SELinux(因为我是)。如果这个问题看起来不切实际,可以提出其他建议,但我之所以问主要是因为我很好奇这个问题在 SELinux 中将如何解决,并且除了像我的 ssh 这样的现有类型之外,我自己无法找到解决方案上面的例子。请随时为 SELinux 新手推荐其他相关的阅读主题。
编辑:根据我在 Centos 上找到的 Starbound 服务器和Soldat Dedicated server policy的额外搜索,我猜我可能需要学习如何编写 SELinux 策略?当一项服务根本没有名称但我仍然想学习如何做时,我需要这么多真是太疯狂了。
编辑 2:在花了一些时间阅读它们之后,Starbound 链接似乎不是我所追求的;唯一的 SELinux 策略编写是针对单独的 Apache 服务器(Apache 已经定义)而不是游戏服务器。Soldat 似乎与我所追求的非常接近,但我认为我需要一本关于政策写作的入门书才能到达那里。特别是,我真的只对如何为自定义服务器/Web 服务打开端口感兴趣。设置文件路径访问听起来也不错,但是我可以使用用户帐户来管理它,而即使我在 firewall-cmd(firewalld)中打开一个网络端口,如果我没记错的话,它仍然会被 SELinux 阻止(我知道我有这个过去的问题,但我想我可以重新测试以确定)。
这里要理解的关键是默认的 SELinux 策略是target。也就是说,它只限制已知的事物。很久很久以前,我们尝试了另一种方法(阻止政策不允许的所有内容),而且总是有很多东西坏了,每个人都把它关掉了。
因此,默认情况下,无论如何
myNiftyGameServer
你都将在一个不受限制的域中运行——如果你想收紧它,你需要在容器中运行它或编写一个特定的策略。这就是为什么您没有找到一种简单的方法来添加随机端口类型......它不会很有用。
在RHEL 8 Docs中有一个不错的快速指南,用于为守护进程创建自定义策略