![SELinux 策略阻止 Tomcat 启动](https://linux22.com/image/785040/SELinux%20%E7%AD%96%E7%95%A5%E9%98%BB%E6%AD%A2%20Tomcat%20%E5%90%AF%E5%8A%A8.png)
在新建的 Oracle Linux 8 服务器上,我添加了驱动器和文件系统,然后通过 tarball 将 Apache Tomcat 放在该文件系统中。现在,当通过服务文件启动 Tomcat 时,我收到一条错误消息,提示 Tomcat 尚未启动,并且我的 journalctl 文件显示以下内容:
4 月 4 日 09:53:17 t-einv systemd[1]: 无法启动 Apache Tomcat Web 应用程序容器。-- 主题:单元 tomcat.service 已失败 -- 定义者:systemd -- 支持:https://support.oracle.com
-- 单元 tomcat.service 已失败。
-- 结果失败。 4 月 4 日 09:53:17 t-einv setroubleshoot[2924]: AnalyzeThread.run(): 取消待处理的警报 4 月 4 日 09:53:17 t-einv setroubleshoot[2924]: SELinux 正在阻止 /usr/lib/systemd/systemd 对文件 /u01/tomcat/bin/startup.sh 执行 execute_no_trans 访问。 要查看完整的 SELinux 消息,请运行:sealert -l 97dddf7a-4f8a-4> 4 月 4 日 09:53:17 t-einv setroubleshoot[2924]: SELinux 正在阻止 /usr/lib/systemd/systemd 对文件 /u01/tomcat/bin/startup.sh 执行 execute_no_trans 访问。
***** Plugin catchall (100. confidence) suggests **************************
If you believe that systemd should be allowed execute_no_trans access on the startup.sh file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c '(artup.sh)' --raw | audit2allow -M my-artupsh
# semodule -X 300 -i my-artupsh.pp
4 月 4 日 09:53:17 t-einv setroubleshoot[2924]: AnalyzeThread.run(): 将警报超时设置为 10
tomcate/bin 目录上的 ruunig ls -FlasZ 显示 startup.sh 上的以下 selinux 策略
unconfined_u:object_r:default_t:s0 1904 年 4 月 3 日 09:27 startup.sh*
关于如何永久改变政策以使其运行,您有什么想法吗?
答案1
为了安全起见,Web服务器无法使用默认的selinux策略执行可写文件。
如果需要(例如,对于缓存的编译文件),请运行setsebool -P httpd_execmem 1
。
如果不是,请删除需要 tomcat 执行的文件的写权限。(/u01/tomcat/bin/startup.sh
此处)
此外,我发现用命令来理解拒绝会更容易audit2allow -a
。