GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Cara Membuat Oracle Java 7 Bekerja Dengan Setcap Cap_net_bind_service+ep?

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
Terkait:Linux – Bagaimana cara membuat /dev/null?
Linux
  1. Cara Menginstal Oracle Java JDK 17 di Linux

  2. Bagaimana Agar Vim Bekerja Dengan Tmux Dengan Benar?

  3. Dapatkan waktu pembuatan file dengan Python di linux

  1. Bagaimana Anda memulai Linux?

  2. Bagaimana cara kerja batas deskriptor file linux?

  3. Bagaimana cara mendapatkan nama file dengan Linux 'find'?

  1. Cara bekerja dengan beberapa versi java di Linux

  2. Bagaimana cara membuat file dengan ukuran tertentu di Linux?

  3. Bagaimana cara menulis file dengan C di Linux?