Какой вариант следует указать команде sudo, чтобы пароль запрашивался через графический интерфейс?

11

Эта проблема не давала мне покоя.

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

The man sudoговорит:

-A          Normally, if sudo requires a password, it will read it from the current terminal.  If the -A (askpass) option is specified, a (possibly
            graphical) helper program is executed to read the user's password and output the password to the standard output.  If the SUDO_ASKPASS
            environment variable is set, it specifies the path to the helper program.  Otherwise, the value specified by the askpass option in
            sudoers(5) is used

Так что я уверен, что решение находится в этом -Aи SUDO_ASKPASSкортеже, однако мне удалось найти, что в них вставить.

apouche
источник
1
В Linux они будут обрабатываться внешними интерфейсами вроде gtksudoили kdesudo. Я не знаю, что там на стороне OS-X, но я предполагаю, что вы ищете что-то в этом роде.
Калеб

Ответы:

17

У OS X нет полностью чистого способа сделать это, но есть несколько способов подделать это. Во-первых, у AppleScript есть хороший способ сделать вещи sudo-ish основанными на графической аутентификации, и вы можете использовать это:

osascript -e "do shell script \"stufftorunasroot\" with administrator privileges"

Вы также можете использовать этот механизм для установки метки времени sudo, а затем использовать обычный sudo (в пределах 5-минутного интервала ожидания) для выполнения следующих действий:

osascript -e "do shell script \"mkdir -p /var/db/sudo/$USER; touch /var/db/sudo/$USER\" with administrator privileges" && \
    sudo stufftorunasroot

Наконец, вы можете использовать AppleScript для запроса пароля, а затем передать его в sudo:

pw="$(osascript -e 'Tell application "System Events" to display dialog "Password:" default answer "" with hidden answer' -e 'text returned of result' 2>/dev/null)" && /
    echo "$pw" | sudo -S stufftorunasroot
Гордон Дэвиссон
источник
так долго ждали, чтобы получить это спасибо за этот замечательный совет
apouche
0

OS X не поставляется с графическим интерфейсом для sudo, но вы найдете cocoasudo или macsudo полезными.

boretom
источник