запустить jar с привилегиями root на mac os x одним щелчком мыши

Я реализовал небольшой инструмент сниффера java с jpcap. Пока он работает нормально, но для доступа к сетевым устройствам требуются привилегии root. В случае, если я экспортирую свой проект в исполняемую банку, я могу запустить его, используя sudo в терминале:

$ sudo java -jar littleSniffer.jar 

Кто-нибудь знает решение «в один клик» для запуска моей работающей банки с привилегиями root. Я хочу дать этот инструмент своим коллегам по работе, и было бы неплохо, если бы они могли запустить его без использования терминала. Может быть, с помощью приложения-автомата?


person Philipp Li    schedule 11.08.2013    source источник


Ответы (2)


Попробуйте что-то вроде этого:

Если вы довольны терминалом, просто создайте новый файл и вставьте что-то вроде этого:

#!/bin/sh
sudo java -jar littleSniffer.jar

и сохраните файл как blah.command (расширение .command запускает файл sh в терминале двойным щелчком мыши).

Если вы хотите что-то более приятное, вы можете использовать команду osascript следующим образом:

#!/bin/sh
osascript -e "do shell script \"java -jar littleSniffer.jar\" with administrator privileges"

Который будет использовать запрос GUI для пароля root.

ПРИМЕЧАНИЕ. Если ваш файл .command не запущен, вам может потребоваться:

chmod +x blah.command

чтобы сделать его работоспособным.

person Ed M    schedule 15.01.2015
comment
Выглядит неплохо. Подход osascript описан в ответе как stackoverflow.com/a/2714651/274350, и есть несколько других хороших предложений по тоже этот вопрос. - person Richard Neish; 16.01.2015

Попробуйте встроить JAR в сценарий оболочки, используя uuencode/uudecode. Создайте сценарий оболочки с именем littleSniffer.command со следующими строками:

#!/bin/bash
rm -f littleSniffer.jar
uudecode $0
sudo java -jar littleSniffer.jar
rm -f littleSniffer.jar
exit

Затем запустите uuencode -m littleSniffer.jar littleSniffer.jar >> littleSniffer.command, чтобы встроить JAR в скрипт.

person Mitsos101    schedule 16.01.2015
comment
Наверное это только у меня так, но ваш скрипт просто не имеет смысла. Не могли бы вы уточнить, что он делает? Спасибо. - person Gábor Bakos; 16.01.2015
comment
@GáborBakos Удаляет все предыдущие файлы JAR (например, если сценарий был прерван), декодирует себя (uudecode не декодирует весь сценарий, есть метки «начало» и «конец»), запускает файл JAR, а затем удаляет Это. - person Mitsos101; 16.01.2015