Centos
selinux 正在阻止對文件 centos 的執行訪問
我想使用 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 環境變數。