Verifica se un utente dispone dei privilegi di sudo senza richiedere l'input dell'utente


12

Ho uno script di shell locale che esegue una serie di test su un host remoto, prima di consegnare il payload; uno di questi test è se l'utente ha i privilegi di sudo, verificato semplicemente con sudo -vciò, tuttavia ciò richiede che l'utente inserisca la propria password. Inoltre, l'host remoto sembra avere un timeout di sudo istantaneo, quindi la password è richiesta su ogni nuova connessione, e questo è qualcosa che non ho il permesso di cambiare (come criterio).

Ovviamente posso verificare se l'utente fa parte di determinati gruppi, ma questo non sarebbe agnostico per la configurazione dell'host remoto, quindi speravo che ci fosse un metodo per verificare che non sia necessario assumere anche i gruppi dell'utente come non hai bisogno di input dell'utente?

Grazie!

AGGIORNAMENTO: Per fare eco ai miei commenti, voglio solo verificare se un utente potrebbe eventualmente eseguire l'operazione, senza richiedere l'interazione dell'utente per quel test.


è necessario verificare se l'utente ha la possibilità di usare sudo o se sta eseguendo lo script della shell tramite sudo?
Niko SP,

Solo se ha la possibilità. Lo script locale richiederà di inserire la password sudo in un secondo momento, quindi voglio solo verificare in anticipo che l'utente sull'host remoto sia persino un sudoer.
DanH,

un rapido controllo sulla mia casella Ubuntu mi ha dato sudo -l, restituisce i comandi che l'utente può eseguire, se (TUTTI) TUTTI ne fanno parte, l'utente è in grado di usare sudo per qualsiasi comando. Forse è l'angolo giusto?
Niko SP,

1
sudo -lmi chiede la mia password.
ThatGraemeGuy

1
Le cache del Sudo si basano su tty, quindi se una nuova sessione ti dà lo stesso tty potresti non essere richiesto. Prova a eseguire sudo -kprima.
Mark Wagner,

Risposte:


13

Temo che l'unica cosa che puoi testare sia se l'utente ha i privilegi di sudo senza password.

Eseguire

sudo -n true

Se $? è 0, l'utente ha accesso sudo senza password, se $? è 1, l'utente ha bisogno di una password.

Se hai bisogno di verifica per un programma specifico, cambia truecon il tuo programma, in un modo in cui il programma non fa nulla, comechmod --help


1
Si noti che questo non aiuta rilevazione preliminare se il comando Xè sudoin grado senza inserire la password e senza correre accidentalmente essa
try-catch-finally

3

Se hai un utente con accesso sudo, come "root", puoi usarlo per controllare altri accessi. Come l'utente con accesso eseguito:

sudo -n -l -U foo 2> & 1 | egrep -c -i "impossibile eseguire sudo | utente sconosciuto"

Se restituisce zero, "pippo" ha accesso. Altrimenti, non ha accesso sudo.


3
Semplicemente sudo -n -l cmde ti verrà detto se l'utente corrente ha accesso sudo a cmd. Se vuoi testare il risultato.
Philippe A.,

1

sudo -l

Questo dovrebbe darti abbastanza per decidere se hai i privilegi che desideri / di cui hai bisogno.


1
Ciò richiede ancora una password nel mio sistema (Ubuntu 16.04).
Mario Vilas,

1

So che questa è una domanda super vecchia, ma ho trovato fortuna con la -nbandiera (non interattiva) e -v/ -l. Ma devi controllare l'output:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

Alcuni reindirizzamenti di output e grepping ti porteranno lì, probabilmente:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.