Java를 사용하여 "selinux sandbox"를 실행할 때 문제가 발생합니다.

Java를 사용하여 "selinux sandbox"를 실행할 때 문제가 발생합니다.

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)에서는 모든 파일에 다른 내용으로 태그가 지정되었기 때문에 이 문제가 발생했습니다.

관련 정보