Quelle option dois-je donner à la commande sudo pour demander le mot de passe via une interface graphique?

11

Ce problème me dérange depuis un moment maintenant.

De temps en temps, j'ai besoin d'écrire un fichier script qui devrait exécuter des sudocommandes. Je ne sais pas nécessairement à l'avance que je vais exécuter comme sudoça, donc je suis sûr qu'il existe un moyen d'ouvrir une belle interface graphique (comme celle qui apparaît lors de l'installation du logiciel) mais comment?

Le man sudodit:

-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

Je suis donc presque sûr que la solution réside dans cela -Aet SUDO_ASKPASStuple mais j'ai réussi à trouver quoi y mettre.

apouche
la source
1
Sous Linux, ceux-ci seraient gérés par des frontaux comme gtksudoou kdesudo. Je ne sais pas ce qu'il y a du côté OS-X, mais je suppose que vous cherchez quelque chose dans ce sens.
Caleb

Réponses:

17

OS X n'a ​​pas de moyen entièrement propre de le faire, mais il existe plusieurs façons de le simuler. Tout d'abord, AppleScript a un bon moyen de faire des choses sudo-ish basées sur une authentification graphique, et vous pouvez l'utiliser:

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

Vous pouvez également utiliser ce mécanisme pour définir l'horodatage sudo, puis utiliser le sudo normal (dans la fenêtre de temporisation de 5 minutes) pour effectuer les opérations suivantes:

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

Enfin, vous pouvez utiliser AppleScript pour demander un mot de passe, puis le transmettre à 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
la source
attendu si longtemps pour avoir que merci pour ce bon conseil
apouche
0

OS X n'est pas fourni avec une interface graphique pour sudo mais vous trouverez utile cocoasudo ou macsudo .

boretom
la source