2013-02-18 19:36:35 +0000 2013-02-18 19:36:35 +0000
108
108

Come verificare se ho accesso a sudo?

Recentemente mi sono trovato nei guai a causa di questo.

$sudo vim /etc/motd 
[sudo] password for bruce: 
bruce is not in the sudoers file. This incident will be reported.
``` &001 


C'è un modo per verificare se ho accesso a sudo o no?

Risposte (9)

123
123
123
2013-02-18 19:51:06 +0000

Esegui sudo -v. Di solito viene utilizzato per estendere il timeout della password di sudo, ma può essere utilizzato per determinare se si hanno privilegi sudo.

$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
``` ```
$ sudo ls
[sudo] password for [username]: 
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].

Estratto della pagina Man:

Se viene data l'opzione -v (convalida), sudo aggiornerà il timeout dell'utente, richiedendo la password dell'utente, se necessario. Questo estende il timeout di sudo per altri 5 minuti (o qualunque sia il timeout impostato in sudoers) ma non esegue un comando.

Se il vostro utente è autorizzato ad eseguire solo comandi specifici, questo comando funzionerà, indicando che siete autorizzati ad eseguire qualcosa con privilegi diversi. Anche se il messaggio appare diverso quando si cerca di eseguire un comando che in questo caso non è consentito (e non viene inviata alcuna mail a root ), è comunque possibile che ci si metta nei guai se gli amministratori leggono /var/log/secure.

&001 &001

Per scoprire che è consentito eseguire con privilegi diversi, si può usare sudo -l. Si noti che questo comando richiede l'inserimento della password.

43
43
43
2014-12-17 22:55:06 +0000

Questo è molto semplice. Esegui sudo -l. Questo elencherà tutti i privilegi sudo che avete.

12
12
12
2016-06-14 00:49:56 +0000

Ecco la versione script-friendly:

timeout 2 sudo id && echo Access granted || echo Access denied
``` ```
timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"

, poiché non si blocca sull'inserimento della password se non si dispone dell'accesso sudo.

Si può anche impostare in una variabile come:

&001

Nota: Su macOS, è necessario installare coreutils, ad esempio brew install coreutils.

9
9
9
2017-12-30 18:57:38 +0000

La risposta di Gerald Schade qui , può ancora essere migliorata!

Use

prompt=$(sudo -nv 2>&1)
if [$? -eq 0]; then
  # exit code of sudo-command is 0
  echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
  echo "has_sudo__needs_pass"
else
  echo "no_sudo"
fi
``` ```
#!/usr/bin/env bash

is_root () {
    return $(id -u)
}

has_sudo() {
    local prompt

    prompt=$(sudo -nv 2>&1)
    if [$? -eq 0]; then
    echo "has_sudo__pass_set"
    elif echo $prompt | grep -q '^sudo:'; then
    echo "has_sudo__needs_pass"
    else
    echo "no_sudo"
    fi
}

elevate_cmd () {
    local cmd=$@

    HAS_SUDO=$(has_sudo)

    case "$HAS_SUDO" in
    has_sudo__pass_set)
        sudo $cmd
        ;;
    has_sudo__needs_pass)
        echo "Please supply sudo password for the following command: sudo $cmd"
        sudo $cmd
        ;;
    *)
        echo "Please supply root password for the following command: su -c \"$cmd\""
        su -c "$cmd"
        ;;
    esac
}

if is_root; then
    echo "Error: need to call this script as a normal user, not as root!"
    exit 1
fi

elevate_cmd which adduser

Ecco un esempio completo di utilizzo in uno script :

&001

3
3
3
2017-02-28 02:27:06 +0000

Per me, ‘sudo -v’ e ‘sudo -l’ non hanno funzionato in uno script perché a volte interattivo (chiedendomi una password, come detto sopra). Anche ‘sudo -n -l’ non ha funzionato, ha dato il codice di uscita ‘1’ anche se ho i permessi sudo, a causa della password mancante. Ma l'estensione del comando a:

A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor

è stata per me un successo per lo script. Questa espressione dà 0 se l'utente corrente può chiamare ‘sudo’ e 1 se no.

Spiegazione: Il parametro aggiuntivo da -n a sudo impedisce l'interattività.
L'uscita $A del comando ‘sudo -n -v 2>&1’ può essere: - vuoto (in questo caso, sudo può essere chiamato dall'utente corrente), oppure: - una nota che l'utente corrente non è autorizzato per sudo, oppure: - un testo di domanda per la password (in questo caso, l'utente è autorizzato). (“asswor” si adatta sia per una “password” inglese che per una “Passwort” tedesca).

2
2
2
2017-10-01 22:31:29 +0000

Ho un basso rango per votare e commentare, ma ho voluto votare la risposta di Gerald Schade, perché ho scoperto che l'unico modo per farlo prima, e ho pensato che nessun altro lo sappia - fino ad ora :D

btw la mia soluzione:

[["$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'*]]

(dalla fine del 2015 mwhahaaa)

1
1
1
2020-02-11 09:15:13 +0000

Questo dovrebbe essere sufficiente per dirvi se avete o meno root:

sudo whoami

Se sudo chiede la password di root, o non funziona, significa anche che non avete privilegi di root (almeno non attraverso sudo).

1
1
1
2016-08-30 17:58:05 +0000

“Accesso al Sudo” è disponibile nei gusti. Due sapori primari: Prima di tutto tu, o un gruppo di cui fai parte, devi essere impostato per l'accesso a sudo nel file /etc/sudoers.

In secondo luogo devi conoscere la tua password, o devi aver eseguito un comando sudo di recente. Abbastanza recentemente che il timeout non sia scaduto. (Fatto curioso: si può fare il time out molto lungo nel file sudoer.)

Spesso voglio testare per il secondo tipo di accesso nel prolog di uno script che dovrà sudo alcuni passi. Quando questo controllo fallisce posso consigliare all'utente di abilitare il secondo tipo di accesso prima di eseguire lo script.

bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled

Il -S dice a sudo di leggere la password da stdin. Il -p imposta un prompt vuoto. Il -K cancella il secondo accesso.

Poiché invia stderr a /dev/null, controlla anche se l'utente ha il primo tipo di accesso a sudo.

-5
-5
-5
2013-02-18 19:41:36 +0000

Seguire questi passi per visualizzare il file sudoers. Se siete lì dentro, avete sudo. In caso contrario, potete aggiungere voi stessi.

  1. su
  2. visudo
  3. 3. In fondo al file, inserire your_username_here ALL=(ALL) ALL
  4. Premere ESC e digitare :wq
  5. Digitare exit
  6. Digitare sudo . 6. Eseguire nuovamente il comando necessario &007
  7. Inserire la password (non la password della root)