Snažím se udělit spustitelnému souboru java právo otevírat porty pod 1024 na Linuxu. Zde je nastavení
/home/test/java
obsahuje Oracle Server JRE 7.0.25- CentOS 6.4
Zde je to, co getcap vrací
[[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
Při pokusu o spuštění jazyka Java se zobrazí následující chyba.
[[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
Je možné spustit Java 7_u25, když byla binárnímu souboru udělena zvýšená oprávnění pomocí setcap, pokud ano, jak?
JDK-6919633 :Runtime nepodporuje POSIX File Capabilities (A.K.A. Linux Capabilities)
říká, že
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.
Jak zajistím, aby sdílené knihovny byly důvěryhodné?
Přijatá odpověď:
Dokud jste nepoložili otázku, nikdy jsem o tomto zařízení v Unixu ani neslyšel (možnosti souborů). Našel jsem tento odkaz, který vypadá, že má řešení, jak vytvořit ld.so důvěřovat svým sdíleným knihovnám:
- JDK-7157699:po udělení funkcí posix nelze spustit java
úryvek z tohoto příspěvku
Když zvyšujete oprávnění spustitelného souboru, runtime
zavaděč (rtld), lépe známý jako ld.so, se nepropojí s knihovnami v
nedůvěryhodných cestách. Toto je způsob, jakým byl navržen ld.so(1). Pokud
potřebujete spustit takový spustitelný soubor, musíte tuto cestu přidat k
důvěryhodným cestám ld.so, následující postup popisuje: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
Jeho kaput, Ok, teď jsme na stejné stránce. Chcete-li to opravit, vytvořte soubor, jako je> tento, s cestou k libjli.so
% cat /etc/ld.so.conf.d/java.conf /home/someuser/jdk1.7.0_04/jre/lib/i386/jli
Tímto přidáte cestu k důvěryhodné uživatelské cestě, kterou ld.so
použije k vytvoření své runtime cache, ověřte, zda ji ld.so vidí
tím, že je potřeba ji spustit jako root a může být nutné restartovat.% ldconfig | grep libjli libjli.so -> libjli.so .......
Nyní otestujte 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)
a tady to máte….
Odkazy
- Možnosti souborů POSIX:Rozdělení výkonu root
- Toto jsou časté otázky o možnostech jádra Linuxu
- manuálovou stránku schopností
- Zabezpečení založené na schopnostech – wikipedie
- Používání možností souborů namísto Setuid