Jaką opcję powinienem dać poleceniu sudo, aby hasło było pytane przez interfejs graficzny?

11

Ten problem od dłuższego czasu mnie wkurza.

Od czasu do czasu muszę napisać plik skryptu, który powinien wykonywać sudopolecenia. Niekoniecznie wiem z góry, że będę działać, sudowięc jestem pewien, że istnieje sposób, aby otworzyć ładny interfejs graficzny (taki jak ten, który pojawia się podczas instalacji oprogramowania), ale jak?

man sudoMówi:

-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

Jestem więc prawie pewien, że rozwiązanie w tym tkwi -Ai SUDO_ASKPASSkrotki, ale udało mi się znaleźć, co w to włożyć.

apouche
źródło
1
W Linuksie byłyby obsługiwane przez interfejsy takie jak gtksudolub kdesudo. Nie wiem, co jest po stronie OS-X, ale zakładam, że szukasz czegoś podobnego.
Caleb

Odpowiedzi:

17

System OS X nie ma całkowicie czystego sposobu na zrobienie tego, ale istnieje kilka sposobów na sfałszowanie go. Po pierwsze, AppleScript ma dobry sposób na robienie sudo-rzeczy, oparte na graficznym uwierzytelnieniu, i możesz tego użyć:

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

Możesz również użyć tego mechanizmu, aby ustawić znacznik czasu sudo, a następnie użyć zwykłego sudo (w ciągu 5 minut), aby wykonać następujące czynności:

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

Na koniec możesz użyć AppleScript, aby poprosić o hasło, a następnie przekazać je 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
źródło
tak długo czekałem, aby podziękować za tę wspaniałą wskazówkę
apouche
0

OS X nie ma graficznego interfejsu dla sudo, ale pomocna będzie cocoasudo lub macsudo .

nudziarz
źródło