selinux 샌드박스를 사용하여 Java 애플리케이션을 샌드박스하려고 합니다.
시스템 세부정보: redhat 6 | x86_64 x 서버가 설치되지 않음 oracle tar.gz 버전 |
cmd(루트로 실행)
sandbox /root/jdk/bin/java -version
위 명령이 실패했습니다.
/root/jdk/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
약간의 조사 끝에 "libjli.so"가 RPATH 공유 라이브러리라는 것을 발견했습니다. 따라서 샌드박스가 내 bin/java를 /tmp/sandbox_random에 복사하므로 하드코딩된 경로를 찾을 수 없으므로 괜찮다고 생각합니다.
그런 다음 "" 유틸리티를 사용하여 RPATH를 변경 chrpath
하고 하드코드된 값으로 변경했지만 여전히 동일한 오류가 표시됩니다.
그런 다음 샌드박스의 -M -i 옵션을 사용하고 다음 명령을 실행했습니다(불만 제기된 모든 .so 파일을 포함했습니다).
sandbox -M -i /root/jdk/lib/amd64/jli/libjli.so -i /root/jdk/jre/lib/amd64/libjava.so -i /root/jdk/jre/lib/amd64/jvm.cfg -i /root/jdk/jre/lib/amd64/server/libjvm.so -i /root/jdk/jre/lib/amd64/libverify.so -i /root/jdk/jre/lib/amd64/libzip.so /root/jdk/bin/java -version
다음 명령으로 인해 이 오류가 발생합니다.
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007fb039000000, 2555904, 1) failed; error='Permission denied' (errno=13)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /root/hs_err_pid1270.log
이제 strace를 사용하여 무슨 일이 일어나고 있는지 확인하고 strace(작은 부분)를 인쇄합니다.
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fb15b6359d0) = 8268
close(4) = 0
read(3, "", 1048576) = 0
close(3) = 0
wait4(8268, Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4579000000, 2555904, 1) failed; error='Permission denied' (errno=13)
확실히 공간은 충분해요
무엇이 잘못될 수 있는지 지적해 주실 수 있나요?
답변1
문제 해결됨. 내 Redhat 6 시스템에서는 Java 관련 파일(openjdk 및 oracle Java)에 태그가 올바르게 지정되지 않은 것으로 나타났습니다.
Redhat 6에서 Redhat 7로 업그레이드했을 때 제대로 작동하기 시작했습니다. 즉,
sandbox java -version
아무런 문제 없이 완벽하게 작동했습니다.
내 Redhat 7 시스템에서는 .so 및 기타 Java 관련 파일이 다음 중 하나로 표시됩니다.
system_u:object_r:textrel_shlib_t:s0
system_u:object_r:lib_t:s0
이전 컴퓨터(예: redhat 6)에서는 모든 파일에 다른 내용으로 태그가 지정되었기 때문에 이 문제가 발생했습니다.