Есть ли графическое «sudo» для Mac OS X? - PullRequest
24 голосов
/ 04 октября 2009

Я занимаюсь разработкой небольшого программного обеспечения на Java. Я не знаю термин / определение того, что я делаю, но я подсказываю команды из Java в терминал. Примерно так:

Process process = Runtime.getRuntime().exec("command");

Я делал это раньше в Linux и использовал gksudo для команд, которые требовали пароль root.

Есть ли gksudo в OS X? Любое графическое всплывающее окно, запрашивающее пароль root?

Ответы [ 9 ]

19 голосов
/ 26 апреля 2010

Вы можете создать свой собственный скрипт сценария AppleScript:

#!/bin/sh
osascript -e "do shell script \"$*\" with administrator privileges"

cocoasudo выглядит эстетически более приятным, но это уже развернуто.

8 голосов
/ 26 апреля 2010

Это также выглядит многообещающе: cocoasudo

enter image description here

Используется собственный API-интерфейс служб авторизации OSX:

Для Mac OS X приложений на основе какао существует уникальная возможность sudo, предоставляемая через API служб авторизации. Использование API позволяет запрашивать у пользователя имя пользователя и пароль, запрашивая возможность повышения привилегий.

...

Для этого случая я написал небольшую утилиту, которую я назвал cocoasudo. Используйте cocoasudo почти так же, как и sudo. Однако вместо того, чтобы у пользователей запрашивался пароль в окне терминала, они получают диалоговое окно через API служб авторизации.

5 голосов
/ 14 июня 2010

Я обнаружил, что 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"
4 голосов
/ 26 сентября 2012

сделайте следующее, в этом примере я иду, создаю папку / 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, но я не проверяю это, после того, как я иду на тестирование и публикую здесь результаты.

2 голосов
/ 24 ноября 2014

После ответа ZJR , я превратил это в автоматор, так что вы можете использовать его как сервис или что-то еще:

on run {input, parameters}
    do shell script "sudo open \"" & (POSIX path of input as string) & "\"" with administrator privileges

    return input
end run

Или, может быть, вы просто думаете, что его ответ устарел и все еще хотите AppleScript, просто напишите эту единственную строку в Редакторе сценариев:

do shell script "[[your command]]" with administrator privileges

Что вы можете затем превратить в приложение и использовать его в качестве службы или чего-либо еще.

2 голосов
/ 04 октября 2009

gksudo - это версия GTK + sudo.

Вы можете использовать этот клон специально для OS X.

1 голос
/ 08 июня 2016

Нужно использовать собственные службы авторизации OS X вместо того, чтобы смотреть на sudo и / или графический интерфейс к нему.

Ref:

[Я знаю, что это поздний ответ ...]

0 голосов
/ 30 января 2013

Кажется, в этих ответах много неверной информации. Чтобы сэкономить время, я публикую свои выводы:

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

Я разделил это на два сценария. Первый скрипт выполняется из Java с некоторым параметром командной строки. Второй скрипт выполняет все шаги, для которых требуются права суперпользователя. Идея, конечно, состоит в том, чтобы использовать cocoasudo в первом сценарии для выполнения второго сценария с привилегиями root.

Я подтвердил путем обширного входа в отдельные файлы, что сценарии действительно выполняют то, что я намеревался. И они отлично работают при запуске вручную (с обычными привилегиями пользователя, конечно) из командной строки.

При запуске из приложения Java я получаю приглашение cocoasudo, но ничего не происходит. Не появляется даже первый вывод журнала из второго скрипта.

Когда я изменяю первый скрипт на использование osascript, снова с подтверждением, что все правильно, насколько сценарий идет, я даже не получаю подсказку, когда он запускается из Java.

Это все на OS X Mountain Lion. Как будто Apple встроила некоторые безопасные средства защиты, которые препятствуют выполнению сценариев с правами root изнутри Java.

Поскольку сам cocoasudo фактически выполняется, я склонен думать, что решение состоит в том, чтобы закодировать нечто похожее на cocoasudo, но выполнить все остальные необходимые действия, используя вызовы API-интерфейса Cocoa. Тогда это может быть также подписано кодом.

0 голосов
/ 04 октября 2009

Если вы используете терминал, то просто используйте вместо него «sudo», который запросит пароль пользователя в самом терминале (в отличие от gksudo, который, я считаю, использует графическое всплывающее окно). Sudo работает как на Linux, так и на OS X.

...