selinux 正在阻止对文件 centos 的执行访问

selinux 正在阻止对文件 centos 的执行访问

我想使用以下 cmdlet 在 CentOS 上启动 Tomcat 服务:

systemctl start tomcat.service

但我得到了错误

无法启动 Apache ExecStart=/opt/tomcat/bin/startup.sh(代码=exited,状态=203/EXEC)。

并通过命令记录:

Journalctl -xe 

说明

Selinux 阻止 (artup.sh) 对文件 startup.sh 进行执行访问

鉴于我可以在我的 CentOS 上启动任何其他服务,那么我的 tomcat 服务可能存在什么问题?

谢谢

答案1

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

注意:如果单元文件中未设置 JAVA_HOME 环境变量,systemd 将忽略该变量。

相关内容