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