Я запускаю ошибку, когда пытаюсь запустить приложение-сервер из Eclipse. Ошибка java.net.BindException: Permission denied. Я думаю, это связано с тем, что я использую порт 443 для настройки SSL-соединения. Я могу обойти эту проблему, если я запустил свой код в командной строке, используя java и sudo. Есть ли способ настроить Eclipse, чтобы при нажатии кнопки запуска мое приложение выполнялось с помощью sudo?
Как запустить мое приложение в качестве суперпользователя из Eclipse?
Ответ 1
Вы можете выполнить следующие шаги для компиляции/отладки приложений как суперпользователя.
-
Переименуйте java-приложение
sudo mv/usr/lib/jvm/java-6-openjdk/jre/bin/java/usr/lib/jvm/java-6-openjdk/jre/bin/java.ori
-
Создайте следующий script и сохраните его как /usr/lib/jvm/java -6-openjdk/jre/bin/java
#!/bin/bash # file: /usr/lib/jvm/java-6-openjdk/jre/bin/java # descr: Starter for jdk. Runs jdk as root when # cmd-line-arg "--run-as-root" is specified. # jre="/usr/lib/jvm/java-6-openjdk/jre/bin/java.ori" run_as_root=false args= # Filter command-line argument for arg in "[email protected]" do case "$arg" in --run-as-root) run_as_root=true ;; *) args="$args $arg" ;; esac done # Remove leading whitespaces args=$(echo $args | sed -e 's/^[ \t]*//') if $run_as_root then echo "WARNING: Running as root!" gksu "$jre $args" else $jre $args fi
-
Измените разрешения, чтобы сделать его выполнимым
sudo chmod 0755/usr/lib/jvm/java-6-openjdk/jre/bin/java
-
Запуск затмения
- Перейдите в окно- > Настройки- > Java- > Установленные JRE
- Дублировать java-6-openjdk в java-6-openjdk-root
- Редактировать JRE и добавить "-run-as-root" в качестве аргумента VM по умолчанию.
Для запуска проектов с правами root вам необходимо выполнить следующие действия:
- Перейдите в Project- > Properties- > Java Build Path.
- Дважды щелкните Системную библиотеку JRE и выберите в Alternate JRE "java-6-openjdk-root"
Примечание: идея от http://www.eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852
Ответ 2
Предполагая, что вы находитесь в Linux (* nix), Как насчет запуска сеанса eclipse с помощью команды sudo?
Например,
sudo ~/eclipse/eclipse
Теперь, что вы делаете из eclipse, будет иметь контекст sudo?
Ответ 3
Как упоминалось в этот поток:
Чтобы открыть порт ниже 1024 в системах Unix/Linux, вам необходимо "Корень".
Я также использовал аргумент
-Dorg.eclipse.equinox.http.jetty.port=8080
, чтобы изменить порт прослушивания, но это, кажется, игнорируется (согласно stacktrace)Пожалуйста, используйте "
-Dorg.osgi.service.http.port=8080
".
Как указано в HTTP-служба:
-
org.osgi.service.http.port
- указывает номер порта, который будет использоваться для HTTP-обслуживания. Значение по умолчанию для этого свойства - 80 (для этого требуется разрешение root) в соответствии со спецификацией OSGi. -
org.osgi.service.http.port.secure
- указывает номер порта, который будет использоваться для безопасного обслуживания HTTP. Значение по умолчанию для этого свойства - 443 (что требует разрешения root) в соответствии со спецификацией OSGi.
Возможно, если вы попытаетесь изменить это последнее свойство на значение выше 1024, оно может работать без особых привилегий.
Ответ 4
Другой вариант - использовать iptables или ipfilter для пересылки порта 80 на порт выше 1024.
(Может ли кто-нибудь внести ссылку на практическое и понятное объяснение?)
Ответ 5
Лучший ответ, возможно, если это послужит вашим потребностям и возможно, может быть простым перенаправлением портов на вашем маршрутизаторе.
Вместо того, чтобы заставить Linux/Unix открыть зарезервированный порт, когда вы только разрабатываете это сейчас (не устанавливаете) и хотите запустить его в отладчике, установите маршрутизатор для перенаправления входящего (внешнего) порта 443 в порт, который более удобен для ваших текущих потребностей (скажем, 4443).
Я думаю, что большинство маршрутизаторов поддерживают это, и если ваш не дает, то это дает вашей маме хорошую идею о рождестве или подарке на день рождения!
Ответ 6
Я пишу C не Java, но это должно работать в любом случае. Я использую удаленную отладку - определите подключение "remote" к LOCALHOST, которое позволяет указать пользователя, с которым вы будете подключаться, указать ROOT. Затем определите удаленное приложение в подключении конфигурации отладки: LOCALHOST. Обязательно проверьте "пропустить загрузку до целевого пути" в нижней части основной вкладки, а также в окне свойств подключения.
Ответ 7
Если вы используете внешние инструменты (меню Run/внешние инструменты или значок рядом с иконками Run/Debug на панели инструментов), вы можете использовать любые скрипты или что угодно. Скрипты могут дать вам повышенные права или что-то еще.
С другой стороны, таким образом отладка приложения может стать очень сложной, так как ни команды Run, ни Debug не связаны с этой настройкой внешнего инструмента. Возможно, можно подключить отладчик Eclipse приложения, но я не знаю, как это возможно.
Ответ 8
Вы можете пойти этим путем
- создать Makefile с вызовами javac
- добавьте следующую строку:
setcap 'cap_net_admin=+ep' Server
- настроить sudo, чтобы пользователь Eclipse мог запускать setcap.
Итак, у вас будет прозрачная отладка (без sudo wrapper - gdb ok). Минусы: это локальное нарушение безопасности.
Решение:
поместите это в /opt/my -stupid-eclipse
#!/Bin/ш
setcap 'cap_net_admin = + ep cap_net_raw = + ep' $1
chmod + x this script и переименовать его в sudo config.
имя пользователя ALL = (ВСЕ) NOPASSWD:/opt/my-stupid-eclipse
Добавьте его в свой файл makefile, укажите путь к вашему двоичному файлу сервера.
Теперь у вас довольно странный, но безопасный script, который не может быть изменен другими пользователями... и все еще небольшое нарушение для замены двоичного кода сервера каким-либо вредоносным кодом, который будет набирать ограничения, поэтому никакие проверки/ограничения имен файлов не будут help.. Может ли $1 быть заражен командами bash, нет? Угадай, нет.
Ответ 9
Для этого можно использовать механизм Удаленное Java-приложение.
- Создать Конфигурация отладки для Удаленного приложения Java в разделе Выполнить → Конфигурации отладки...
- Задайте название проекта
- Выберите Тип подключения в качестве стандартного (Socket Attach)
- Настройте параметры Свойства подключения для привязки (для вас это будет localhost и 443).
- Установите точку останова в вашем приложении (например, в начале основного метода)
- Запустите приложение с терминала как суперпользователя со следующими параметрами: - java Xdebug -Xrunjdwp: transport = dt_socket, server = y, address = 443 MyApp
- Кнопка удаления отладки в Eclipse для раннего создания Удаленного приложения Java
- Код должен быть остановлен в точке останова в Eclipse!