我有几样东西想要在 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 专用服务器政策,我猜也许我需要学习如何编写 SELinux 策略?当一个服务根本没有名字时,我需要那么多,这太疯狂了,但我仍然想学习如何做到这一点。
编辑 2:花了一些时间仔细阅读后,我发现 Starbound 链接似乎不是我想要的;唯一的 SELinux 策略编写是针对单独的 Apache 服务器(Apache 已经定义)而不是游戏服务器。Soldat 似乎非常接近我想要的,但我认为我需要一个策略编写入门知识才能实现这一点。特别是,我真的只对如何为自定义服务器/Web 服务打开端口感兴趣。设置文件路径访问听起来也不错,但我可以使用用户帐户来管理它,而即使我在防火墙命令(firewalld)中打开网络端口,如果我没记错的话,它仍然会被 SELinux 阻止(我知道我过去遇到过这个问题,但我想我可以重新测试以确保)。
答案1
这里需要理解的一个关键点是默认的 SELinux 策略是有针对性的也就是说,它只限制已知的东西。很久很久以前,我们尝试过另一种方法(阻止所有策略不允许的东西),但每次都有很多东西出错,所以大家都把它关掉了。
因此,你myNiftyGameServer
将在一个不受限制的域中运行反正默认情况下 — — 如果您想将其收紧,则需要在容器中运行它或编写特定的策略。
这就是为什么您找不到一种简单的方法来添加随机端口类型......它不是很有用。
有一个不错的快速指南,用于为守护进程创建自定义策略RHEL 8 文档