Как запустить мое приложение в качестве суперпользователя из Eclipse?

Я запускаю ошибку, когда пытаюсь запустить приложение-сервер из Eclipse. Ошибка: java.net.BindException: Permission denied . Я думаю, это связано с тем, что я использую порт 443 для настройки SSL-соединения. Я могу обойти эту проблему, если я запустил свой код в командной строке, используя java и sudo. Есть ли способ настроить Eclipse, чтобы при нажатии кнопки запуска мое приложение выполнялось с помощью sudo?

Вы можете выполнить следующие шаги для компиляции / отладки приложений как суперпользователя.

  1. Переименуйте java-приложение

    sudo mv / usr / lib / jvm / java-6-openjdk / jre / bin / java /usr/lib/jvm/java-6-openjdk/jre/bin/java.ori

  2. Создайте следующий скрипт и сохраните его как / 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 
  3. Измените разрешения, чтобы сделать его исполняемым.

    sudo chmod 0755 / usr / lib / jvm / java-6-openjdk / jre / bin / java

  4. Запуск затмения

  5. Перейдите в Window-> Preferences-> Java-> Установленные JREs
  6. Дублировать java-6-openjdk в java-6-openjdk-root
  7. Отредактируйте JRE и добавьте «-run-as-root» в качестве аргумента VM по умолчанию

Чтобы запускать проекты с правами root, вам необходимо выполнить следующие действия:

  1. Перейдите в Project-> Properties-> Java Build Path
  2. Дважды щелкните Системную библиотеку JRE и выберите в Alternate JRE «java-6-openjdk-root»

Примечание. Идея: http://www.eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852

Предполагая, что вы находитесь в Linux (* nix), как насчет запуска сеанса eclipse с помощью команды sudo?

Такие как

 sudo ~/eclipse/eclipse 

Теперь, что бы вы ни делали с eclipse, будет иметь контекст sudo?

Как упоминалось в этой теме :

Чтобы открыть порт ниже 1024 в системах Unix / Linux, вам нужно быть «root».

Я также использовал аргумент -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, оно может работать без особых привилегий.

Другой вариант – использовать iptables или ipfilter для перенаправления порта 80 на порт выше 1024.

(Может кто-то внести ссылку на практическое и понятное объяснение?)

Возможно, лучший ответ, если это послужит вашим потребностям и возможно, может быть простым redirectм портов на вашем маршрутизаторе.

Вместо того чтобы пытаться заставить ваш linux / unix открыть зарезервированный порт, когда вы только разрабатываете это сейчас (не устанавливаете) и хотите запустить его в отладчике, установите маршрутизатор для перенаправления входящего (внешнего) порта 443 на порт что более удобно для ваших текущих потребностей (скажем, 4443).

Я думаю, что большинство маршрутизаторов поддерживают это, и если ваш не дает, то это дает вашей маме хорошую идею о рождестве или подарке на день рождения!

Я пишу C не Java, но это должно работать в любом случае. Я использую remote debug – определите «удаленное» соединение с LOCALHOST, которое позволяет указать пользователя, с которым вы будете подключаться, указать ROOT. Затем определите удаленное приложение в подключении конфигурации отладки: LOCALHOST. Обязательно проверьте «пропустить загрузку до целевого пути» в нижней части основной вкладки, а также в окне свойств подключения.

Если вы используете внешние инструменты (меню «Выполнить» / «Внешние инструменты» или значок рядом с значками «Запуск / отладка» на панели инструментов), вы можете использовать любые сценарии или что угодно. Сценарии могут дать вам повышенные права или что-то еще.

С другой стороны, таким образом отладка приложения может стать очень сложной, так как ни команды Run, ни Debug не связаны с этой конфигурацией внешнего инструмента. Возможно, можно подключить отладчик Eclipse приложения, но я не знаю, как это возможно.

Вы можете пойти так

  1. создать Makefile с вызовами javac
  2. добавьте следующую строку:
 setcap 'cap_net_admin=+ep' Server 
  1. настройте sudo, чтобы пользователь Eclipse мог запускать setcap.

Таким образом, у вас будет прозрачная отладка (без sudo wrapper – gdb ok). Минусы: это нарушение безопасности в локальной сети.

Решение:

поместите это в / opt / my-stupid-eclipse

#! / Bin / ш

setcap ‘cap_net_admin = + ep cap_net_raw = + ep’ $ 1

chmod + x этот скрипт и белый список на sudo config.

имя пользователя ALL = (ALL) NOPASSWD: / opt / my-stupid-eclipse

Добавьте его в свой файл makefile, укажите путь к двоичному файлу сервера.

Теперь у вас есть довольно странный, но безопасный скрипт, который не может быть изменен другими пользователями … и все еще небольшое нарушение для замены двоичного кода сервера любым вредоносным кодом, который наберет кол-во, поэтому никакая проверка имени / stricts не поможет .. может $ 1 быть заражены командами bash, нет? Угадай, нет.

Для этого вы можете использовать механизм Remote Java Application .

  1. Создайте конфигурацию отладки для раздела Remote Java Application в меню «Выполнить» -> «Отладка» …
  2. Укажите название проекта
  3. Выберите Тип подключения в качестве стандартного (Socket Attach)
  4. Настройте параметры параметров подключения для вашей привязки (для вас это будет localhost и 443 ).
  5. Установите точку останова в своем приложении (например, в начале основного метода)
  6. Запустите приложение с терминала как суперпользователя со следующими параметрами: – java Xdebug -Xrunjdwp: transport = dt_socket, server = y, address = 443 MyApp
  7. Кнопка удаления отладки в Eclipse для раннего созданного приложения Remote Java
  8. Код должен быть остановлен в точке останова в Eclipse!
Interesting Posts

Windows 7 может выполнять ping, но не может видеть устройство в другой подсети

В чем разница между Dim, Global, Public и Private в качестве модификаторов модульного поля?

Является ли Facebook провайдером OpenID?

C # Передача функции в качестве аргумента

Как скомпилировать и запустить программу C в Sublime Text 2?

Как остановить предупреждение в Notepad ++, если файл был изменен извне

Как добавить файл в скрытый список доверенных файлов Firefox?

Удалите защищенные предупреждения (_CRT_SECURE_NO_WARNINGS) из проектов по умолчанию в Visual Studio

Ошибка раздувания classа android.support.v7.widget.Toolbar?

Пользовательские заголовки предпочтений

Как узнать, какой порт занят или свободен в Windows 7?

как обновить таблицу с помощью параметров oledb?

Состояние флажка ListView Viewholder

Java: Локальная переменная mi, определенная в охватывающей области, должна быть окончательной или эффективно конечной

Лицензирование Windows 8 на новых ПК – могу ли я стереть жесткий диск?

Давайте будем гением компьютера.