GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:come far funzionare Oracle Java 7 con Setcap Cap_net_bind_service+ep?

Sto cercando di concedere all'eseguibile java il diritto di aprire porte inferiori a 1024 su Linux. Ecco la configurazione

  • /home/test/java contiene Oracle Server JRE 7.0.25
  • CentOS 6.4

Ecco cosa restituisce 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

Il tentativo di eseguire java genera il seguente errore.

[[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

È possibile eseguire Java 7_u25 quando al binario sono stati assegnati privilegi elevati con setcap, se sì come?

JDK-6919633 :Il runtime non supporta le funzionalità di file POSIX (AKA Linux Capabilities)
dice che

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.

Come faccio a rendere affidabili le librerie condivise?

Risposta accettata:

Fino a quando non hai posto la domanda, non ho mai sentito parlare di questa funzione in Unix (capacità di file). Ho trovato questo link che sembra avere la soluzione su come rendere ld.so fidato delle tue librerie condivise:

  • JDK-7157699:impossibile eseguire java dopo aver concesso le capacità posix

estratto da quel post

Quando si aumentano i privilegi di un eseguibile, il caricatore di runtime
(rtld), meglio conosciuto come ld.so, non si collegherà alle librerie in
percorsi non attendibili. Questo è il modo in cui è stato progettato ld.so(1). Se
è necessario eseguire un tale eseguibile, è necessario aggiungere quel percorso ai
percorsi attendibili di ld.so, di seguito viene descritto come farlo:

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, siamo sulla stessa pagina ora, per risolvere questo problema, crea un file come> questo, con il percorso di libjli.so

% cat /etc/ld.so.conf.d/java.conf
/home/someuser/jdk1.7.0_04/jre/lib/i386/jli

Questo aggiungerà il nome del percorso al percorso dell'utente attendibile, che ld.so
utilizzerà, per creare la sua cache di runtime, verificare se ld.so lo sta vedendo
facendo ciò, è necessario eseguirlo come root e potrebbe essere necessario un riavvio.

% ldconfig | grep libjli
libjli.so -> libjli.so
.......

Ora prova 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)

e il gioco è fatto…..

Riferimenti

  • Capacità dei file POSIX:unire la potenza di root
  • Queste sono le domande frequenti sulle funzionalità del kernel Linux
  • Pagina man delle capacità
  • Sicurezza basata sulle capacità – Wikipedia
  • Utilizzare le funzionalità dei file invece di Setuid
Correlati:Linux – Come creare /dev/null?
Linux
  1. Come hai iniziato con Linux?

  2. Come installare Oracle Java JDK 17 su Linux

  3. Come lavorare con più versioni Java sotto Linux

  4. Come creare un file con una determinata dimensione in Linux?

  5. Ottieni il tempo di creazione del file con Python su Linux

Come installare Oracle Java JDK 18 su Linux

Come gestire più versioni Java con jEnv su Linux

Come lavorare con hardlink e softlink in Linux

Come affrontare i nomi dei file con gli spazi in Linux

Come iniziare con Arch Linux

Come ottenere le dimensioni di file/cartelle con SSH su Linux?