我有一个安装了 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
我使用@jordanm 评论中的 audit2allow 工具来允许 tomcat 对此 /tmp/app 文件夹拥有多个权限(读取、执行)。
cat /var/log/audit/audit.log | audit2allow -a