Linux에서 1024 미만의 포트를 열 수있는 권리를 Java 실행 파일에 부여하려고합니다. 설정은 다음과 같습니다
/home/test/java
Oracle Server JRE 7.0.25를 포함합니다.- CentOS 6.4
다음은 getcap이 반환하는 내용입니다.
[test@centos6 java]$ pwd
/home/test/java
[test@centos6 java]$ getcap bin/java
bin/java = cap_net_bind_service+ep
[test@centos6 java]$ getcap jre/bin/java
jre/bin/java = cap_net_bind_service+ep
java를 실행하려고하면 다음 오류가 발생합니다.
[test@centos6 java]$ bin/java
bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
[test@centos6 java]$ jre/bin/java
jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
바이너리에 setcap으로 높은 권한을 부여 받았을 때 Java 7_u25를 실행할 수 있습니까?
JDK-6919633 : 런타임 POSIX 파일 기능 (일명 리눅스 기능)를 지원하지 않습니다는
것을 말한다
Note: when using the setcap the libraries needed by the java launcher
should be present in /usr/lib or any other "trusted" location that the
runtime loader (rtld) uses to find shared libraries.
공유 라이브러리를 어떻게 신뢰할 수있게합니까?
답변
질문을 할 때까지 유닉스 (파일 기능) 에서이 기능에 대해 들어 본 적이 없습니다. ld.so가 공유 라이브러리를 신뢰하게 만드는 방법에 대한 해결책이있는이 링크를 찾았습니다.
그 게시물에서 발췌
실행 파일, rtld (런타임 로더)의 권한을 높이면 ld.so로 더 잘 알 수 있으므로 신뢰할 수없는 경로의 라이브러리와 연결되지 않습니다. 이것이 ld.so (1)가 설계된 방식입니다. 그러한 실행 파일을 실행해야하는 경우 해당 경로를 ld.so의 신뢰할 수있는 경로에 추가해야합니다. 다음은 그 방법을 설명합니다.
Fedora 11: % uname -a Linux localhost.localdomain 2.6.29.4-167.fc11.i686.PAE #1 SMP Wed May 27 17:28:22 EDT 2009 i686 i686 i386 GNU/Linux % sudo setcap cap_net_raw+epi ./jdk1.7.0_04/bin/java % ./jdk1.7.0_04/bin/java -version ./jdk1.7.0_04/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
kaput, Ok 우리는 지금 같은 페이지에 있습니다.이 문제를 해결하려면 libjli.so 경로와 함께> this와 같은 파일을 만드십시오.
% cat /etc/ld.so.conf.d/java.conf /home/someuser/jdk1.7.0_04/jre/lib/i386/jli
이렇게하면 ld.so가 사용할 신뢰할 수있는 사용자 경로에 경로 이름을 추가하여 런타임 캐시를 빌드하고 ld.so가이를보고 경로를 확인하고 루트로 실행해야하며 재부팅해야 할 수 있습니다. .
% ldconfig | grep libjli libjli.so -> libjli.so .......
이제 자바 테스트 :
% ./jdk1.7.0_04/bin/java -version java version "1.7.0_04-ea" Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b18)
그리고 당신은 그것을 가지고 있습니다 …..