在埠 80 上執行 rundeck
預設情況下,rundeck 在埠 4440 / 4443 上執行。現在,出於安全原因,這確實應該很明顯,我不希望這個敏感的服務綁定到高編號埠。設置 HTTPS 後,應該會減輕我的一些擔憂,但仍然……
有沒有辦法讓 rundeckd 服務以 root 身份綁定到埠 80,然後下拉到 rundeck 使用者?
明確地說,我不是在問“我怎樣才能讓 rundeck 在不同的埠上執行?”,因為我可以修改
/etc/rundeck/profile
並讓它在任何未註冊的埠上執行就可以了。
有沒有辦法讓 rundeckd 服務以 root 身份綁定到埠 80,然後下拉到 rundeck 使用者?
據我所知,沒有開箱即用的解決方案。對於您想要實現的目標,程序應使用權限分離:
在電腦程式和電腦安全中,權限分離是一種技術,其中程序被分成幾個部分,這些部分僅限於執行特定任務所需的特定權限。這用於減輕電腦安全攻擊的潛在損害。
實現權限分離的常用方法是將電腦程序分叉為兩個程序。主程序放棄特權,而較小的程序保留特權以執行特定任務。然後兩半通過套接字對進行通信。因此,任何對較大程序的成功攻擊都將獲得最小的訪問權限,即使這對程序將能夠執行特權操作。
特權分離傳統上是通過使用 POSIX 指定的 setuid(2)/setgid(2) 和相關係統呼叫將真實使用者 ID/組 ID 與有效使用者 ID/組 ID 區分開來實現的。如果這些位置不正確,則間隙可能會導致廣泛的網路滲透。
如上所述,程序可以呼叫setuid(2)和setgid(2)以在以 root 身份啟動後放棄特權。
如果你那麼絕望的話,為了讓所有這些工作,你可能需要對 rundeck 程式碼進行根本性的更改。
請參閱:Linux 守護程序如何以及為何放棄特權和
https://unix.stackexchange.com/questions/21282/drop-process-privileges
或者您可以使用authbind允許非 root 程序綁定()到較低的埠。
您可以使用一些 java 系統屬性來自定義啟動器行為。
-Dproperty=value
使用命令的普通命令行選項指定這些屬性java
:server.http.port The HTTP port to use for the server, default "4440" server.https.port The HTTPS port to use or the server, default "4443"