GNU/Linux >> Znalost Linux >  >> Linux

Linux – Jak zajistit, aby Oracle Java 7 fungoval se Setcap Cap_net_bind_service+ep?

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
Související:Linux – Jak vytvořit /dev/null?
Linux
  1. Jak nainstalovat Oracle Java JDK 17 na Linux

  2. Jak přimět Vim, aby správně spolupracoval s Tmux?

  3. Jak pracovat s více verzemi Java pod Linuxem

  1. Získejte čas na vytváření souborů s Pythonem na linuxu

  2. Jak fungují limity linuxových deskriptorů?

  3. Jak získat název souboru pouze pomocí Linuxu „najít“?

  1. Jak jste začali s Linuxem?

  2. Linux – Jak získat Grindeq (latexový plugin pro Word) pro práci s Wordem ve víně?

  3. Jak vytvořit soubor s danou velikostí v Linuxu?