Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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!