Есть ли графическое "sudo" для Mac OS X?
Я занимаюсь разработкой небольшого программного обеспечения на Java. Я не знаю термин / определение того, что я делаю, но я подсказываю команды от Java до терминала. Что-то вроде этого:
Process process = Runtime.getRuntime().exec("command");
Я делал это раньше в Linux, и я использовал gksudo
для команд, которым требуется пароль root.
Есть ли gksudo
в OS X? Любое графическое всплывающее окно, запрашивающее пароль root?
9 ответов
Вы можете написать свой собственный сценарий оболочки AppleScript:
#!/bin/sh
osascript -e "do shell script \"$*\" with administrator privileges"
cocoasudo
выглядит эстетически более приятным, но это уже развернуто.
Это также выглядит многообещающе: cocoasudo
Он использует собственный API-интерфейс служб авторизации OSX:
Для Mac OS X приложений на основе какао существует уникальная возможность sudo, предоставляемая через API служб авторизации. Использование API позволяет запрашивать у пользователя имя пользователя и пароль, запрашивая возможность повышения привилегий.
...
Для этого случая я написал небольшую утилиту, которую назвал cocoasudo. Используйте cocoasudo почти так же, как и sudo. Однако вместо того, чтобы пользователи запрашивали свой пароль в окне терминала, они получат диалоговое окно через API служб авторизации.
Сделайте следующее, в этом примере я иду создать папку /var/lock и установить ваши права доступа 777:
String[] command = {
"osascript",
"-e",
"do shell script \"mkdir -p /var/lock && chmod 777 /var/lock\" with administrator privileges" };
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null)
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
на Linux, может быть, вы можете сделать это с помощью gksudo, но я не проверяю это, после того, как я иду на тестирование и публикую здесь результаты.
Я обнаружил, что cocoasudo не работает, если вы запускаете скрипт оболочки, который вызывает другие команды. Вы должны будете использовать cocoasudo во всех подкомандах, которые выдают подсказку для каждого вызова.
Решение osascript, кажется, работает лучше, но мне нужно было настроить его для работы с командами, включающими пути, содержащие пробелы.
#!/bin/sh
export bar=""
for i in "$@"; do export bar="$bar '${i}'";done
osascript -e "do shell script \"$bar\" with administrator privileges"
Следуя ответу ZJR, я превратил это в автоматор, чтобы вы могли использовать его в качестве службы или что-то еще:
on run {input, parameters}
do shell script "sudo open \"" & (POSIX path of input as string) & "\"" with administrator privileges
return input
end run
Или, может быть, вы просто думаете, что его ответ устарел и все еще хотите AppleScript, просто напишите эту единственную строку в Script Editor:
do shell script "[[your command]]" with administrator privileges
Что вы можете затем сделать в приложении и использовать его в качестве службы или что-то еще.
gksudo
это версия GTK+ sudo
,
Вы можете использовать этот клон специально для OS X.
Нужно использовать нативные сервисы авторизации OS X вместо того, чтобы смотреть на sudo и / или графический интерфейс к нему.
Ref:
[Я знаю, что это поздний ответ...]
Кажется, в этих ответах много неверной информации. Чтобы сэкономить время, я публикую свои выводы:
Во-первых, как и у автора вопроса, у меня также есть ситуация, в которой мне нужно повысить права доступа в приложении Java.
Я разделил это на два сценария. Первый скрипт выполняется из Java с некоторым параметром командной строки. Второй скрипт выполняет все шаги, для которых требуются права суперпользователя. Идея, конечно, состоит в том, чтобы использовать cocoasudo в первом сценарии для выполнения второго сценария с привилегиями root.
Через обширную регистрацию в отдельных файлах я подтвердил, что сценарии действительно выполняют то, что я хотел. И они прекрасно работают при запуске вручную (с обычными привилегиями пользователя, конечно) из командной строки.
При запуске из приложения Java я получаю приглашение cocoasudo, но ничего не происходит. Даже первый вывод журнала из второго сценария не появляется.
Когда я изменяю первый сценарий на использование osascript, снова с подтверждением, что все правильно, насколько сценарий идет, я даже не получаю подсказку, когда он запускается изнутри Java.
Это все на OS X Mountain Lion. Как будто Apple встроила некоторые безопасные средства защиты, которые препятствуют выполнению сценариев с правами root изнутри Java.
Поскольку сам Cocoasudo на самом деле работает, я склонен думать, что решение состоит в том, чтобы закодировать что-то похожее на Cocoasudo, но выполнить все остальные необходимые действия, используя вызовы API Какао. Это также может быть подписано.
Если вы используете терминал, то просто используйте "sudo
"вместо этого, который будет запрашивать пароль пользователя в самом терминале (в отличие от gksudo
который я считаю, использует графическое всплывающее окно). Sudo работает как на Linux, так и на OS X.