SELinux 阻止 tomcat Web 应用程序从 /tmp 文件夹加载 Java 本机库 (JNI)

SELinux 阻止 tomcat Web 应用程序从 /tmp 文件夹加载 Java 本机库 (JNI)

我有一台安装了 Tomcat 的 Centos 7雄猫用户

ls -l /var/lib/tomcat
total 0
drwxrwxrwx. 5 root tomcat 84 Jul  3 13:18 webapps

SELinux 正在强制执行,尝试从 /tmp/ 文件夹中的共享对象文件 .so 加载 Java 本机库 (JNI) 的 Java Web 应用程序无法工作。

 java.lang.UnsatisfiedLinkError: /tmp/app/gdal_java/2018.07.03.14.52.59/libosrjni.so: 
/tmp/app/gdal_java/2018.07.03.14.52.59/libosrjni.so: failed to map segment from shared object: Permission denied

如果我禁用 SELinux,则在 Java Web 应用程序中加载这些文件没有问题。该文件的权限是:

ls -lZ /tmp/app/gdal_java/2018.07.03.14.52.59/libosrjni.so
-rwxrwxrwx. tomcat tomcat system_u:object_r:tomcat_tmp_t:s0 /tmp/app/gdal_java/2018.07.03.14.52.59/libosrjni.so

我如何配置 SELinux 以允许雄猫用户加载这些文件/tmp/应用程序/文件夹?

我已经尝试使用此命令并重新启动 tomcat 但它仍然有相同的错误

sudo semanage fcontext -a -t tomcat_tmp_t '/tmp/app_*/(.*)?'

答案1

restorecon我认为您在定义 fcontext 后忘记运行:

$ semanage fcontext -a -t tomcat_tmp_t "/tmp/app_*(/.*)?"
$ restorecon -rv /tmp

参考

答案2

我使用audit2allow工具允许tomcat对此/tmp/app文件夹拥有多个权限(读取、执行)。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-allowing_access_audit2allow

cat /var/log/audit/audit.log  | audit2allow -a

相关内容