SELinux는 Tomcat 웹 애플리케이션이 /tmp 폴더에서 JNI(Java Native Library)를 로드하지 못하도록 방지합니다.

SELinux는 Tomcat 웹 애플리케이션이 /tmp 폴더에서 JNI(Java Native Library)를 로드하지 못하도록 방지합니다.

Tomcat이 설치된 Centos 7이 있습니다.수코양이사용자

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

SELinux가 시행되고 있으며 /tmp/ 폴더의 공유 객체 파일 .so에서 JNI(Java Native Library)를 로드하려고 시도하는 Java 웹 애플리케이션이 작동하지 않습니다.

 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를 허용하도록 구성하려면 어떻게 해야 합니까?수코양이사용자가 이 파일을 로드합니다./tmp/응용 프로그램/폴더?

이 명령을 사용하고 Tomcat을 다시 시작해 보았지만 여전히 동일한 오류가 발생합니다.

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

답변1

restoreconfcontext를 정의한 후 실행하는 것을 잊은 것 같습니다.

$ 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

관련 정보