Я просто попытался запустить 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