Saya mencoba memberikan hak eksekusi Java untuk membuka port di bawah 1024 di Linux. Berikut adalah pengaturannya
/home/test/java
berisi Oracle Server JRE 7.0.25- CentOS 6.4
Inilah yang getcap kembalikan
[[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
Mencoba mengeksekusi Java memberikan kesalahan berikut.
[[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
Apakah mungkin untuk menjalankan Java 7_u25 ketika biner telah diberikan hak istimewa yang lebih tinggi dengan setcap, jika demikian bagaimana caranya?
JDK-6919633 :Runtime tidak mendukung POSIX File Capabilities (A.K.A. Linux Capabilities)
mengatakan bahwa
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.
Bagaimana cara membuat perpustakaan bersama dipercaya?
Jawaban yang Diterima:
Sampai Anda mengajukan pertanyaan, saya bahkan tidak pernah mendengar fasilitas ini di Unix (kemampuan file). Saya menemukan tautan ini yang tampaknya memiliki solusi tentang cara membuat ld.so memercayai perpustakaan bersama Anda:
- JDK-7157699 :tidak dapat menjalankan java setelah memberikan kemampuan posix
kutipan dari postingan itu
Ketika seseorang meningkatkan hak istimewa dari executable, runtime
loader (rtld), lebih dikenal sebagai ld.so tidak akan menautkan dengan perpustakaan di
jalur yang tidak dipercaya. Ini adalah cara ld.so(1) telah dirancang. Jika
seseorang perlu menjalankan executable seperti itu, maka Anda harus menambahkan jalur tersebut ke
jalur tepercaya ld.so, berikut ini menjelaskan cara melakukannya: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 nya, Ok kita berada di halaman yang sama sekarang, untuk memperbaikinya, buat file seperti> this, dengan path ke libjli.so
% cat /etc/ld.so.conf.d/java.conf /home/someuser/jdk1.7.0_04/jre/lib/i386/jli
Ini akan menambahkan nama jalur ke jalur pengguna tepercaya, yang akan digunakan ld.so
, untuk membangun cache runtime-nya, verifikasi apakah ld.so melihatnya dengan
melakukan ini, perlu menjalankannya sebagai root, dan reboot mungkin diperlukan.% ldconfig | grep libjli libjli.so -> libjli.so .......
Sekarang uji 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)
dan itu dia…..
Referensi
- Kemampuan file POSIX:Membagi kekuatan root
- Ini adalah FAQ kapabilitas kernel Linux
- halaman manual kemampuan
- Keamanan berbasis kemampuan – wikipedia
- Menggunakan Kemampuan File Alih-alih Setuid