Как заставить Oracle java 7 работать с setcap cap_net_bind_service+ep

Если и Ваши массивы являются той же длиной, и Вы просто хотите смочь, получают доступ к тому же индексу в каждом, вот пример:

for ((i=0; i < ${#newserver[@]}; i++)); do 
  echo ${newserver[i]} ${newhostname[i]};
done;
10
23.08.2013, 23:53
2 ответа

Пока Вы не задали вопрос, я даже не слышал об этом средстве в Unix (возможности файла). Я нашел эту ссылку, которая надеется иметь решение относительно того, как заставить ld.so доверять Вашим общим библиотекам:

выборка из того сообщения

Когда каждый повышает полномочия исполняемого файла, загрузчик во время выполнения (rtld), лучше знайте, поскольку ld.so не свяжется с библиотеками в недоверяемых путях. Это - способ, которым был разработан ld.so (1). Если нужно выполнить такой исполняемый файл, то необходимо добавить, что путь к доверяемым путям ld.so, следующее описывает, как сделать так:

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

Его уничтоженное, хорошо мы находимся на той же странице теперь, чтобы зафиксировать это, создать файл такой как> это, с путем к libjli.so

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

Это добавит путь к пути доверяемого пользователя, который ld.so будет использовать, чтобы создать его кэш во время выполнения, проверить, видит ли ld.so его путем выполнения этого, потребность выполнить его как корень, и перезагрузка может быть необходимой.

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

Теперь тест 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)

и там у Вас есть он.....

Ссылки

13
27.01.2020, 20:02
  • 1
    Этот подход, кажется, изменение в масштабе всей системы, есть ли способ ограничить доверие на на пользовательское основание так, чтобы пользовательское нечто и панель могли иметь их собственные различные версии Java с другой версией libjli.so, не сталкиваясь с конфликтом. –  ams 24.08.2013, 04:42
  • 2
    @ams: Вы доверяете программе, чтобы дать пользователю возможность, которую они обычно не имеют. Это важно: Вы доверяете коду программы, чтобы не неправильно использовать (ни позволить другим неправильно использовать) та возможность. Именно поэтому необходимо доверять тем библиотекам на уровне в масштабе всей системы. –  ninjalj 16.10.2013, 14:40
  • 3
    @ams можно использовать privbind утилиту, чтобы смочь сделать это на основе для каждого процесса, не основании на исполняемый файл. –  mighq 12.12.2014, 22:52

Просто чтобы показать полный процесс включения прослушивания Java на порту 80 (или любом порту ниже 1024):

  • Для JAVA _ГЛАВНАЯ :
    $> export JAVA_HOME=/usr/local/java/graalvm-ce-java8-20.2.0
    
  • Вы должны включить эту возможность для бинарного файла Java :
    $> sudo /sbin/setcap 'cap_net_bind_service=ep' /usr/local/java/graalvm-ce-java8-20.2.0/bin/java
    
  • После этого вы начнете получать какую-то ошибку при запуске java :
    $> java -version
    ./bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
    
  • Чтобы исправить это, вы должны обновить ldconfig. Просто создайте файл java.conf:
    $> cat /etc/ld.so.conf.d/java.conf 
    /usr/local/java/graalvm-ce-java8-20.2.0/lib/amd64/jli
    /usr/local/java/graalvm-ce-java8-20.2.0/jre/lib/amd64/jli
    
    $> java -version
    
  • Теперь java работает :
    $> java -version
    openjdk version "1.8.0_262"
    ...
    
1
26.10.2020, 17:57

Теги

Похожие вопросы