【发布时间】:2021-03-21 11:23:25
【问题描述】:
我遇到了一个问题,Tomcat 无法使用 systemctl start 启动,但在以 root 身份从命令行执行脚本时启动正常。这似乎指向权限问题,但在检查文件所有权和组时,一切都是 tomcat:tomcat。而且,它过去启动得很好,并且“突然”停止了 systemctl start 启动(除了,必须有一个原因)。
我在这里发布了这个问题:
Tomcat 9 no longer starting using systemctl but will start manually
我会第一个说,尽管我现在阅读的有关 SELinux 的内容比我想的要多,但我仍然不能 100% 确定它是如何工作的,或者在这种情况下会导致问题。以下是我目前发现的内容以及随之而来的问题。
根据我对 SELinux 的了解,在 Permissive 模式下,它会审核访问,但不会阻止访问或导致问题。真的吗?在我的情况下,sestatus 显示:(CENTOS7)
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
既然是宽容的,那么它应该不会影响任何事情,不是吗?但坚持认为它可能我发现了以下内容:
java 可执行文件,实际上 /opt/jdk1.8.0_121/bin/ 中的所有可执行文件都归“10:143”所有,这表明无论用户是拥有它的用户,它都已被删除或不存在(我是由于安装时的问题)。因此,我将所有者更改为 root:root,它与我拥有的 CENTOS8 VM 中的 java 可执行文件相匹配。那没有解决问题。所以我使用“ll -Z”命令列出了文件的上下文。所有的可执行文件都是 unconfined_u:object_r:usr_t:s0 。当我检查 CENTOS8 java 文件夹可执行文件时,它们是 system_u:object_r:bin_t:s0 在我更好地理解后果之前,我不愿意更改有关文件的任何其他内容。
所以,我认为是 Tomcat 问题,似乎是权限问题,特别是 SELinux 问题(虽然我不确定)。
所以问题是:
- 我在这里走的是正确的道路吗?即使 SELinux 模式是允许的,但仍需要正确设置上下文?
- 有没有办法重置文件,除了重新安装 java,可以解决上下文问题吗?看起来 restorecon 可能会这样做,但我不想制造更多问题。
- 在追查问题根源的过程中,我没有创建太多的 tomcat 问题。 systemctl start 在启动时会导致“找不到类”错误,我知道这是一个权限,而不是类路径问题(请记住,这可以通过 root 直接运行脚本而不是 systemctl start 启动)。但是有没有工具或日志可以用来查看权限失败的原因以及原因? audit.log 并没有说明太多关于 tomcat 或 java 的问题。
就是这样。我对这个问题有点困惑,但我宁愿把它修好,而不是花更多时间试图弄清楚它是如何做到的。无论如何,修复可能会指出我的原因。
【问题讨论】:
标签: java tomcat centos7 selinux