我遇到了一个问题,tomcat无法使用systemctl start启动,但在以root身份从命令行执行脚本时启动ok。这似乎指向了权限问题,但在检查文件所有权和组时,一切都很正常tomcat:tomcat. 而且,它以前启动得很好,“突然”停止启动systemctl启动(除了,必须有一个原因)。
我在这里发布了这个问题:
tomcat9不再使用systemctl启动,而是手动启动
我首先要说的是,尽管我现在读到的关于selinux的内容比我想读的要多,但我仍然不能100%确定它是如何工作的,或者在这种情况下,它会引起问题。以下是我迄今为止所发现的以及与之相关的问题。
根据我读到的关于selinux的内容,当处于许可模式时,它将审计访问,但不会阻止访问或导致问题。是真的吗?在我的例子中,塞斯塔特斯显示:(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 y 121/bin/中的所有可执行文件都属于“10:143”,这给了我一个指示,无论是谁拥有它,它都被删除或不存在(这可能是由于安装时的问题)。所以,我把主人改成root:root which 匹配我拥有的centos8虚拟机中的java可执行文件。那没能解决问题。所以我使用“ll-z”命令列出了文件的上下文。所有可执行文件都是未定义的\u:object\u r:usr\u t:s0。当我检查centos8java文件夹的可执行文件时,它们是system\u:object\u r:bin\u t:s0,在我更好地理解其后果之前,我不愿意更改有关这些文件的任何其他内容。
所以,我认为是tomcat问题,似乎是权限问题,特别是selinux问题(尽管我不确定)。
所以问题是:
我走的路对吗?即使selinux模式是允许的,上下文仍然需要正确设置?
除了重新安装java之外,有没有一种方法可以重置文件来修复上下文问题?似乎restorecon可以做到这一点,但我不想创造更多的问题。
我所遇到的tomcat问题在追踪问题的根本原因方面并没有造成太多问题。systemctl start在启动时会导致一个“class not found”错误,我知道这是一个权限问题,而不是类路径问题(记住,如果root直接运行脚本而不是systemctl start,那么启动时就可以了)。但是有没有工具或日志可以用来查看权限失败的原因?audit.log并没有指出tomcat或java的很多问题。
就这样。我对这个问题有点迷惑,但我宁愿把它修好,也不愿花更多的时间去弄清楚它是怎么变成这样的。不管怎样,这个修正方案都能让我找到原因。
1条答案
按热度按时间q7solyqu1#
所以,这是自找的,就像大多数“谜团”一样。我仍然无法解释我在selinux上下文中看到的一些差异,但真正的原因(对我来说)是微妙的。对{tomcat root}/lib和{tomcat root}/lib/ext的权限没有执行权限。这可能是由于最近添加了一个jar,然后需要由所有者和权限进行更新。在任何情况下,最初的问题导致了许多尝试和错误的尝试来修复它,这使问题更加复杂。
我通过逐个文件夹、逐个文件比较工作示例和非工作示例,找到了解决方案。很显然,新的jar和所有者/权限更改应用于除生产版本之外的所有版本。
所以,是权限问题,但不是selinux权限问题。