Как мне запустить приложение как суперпользователь из Eclipse? - PullRequest
25 голосов
/ 05 апреля 2010

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

Ответы [ 9 ]

15 голосов
/ 02 апреля 2012

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

  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 "$@"
    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. Перейдите в Окно-> Настройки-> Java-> Установленные JRE
  6. Дублировать java-6-openjdk в java-6-openjdk-root
  7. Отредактируйте JRE и добавьте "--run-as-root" в качестве аргумента виртуальной машины по умолчанию

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

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

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

2 голосов
/ 05 апреля 2010

Если вы работаете в Linux (* nix), Как насчет начала сеанса затмения с помощью команды sudo?

Например

sudo ~/eclipse/eclipse

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

1 голос
/ 06 февраля 2012

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

1 голос
/ 10 декабря 2011

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

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

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

1 голос
/ 06 апреля 2010

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

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

1 голос
/ 06 апреля 2010

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

Чтобы открыть порт ниже 1024 в системах Unix / Linux, вам необходимо "Корень".

Я также использовал аргумент -Dorg.eclipse.equinox.http.jetty.port=8080 для изменения порта прослушивания, но это, кажется, игнорируется (в соответствии с трассировкой стека)

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

0 голосов
/ 09 августа 2012

Для этого можно использовать механизм Удаленное приложение Java .

  1. Создать Отладочная конфигурация для Удаленное приложение Java * Раздел 1009 * в Выполнить -> Отладка конфигурации ...
  2. Укажите имя проекта
  3. Выберите Тип подключения как Стандарт (Socket Attach)
  4. Настройка Свойства соединения Параметры для вашей привязки (для вас это будет localhost и 443 ).
  5. Установить точку останова в вашем приложении (например, в начале метода main )
  6. Запустить приложение из терминала как суперпользователь со следующими параметрами: - java Xdebug-Xrunjdwp: transport = dt_socket, server = y, address = 443 MyApp
  7. Нажать кнопку отладки в Eclipse для ранее созданного Удаленного Java-приложения
  8. Ваш код долженбыть остановленным на точке останова в Eclipse!
0 голосов
/ 17 ноября 2010

Вы можете пойти по этому пути

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

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

Решение:

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

#! / Bin / ш

setcap 'cap_net_admin = + ep cap_net_raw = + ep' $ 1

chmod + x этот скрипт и внесите его в белый список в конфигурации sudo.

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

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

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

0 голосов
/ 05 апреля 2010

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

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

...