web-dev-qa-db-ja.com

Oracleを取得する方法Java 7でsetcap cap_net_bind_service + epを操作する方法

LinuxでJava実行可能ファイルに1024未満のポートを開く権利を付与しようとしています。ここに設定があります

  • /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

Java 7_u25を実行するには、setcapを使用してバイナリに昇格された権限が付与されている場合、どのように実行しますか?

JDK-6919633:ランタイムはPOSIXファイル機能をサポートしていません(別名Linux機能) は、

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.

共有ライブラリを信頼できるようにするにはどうすればよいですか?

11
ams

あなたが質問をするまで、私はUnixのこの機能(ファイル機能)について聞いたこともありませんでした。 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

そのカプットOk現在同じページにいます。これを修正するには、> thisなどのファイルを作成し、libjli.soへのパスを指定します

% 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
.......

次にJavaをテストします。

% ./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)

そしてそこにあなたはそれを持っています.....

参考文献

14
slm