'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - quando importa quale è usato, o ha importanza?

194

Quando faccio qualcosa che richiede l'inserimento di root in dozzine di volte di seguito, preferisco passare la sessione a una sessione root. Nei vari tutorial e istruzioni che ho utilizzato su Internet, vedo sudo su , sudo su - , sudo -i e sudo /bin/bash utilizzati per aprire una sessione root, ma non sono chiaro sulla differenza tra questi e quando o se la differenza è importante.

Qualcuno può chiarirlo per me?

    
posta Paul 13.11.2013 - 00:30

1 risposta

254

Per spiegarlo devi sapere cosa fanno i programmi:

su - Il comando su viene utilizzato per passare a un altro utente ( s strega u ser), ma puoi anche passare all'utente root invocando il comando senza parametro. su ti chiede di cambiare la password dell'utente, dopo aver digitato la password sei passato all'ambiente dell'utente.

sudo - sudo è pensato per eseguire un singolo comando con privilegi di root. Ma a differenza di su ti chiede la password dell'utente corrente. Questo utente deve essere nel file sudoers (o in un gruppo che si trova nel file sudoers). Per impostazione predefinita, Ubuntu "ricorda" la password per 15 minuti, in modo da non dover digitare la password ogni volta.

bash - Un'interfaccia testuale per interagire con il computer. È importante comprendere la differenza tra shell di accesso, non di accesso, interattive e non interattive:

  • login shell: una shell di login ti registra nel sistema come utente specificato, necessario perché è un nome utente e una password. Quando premi ctrl + alt + F1 per accedere a un terminale virtuale che ottieni dopo aver effettuato il login con successo una shell di login.
  • shell non di login: una shell che viene eseguita senza effettuare l'accesso, necessario per questo è un utente attualmente loggato. Quando apri un terminale grafico in gnome è una shell non di login.
  • shell interattiva: una shell (login o non-login) in cui è possibile digitare o interrompere i comandi in modo interattivo. Ad esempio un terminale gnome.
  • shell non interattiva: una (sotto) shell che probabilmente viene eseguita da un processo automatizzato. Non vedrai né input né output.

sudo su chiama sudo con il comando su . Bash è chiamato shell interattiva non di login. Quindi bash esegue solo .bashrc . Puoi vedere che dopo il passaggio a root sei ancora nella stessa directory:

[email protected]:~$ sudo su
[email protected]:/home/user#

sudo su - Questa volta è una shell di login, quindi vengono eseguiti /etc/profile , .profile e .bashrc e ti troverai nella directory principale di root con l'ambiente di root.

sudo -i È quasi uguale a sudo su - L'opzione -i (simula l'accesso iniziale) esegue la shell specificata dalla voce del database delle password dell'utente di destinazione come shell di login. Ciò significa che i file di risorse specifici per l'accesso come .profile , .bashrc o .login saranno letti ed eseguiti dalla shell.

sudo /bin/bash Ciò significa che chiami sudo con il comando /bin/bash . /bin/bash viene avviato come shell non di accesso in modo che tutti i file di punti non vengano eseguiti, ma bash stesso legge .bashrc dell'utente chiamante. Il tuo ambiente rimane lo stesso. La tua casa non sarà la casa di root. Quindi sei root, ma nell'ambiente dell'utente chiamante.

sudo -s legge la variabile $SHELL ed esegue il contenuto. Se $SHELL contiene /bin/bash invoca sudo /bin/bash (vedi sopra).

Check: Per verificare se ci si trova in una shell di login o no (funziona solo in bash perché shopt è un comando incorporato):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
risposta data chaos 13.11.2013 - 10:43

Leggi altre domande sui tag