SELinux блокирует веб-приложение tomcat для загрузки собственной библиотеки Java (JNI) из папки / tmp

У меня есть Centos 7 с Tomcat и пользователь Tomcat

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

SELinux работает принудительно, и веб-приложение Java, которое пытается загрузить собственную библиотеку Java (JNI) из общих объектных файлов .so в папке / tmp / не может работать.

  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. Разрешение этого файла:

 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, чтобы пользователь tomcat мог загружать эти файлы из папки / tmp / app / ?

Я попытался с этой командой и перезапустить Tomcat, но он по-прежнему имеет ту же ошибку

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

Я думаю, что вы забыли запустить restorecon после определения fcontext:

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

Рекомендации

Я использую инструмент aud2allow, чтобы 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