在 Fedora 上,如何配置 selinux 以允許新的未定義服務類型的埠?
我有幾件事希望能夠在 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中有一個不錯的快速指南,用於為守護程序創建自定義策略