UnsatisfiedLinkError при запуске функции setUID Jetty9

Я просто попытался запустить Jetty 9 как пользователь без полномочий root, безуспешно используя функцию setuid для привязки небольших номеров портов. Я включил модуль setuid в start.ini и добавил -Djava.library.path = / opt / jetty / lib / setuid Но при запуске Jetty у меня есть следующая трассировка стека:

Это единственные ссылки на эту ошибку:

Но они либо останавливаются, либо не показывают решения. Исходный код пакета setuid, который я нашел: https://github.com/jetty-project/codehaus-jetty-project/blob/master/jetty-setuid/modules/java/src/main/java/org/mortbay/setuid/SetUID.java

  • groups.google.com/forum/#!topic/dropwizard-user/aap2B_U_QPo
  • Изучая файл libsetuid (nm -D / path / to / the / so), я понял, что так, что я использовал, устарело и несовместимо с Jetty 9, функции были названы mortbay:

Хотя я не могу быть уверен, что это именно та версия, которую я использую, поскольку она из пакета org.mortbay, а Jetty 9 использует Eclipse.

Я попытался установить -Djetty.libsetuid.path в java args (первый блок try-catch), либо добавив путь к переменной $ PATH, либо установив -Djava.library.path (второй блок try-catch), либо скопировав его в / lib и, наконец, оставив все как есть (третий блок try-catch). У меня во всех случаях один и тот же стек исключений. Я не могу быть уверен, что Jetty либо не находит файл so, либо не может его загрузить, учитывая, что, если я удалю все ссылки на путь (случаи, которые я описал позже), я все равно получаю то же сообщение об ошибке. Я использую Java7 для запуска Jetty.

Изменить. Я добавил следующий фрагмент в одно из своих веб-приложений в качестве теста, учитывая, что если веб-приложение завершится успешно, я буду знать, что проблема не в поиске общего объекта:

У меня такая же ошибка UnsatisfiedLinkError в результате.

SetUID.setgid(1002);
SetUID.setuid(1002);
Passwd pw = SetUID.getpwuid(1002);
System.setProperty("user.name", pw.getPwName());
System.setProperty("user.home", pw.getPwDir());

Edit2 Вместо этого я попробовал следующее:

Это вызвало у меня следующее сообщение об ошибке:

System.load(SetUID.__FILENAME);
SetUID.setgid(1002);

javax.servlet.ServletException: java.lang.UnsatisfiedLinkError: собственная библиотека /lib/libsetuid.so уже загружена в другой загрузчик классов

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

dev.eclipse.org/mhonarc/lists/jetty-users/msg01657.html


person Vinicius Dantas    schedule 09.06.2015    source источник


Ответы (1)


root @ root: ~ / # nm -D libsetuid.so --size-sort | менее 0000000000000010 Т Java_org_mortbay_setuid_SetUID_setgid 0000000000000010 Т Java_org_mortbay_setuid_SetUID_setuid 0000000000000015 Т Java_org_mortbay_setuid_SetUID_setumask 0000000000000018 Т throwNewJavaSecurityException 0000000000000058 Т throwNewJavaException 000000000000008e Т Java_org_mortbay_setuid_SetUID_setrlimitnofiles 00000000000000a7 Т getJavaMethodId 00000000000000f5 Т Java_org_mortbay_setuid_SetUID_getrlimitnofiles 0000000000000102 Т getJavaFieldInt 0000000000000111 Т setJavaFieldInt 0000000000000111 Т setJavaFieldLong 0000000000000121 Т setJavaFieldString 00000000000001ba Т Java_org_mortbay_setuid_SetUID_getpwuid 00000000000001e5 Т Java_org_mortbay_setuid_SetUID_getpwnam 000000000000027e Т Java_org_mortbay_setuid_SetUID_getgrgid 000000000000029e Т Java_org_mortbay_setuid_SetUID_getgrnam

Теперь я использую общий объект, который уже входит в загрузку причала, а не тот, который указан в вики. В дополнение к этому, просматривая код модуля setuid, я решил использовать свойство -Djetty.libsetuid.path в своих аргументах java для указания абсолютного пути к библиотеке, например -Djetty.libsetuid.path = / opt / причал / lib / setuid.so

2015-06-09 16: 27: 27.211: ПРЕДУПРЕЖДЕНИЕ: oejx.XmlConfiguration: main: Ошибка конфигурации в | | java.lang.reflect.InvocationTargetException в файле: /opt/jetty/etc/jetty-setuid.xml java.lang.reflect.InvocationTargetException в sun.reflect.NativeMethodAccessorImpl.invoke0 (Собственный метод) в sun.reflect.invoke NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:606) в org.eclipse.Mainty.Mainty.Mainty.jet (Main.java:321) в org.eclipse.jetty.start.Main.start (Main.java:817) в org.eclipse.jetty.start.Main.main (Main.java:112) Вызвано: java. lang.reflect.InvocationTargetException в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccess (DelegatingMethod). lang.reflect.M ethod.invoke (Method.java:606) в org.eclipse.jetty.xml.XmlConfiguration $ JettyXmlConfiguration.set (XmlConfiguration.java:479) в org.eclipse.jetty.xml.XmlConfiguration $ JettyXmlConfiguration.configure (Xava :Configuration.java :Configuration. 411) по адресу org.eclipse.jetty.xml.XmlConfiguration $ JettyXmlConfiguration.newObj (XmlConfiguration.java:815) в org.eclipse.jetty.xml.XmlConfiguration $ JettyXmlConfiguration.itemValue (XmlConfiguration.sejava.java: 1.e12.e12.e12.e12 .xml.XmlConfiguration $ JettyXmlConfiguration.value (XmlConfiguration.java:1030) в org.eclipse.jetty.xml.XmlConfiguration $ JettyXmlConfiguration.call (XmlConfiguration.java:721) в $ org.eclipse.jetty.xml.XmlConfiguration.XmlConfiguration.xml.XmlConfiguration. (XmlConfiguration.java:417) в org.eclipse.jetty.xml.XmlConfiguration $ JettyXmlConfiguration.configure (XmlConfiguration.java:354) в org.eclipse.jetty.xml.XmlConfiguration.configure (XmlConfiguration.java:262) в org.eclipse.jetty.xml.XmlConfiguration $ 1.run (XmlConfiguration.java:1243) в java.security.AccessController.doPrivileged (собственный метод) в org.eclipse.jetty.xml.XmlConfiguration.main (XmlConfiguration.java:1174 ) ... еще 7 Вызвано: java.lang.UnsatisfiedLinkError: org.eclipse.jetty.setuid.SetUID.getpwnam (Ljava / lang / String;) Lorg / eclipse / jetty / setuid / Passwd; на org.eclipse.jetty.setuid. SetUID.getpwnam (собственный метод) в org.eclipse.jetty.setuid.SetUIDListener.setUsername (SetUIDListener.java:53) ... еще 23

person Vinicius Dantas    schedule 09.06.2015