我目前正在部署我的 Java Web 应用程序。此应用程序以 WAR 文件的形式提供给我。
我的目标是应用程序以有限的 SELinux 启动。这意味着它只能访问运行应用程序所需的内容。明确地说,我希望应用程序可以通过一个端口访问并可以访问多个文件夹,仅此而已。应用程序默认使用 启动java -jar <app>
。据我所知,使用 Tomcat 并不容易,因为我的应用程序至少需要 Tomcat 8.5,并且在安装期间未设置有关 SELinux 的必要设置。
当前该过程显示为 unconfined_u。一个问题是 CentOS 7 上没有 SELinux 的 Java 模块。
一开始我尝试了以下两件事,但没有成功:https://www.schakko.de/2018/08/28/running-spring-boot-jar-service-selinux-enabled/和https://stackoverflow.com/questions/26068817/where-is-the-java-selinux-policy-module-for-centos-7。然后我尝试用 编写自己的标签,sepolicy generate --init <path>/<to>/<app>/<app> -n <app>
并<app>.sh
尝试使用 Java(使用 yum 安装)执行相同的操作。之后,我以相同的方式尝试使用 shell 脚本。我还安装了生成的 rpm 包。最后,我尝试为 shell 脚本和 war 文件指定类型 tomcat_exet_t。
虽然我在所有尝试中都按我想要的方式更改了标签,但最终该进程以 unconfined_u 的形式运行。
答案1
为了限制它,必须扩展默认的 .te 文件。应添加以下行:
require { type unconfined_t; }
domain_type(myapp_t)
domain_entry_file(myapp_t, myapp_exec_t)
domtrans_pattern(unconfined_t,myapp_exec_t, myapp_t)