Que opção devo dar ao comando sudo para que a senha seja solicitada através de uma interface gráfica?

11

Esse problema já me incomoda há um tempo.

De vez em quando, preciso escrever um arquivo de script que deve executar sudocomandos. Não necessariamente sei antecipadamente que executarei, pois sudotenho certeza de que há uma maneira de abrir uma interface gráfica agradável (como a que aparece ao instalar o software), mas como?

O man sudodiz:

-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

Portanto, tenho certeza de que a solução reside nisso -Ae SUDO_ASKPASStupla, no entanto, consegui encontrar o que colocar neles.

apouche
fonte
1
No Linux, isso seria tratado por front-ends como gtksudoou kdesudo. Não sei o que há no lado do OS-X, mas presumo que você esteja procurando algo nesse sentido.
Caleb

Respostas:

17

O OS X não tem uma maneira totalmente limpa de fazer isso, mas existem algumas maneiras de falsificá-lo. Primeiro, o AppleScript tem uma boa maneira de fazer coisas sudo-ish com base em uma autenticação gráfica, e você pode usar isso:

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

Você também pode usar esse mecanismo para definir o carimbo de data / hora do sudo e, em seguida, usar o sudo regular (dentro da janela de tempo limite de 5 minutos) para fazer o seguinte:

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

Por fim, você pode usar o AppleScript para solicitar uma senha e passar para o 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
Gordon Davisson
fonte
esperou por tanto tempo para ter essa obrigado por esta grande dica
apouche
0

O OS X não vem com um front-end gráfico para o sudo, mas você encontrará o cocoasudo ou o macsudo útil.

boretom
fonte