
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 策略可能有所不同。