Centos

selinux 正在阻止對文件 centos 的執行訪問

  • September 7, 2020

我想使用 cmdlet 在 CentOS 上啟動 Tomcat 服務:

systemctl start tomcat.service

但我得到了錯誤

無法啟動 Apache ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=203/EXEC)。

並通過命令記錄:

Journalctl -xe 

是說

Selinux 正在阻止 (artup.sh) 對文件 startup.sh 執行訪問

鑑於我可以在我的 CentOS 上啟動任何其他服務,我的 tomcat 服務可能有什麼問題?

謝謝

SELinux 將可在 ExecStart 中使用的二進製文件限制為設置了 system_u:object_r:bin_t:s0 屬性的路徑。通常這些是 /usr/bin /usr/sbin /usr/libexec /usr/local/bin 目錄。

您需要將腳本移動到此目錄之一或更改 selinux 策略以允許 systemd 在所需位置使用二進製文件,如下所示:

chcon -R -t bin_t /opt/tomcat/bin/

restorecon 將更好地“取消修復”上述內容以更新策略,例如

semanage fcontext -a -t bin_t "/opt/tomcat/bin(/.*)?"
restorecon -r -v /opt/tomcat/bin

更新

如果 java 二進製文件不在標準位置(自定義 JVM 發行版),那麼您還需要為其設置bin_t標籤。例如,您的 JVM 安裝在 /opt/java 中,然後:

semanage fcontext -a -t bin_t "/opt/java/bin(/.*)?"
restorecon -r -v /opt/java/bin

*注意:*如果沒有在單元文件中設置,systemd 會忽略 JAVA_HOME 環境變數。

引用自:https://serverfault.com/questions/1032597