GNU/Linux >> Linux の 問題 >  >> Linux

Linux – OracleJava7をSetcapCap_net_bind_service+ epと連携させる方法は?

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

  • /home/test/java Oracle ServerJRE7.0.25が含まれています
  • CentOS 6.4

getcapが返すものは次のとおりです

[[email protected] java]$ pwd
/home/test/java

[[email protected] java]$ getcap bin/java
bin/java = cap_net_bind_service+ep

[[email protected] java]$ getcap jre/bin/java
jre/bin/java = cap_net_bind_service+ep

javaを実行しようとすると、次のエラーが発生します。

[[email protected] java]$ bin/java
bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
[[email protected] 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ファイル機能(A.K.A. 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.

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

承認された回答:

あなたが質問をするまで、私はUnixのこの機能(ファイル機能)について聞いたことがありませんでした。 ld.soに共有ライブラリを信頼させる方法に関する解決策があるように見えるこのリンクを見つけました:

  • JDK-7157699:posix機能を付与した後はJavaを実行できません

その投稿からの抜粋

実行可能ファイルの特権を上げる場合、
ld.soとしてよく知られているランタイムローダー(rtld)は、
信頼できないパスのライブラリとリンクしません。これは、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、わかりました、今同じページにいます。これを修正するには、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
.......

次に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)

そして、あなたはそれを持っています…..

参考資料

  • POSIXファイル機能:rootの力をパーセルする
  • これはLinuxカーネル機能に関するFAQです
  • 機能のマニュアルページ
  • 機能ベースのセキュリティ–ウィキペディア
  • Setuidの代わりにファイル機能を使用する
関連:Linux – / dev / nullを作成する方法は?
Linux
  1. LinuxにOracleJavaJDK17をインストールする方法

  2. LinuxでPythonを使用してファイル作成時間を取得する

  3. Linux ファイル記述子の制限はどのように機能しますか?

  1. Linuxを始めたきっかけは何ですか?

  2. Linux で複数の Java バージョンを操作する方法

  3. Linuxでファイルの物理サイズを取得するには?

  1. Linuxで特定のサイズのファイルを作成するには?

  2. LinuxでCでファイルを書く方法は?

  3. Linuxの「検索」でファイル名のみを取得するには?