Запустить приложение Java из внутреннего затмения с привилегиями root [duplicate]

Вышеупомянутые решения не сработали для меня. Скорее я использовал более надежный способ (у него могут быть накладные расходы):

$countarr = count($newArr); // Count the elements in an array.
$checkarr = "" ; //Initialize the value of variable to blank.
for($x=0;$x<$countarr;$x++)
{
  $checkarr = $newArr1[$x] ;
  if($checkarr != "" ) 
  {
       // do stuff if array is not empty.
  }
}
24
задан Ronald 5 April 2010 в 20:12
поделиться

9 ответов

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

1
ответ дан Eric Spencer 20 August 2018 в 23:16
поделиться

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

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

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

Решение:

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

#! / Bin / sh

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

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

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

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

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

0
ответ дан kagali-san 20 August 2018 в 23:16
поделиться

Для этого вы можете использовать механизм 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 для раннего созданного удаленного приложения Java
  8. Вы должны быть остановлены в точке останова в Eclipse!
0
ответ дан Michael Z 20 August 2018 в 23:16
поделиться

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

  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. Перейти к Window-> Preferences-> Java-> Installed 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

15
ответ дан rednammoc 20 August 2018 в 23:16
поделиться
  • 1
    +1 для поиска – Alonso Dominguez 2 April 2012 в 16:47
  • 2
    для Fedora 19 мне удалось работать, используя pkexec (без двойных кавычек) вместо gksu: pkexec $jre $args – Giuliano 3 April 2014 в 16:16
  • 3
    Привет, я пробовал этот метод, но возникает следующая ошибка: Unrecognized option: --run-as-root Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Любые идеи? Благодарю. – adrian.nicolau 14 July 2014 в 15:33
  • 4
    @ adrian.nicolau: Пожалуйста, проверьте мой ответ еще раз и убедитесь, что вы следовали за каждым шагом, как описано. Ошибка, о которой вы упоминаете, вероятно, заставит вас напрямую вызвать jre с помощью --run-as-root вместо bash-скрипта. – rednammoc 8 August 2014 в 00:16
  • 5
    Красивый! Также рассмотрите возможность использования опции -message на gksu, иначе вы можете получить огромный диалог, содержащий очень длинную командную строку. – Andrew Fielden 20 October 2014 в 16:11

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

Например,

sudo ~/eclipse/eclipse

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

1
ответ дан ring bearer 20 August 2018 в 23:16
поделиться
  • 1
    -1 - Это нежелательно ... и опасно. Любые файлы, которые вы пишете с помощью eclipse, будут принадлежать root. Хуже того, поскольку eclipse работает под управлением root, у него есть разрешение на чтение, запись или удаление любого файла или каталога. Измените или удалите неправильный файл, и вы можете войти в мир боли. – Stephen C 6 April 2010 в 00:07
  • 2
    Ой, что болит. Я думал, что я просто ответил точно, что он искал. Я не буду вспотеть все, что вы сказали, когда я нахожусь в своей коробке разработки. – ring bearer 6 April 2010 в 00:12
  • 3
    И еще одна проблема при запуске eclipse в режиме sudo заключается в том, что если вы хотите позже переключить свое затмение на не-sudo-режим, вы столкнетесь с различными проблемами, потому что затмение не сможет записывать в различные файлы, которые теперь принадлежат корень. Это приведет к неуказанному поведению затмения. – Yatendra Goel 11 February 2014 в 18:49

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

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

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

1
ответ дан Sean 20 August 2018 в 23:16
поделиться
  • 1
    крики, я только что понял кого-то выше упомянутого iptable .. то же самое. Извините, не пытаясь украсть вашу идею! – Sean 10 December 2011 в 06:40

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

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

1
ответ дан Stephen C 20 August 2018 в 23:16
поделиться

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

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

]

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

Пожалуйста, используйте «-Dorg.osgi.service.http.port=8080 ".


Как упоминалось в HTTP Service :

  • org.osgi.service.http.port - указывает номер порта, который будет использоваться для http обслуживание. Значение по умолчанию для этого свойства - 80 (что требует прав на root), согласно спецификации OSGi.
  • org.osgi.service.http.port.secure - указывает номер порта, который будет использоваться для безопасного обслуживания HTTP. Значение по умолчанию для этого свойства - 443 (что требует разрешения root) в соответствии со спецификацией OSGi.

Возможно, если вы попытаетесь изменить это последнее свойство на значение выше 1024, оно может работать без требующих особых привилегий.

1
ответ дан VonC 20 August 2018 в 23:16
поделиться

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

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

0
ответ дан Zoltán Ujhelyi 20 August 2018 в 23:16
поделиться