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


Quando eseguo 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 usato su Internet, vedo sudo su, sudo su -, sudo -i e sudo /bin/bash essere utilizzato per aprire una sessione di root, ma non sono chiaro sulla differenza tra questi e quando o se la differenza è importante.

Qualcuno può chiarirlo?


195
2017-11-12 23:30


origine


Hai dimenticato di chiedere informazioni sudo -s e sudo su. - Radu Rădeanu
Relazionato: Differenza tra "su", "sudo -s", "sudo -i" - Radu Rădeanu
Relazionato: Qual è la differenza tra "comando sudo" e comando sudo sh? - Radu Rădeanu
Relazionato: Qual è la differenza funzionale tra sudo su e sudo -i? - Radu Rădeanu
@ RaduRădeanu Quando ho digitato la domanda, ho esaminato le domande suggerite e nessuna di queste ha veramente affrontato la mia domanda completa. Lo stesso vale per le domande a cui ti sei collegato. Sebbene contengano molte nuove informazioni per me, e grazie per averli collegati, le ho trovate non così complete come fornisce il caos della risposta utente, che è molto più in linea con quello che stavo cercando. - Paul


risposte:


Per spiegare questo è necessario 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 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:

  • shell di login: una shell di login ti registra nel sistema come utente specificato, necessario per questo è un nome utente e una password. Quando colpisci ctrl+alt+F1 per accedere a un terminale virtuale si ottiene dopo l'accesso con successo una shell di login.
  • shell non di login: una shell che viene eseguita senza effettuare il login, 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 chiamate 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:

user@host:~$ sudo su
root@host:/home/user#

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

sudo -i È quasi la stessa di 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 file di risorse specifici per l'accesso come .profile, .bashrc o .login sarà letto ed eseguito dalla shell.

sudo /bin/bash Questo 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 -slegge il $SHELL variabile ed esegue il contenuto. Se $SHELL contiene /bin/bash invoca sudo /bin/bash (vedi sopra).

Dai un'occhiata: 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'

257
2017-11-13 09:43



Solo un chiarimento: sudo consente a un utente autorizzato di eseguire un comando come superutente o un altro utente. Ad ogni modo, +1 per il tuo impegno. - Radu Rădeanu
@chaos Grazie per questa eccellente risposta! Risolve principalmente le mie domande, quindi sono andato avanti e ho contrassegnato la domanda, ma non capisco quando è preferibile eseguire una particolare shell. In realtà uso solo Ubuntu attraverso la riga di comando e trovo il mio uso più comune per l'apertura di un file root sessione utente (vs utilizzo sudo) è quando sto facendo qualcosa che richiede un uso intenso di root privilegi, ad esempio quando si installa qualcosa di nuovo o si esegue una riconfigurazione importante. Sto usando sudo /bin/bashma a quanto pare quel metodo ha un brutto colpo di stato per qualche motivo che non capisco. - Paul
Inoltre, è più "corretto" dire che su sta per switch user, piuttosto che super user. Cioè eseguire uno script php: su www-data /usr/share/script.php o semplicemente su www-data per la shell interattiva. Ma su senza alcun nome utente sarà l'account root (super user). - oblivian
Caos - "shopt -q login_shell && echo 'Login shell' || echo 'Nessuna shell di login'" Questi tipi di suggerimenti che vedo spesso, ma perché farlo così tanto tempo? L'operatore && indica se il codice di uscita 0 è "do next command" e il doppio pipe (||) significa else (se non 0) quindi eseguire questo comando. Quindi, in pratica, ciò che sta dicendo è se il codice di uscita 0 è echo "Login Shell", se il codice di uscita 1 (errore) è echo "Nessun accesso". Perché non solo "shopt -q login_shell; echo $?" $? significa il codice risultato / uscita del comando precedente. Nella maggior parte se non tutti i programmi 0 significa successo, 1 o più mezzi falliscono. Quindi se l'eco è 0 = successo ... - oblivian
@Paolo: sudo -i è suggerito. Leggi qui: ubuntuforums.org/showthread.php?t=1817402 e qui: unix.stackexchange.com/questions/98531/... - Marco Sulla