無法在 CentOS 8 上以非特權使用者身分執行 systemd 服務

無法在 CentOS 8 上以非特權使用者身分執行 systemd 服務

CentOS 7 和 8 之間在 systemd 和 selinux 方面(可能)有一個變化,我還不知道如何處理這個問題。

由於某種原因(跨發行版相容),我們使用的是 postgresql 9.6企業資料庫。安裝程式在 CentOS 7 上運作良好但不再在 CentOS 8 上。安裝程式建立一個以使用者 postgres 身分執行的 systemd 服務(在我的例子中,uid=1004)。

[Service]
Type=forking
TimeoutSec=120

User=postgres
Group=postgres
...

在安裝程式結束時,使用 systemctl 啟動服務。現在,這在 CentOS 8 上失敗了。

postgresql.service: Failed to execute command: Permission denied

在檔案系統和使用者權限方面,一切都很好。

一旦我禁用 SELinux,它就開始工作!

CentOS 7 上不需要這樣做。

附錄

我也許找到了問題的真正原因。我正在安裝到不同的磁碟而不是根檔案系統。如果我安裝到根檔案系統上,安裝程式就會開始工作。一旦來自 systemd 服務文件的「ExecStart」指令的可執行檔位於另一個磁碟上,它就不再運作。如何告訴系統允許這樣做?

非常感謝您啟發我自己。

答案1

不同的磁碟位於檔案層次結構的不同部分?

隨著 SElinux 的生效,迫使您了解 selinux 以及如何建立文件上下文翻譯!嘗試一下如果將 ntpd 的設定檔和 ntp 的日誌檔案變更為其他位置(例如 /services/ntpd/ntp.conf 和 /services/ntpd/ntp.log )會發生什麼!

答案2

一週前我終於找到了解決問題的方法。它之前在我的問題中沒有提到這一點,因為我認為這並不重要。

我正在安裝到一個新的空單獨磁碟。不是根檔案系統。我發現在根檔案系統上安裝是有效的。

我比做了一個

Restorecon -r /新磁碟的掛載點

之後它就開始工作了!

我相信 CentOS 7 不需要這樣做

答案3

您將層次結構從根 (/) 向下複製到目前安裝的磁碟(即安裝為 /tmp/tmp_mnt)?

Restorecon -r 重置檔案上下文...所以 ls -Z 是你的朋友

postgres 的 systemd 單元檔案和 postgres 二進位檔案上的 ls -Z 很有趣。

centos7 和 centos8 之間的 SElinux 策略可能有所不同。

相關內容