So che questa è una domanda molto vecchia, ma ecco che l'ho fatto in una sceneggiatura oggi. Supponendo che essere sudo significhi essere in grado di eseguire qualsiasi comando come sudo (o, almeno, uptime)
CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1|grep "load"|wc -l) if [ ${CAN_I_RUN_SUDO} -gt 0 ] then echo "I can run the sudo command" else echo "I can't run the Sudo command" fi
Tuttavia, se il tuo utente ha restrizioni nel visudo, questo controllo non sarà sufficiente, ad esempio, se il tuo utente può usare solo il comando make. Prova a eseguire un comando che sai funzionerà. Puoi aggiungere il filtro grep -v Sorry, ad esempio:$(sudo -n uptime 2>&1|grep "load" | grep -v Sorry|wc -l) per evitare questi falsi positivi.
Il -n
L'opzione è disponibile nelle versioni più recenti di sudo, ma come hai affermato non è un'opzione. Non c'è un vero modo per fare quello che stai cercando a meno di provare sudo e vedere se ritorna con una richiesta di password. Se la tua preoccupazione è che desideri un'indicazione visiva, perché non iniziare sudo /bin/bash per avviare una sessione di root bash? Nota che questo non è sicuro, ma è anche un po 'insicuro se qualcuno si rende conto dei tuoi rapidi cambiamenti su sudo.
Per semplificare la risposta data da @wags007
if sudo -n true
then
sudo id
else
echo "sorry, but did not want to bother you"
fi
Tuttavia, se nella tua configurazione https://www.sudo.ws/man/1.8.15/sudoers.man.html hai defaults mail_badpass
ci sarà una mail inviata per ogni test che risulta falso (avrebbe richiesto). Per evitare questo fastidio, cambia quella parte del tuo file sudoers in
Defaults mail_badpass
Defaults! /bin/true !mail_badpass
Di conseguenza, vengono inviate e-mail di avviso di sicurezza per tutti i comandi tranne /bin/true. Ebbene sì, qualcuno potrebbe ora provare a forzare una password chiamando sudo true
un numero illimitato di volte senza che venga inviata alcuna mail di avviso di sicurezza.
Nota:usa sempre visudo
invece del tuo editor preferito per modificare il file sudoers. In caso contrario, rischi di essere bloccato.