Quali sono le differenze tra "su", "sudo -s", "sudo -i", "sudo su"?

130

L'ho già letto dal manuale ma non riesco a vedere la differenza ..

su - cambia l'ID utente o diventa super utente

sudo -s [command]

L'opzione -s (shell) esegue la shell specificata dalla variabile di ambiente SHELL se è impostata o la shell come specificato in passwd (5). Se un                    comando è specificato, viene passato alla shell per l'esecuzione. Altrimenti, viene eseguita una shell interattiva.

sudo -i scompare la descrizione nel manuale

    
posta Smile.Hunter 22.10.2011 - 08:11
fonte

5 risposte

107

La principale differenza tra questi comandi è il modo in cui limitano l'accesso alle loro funzioni.

su (che significa "utente sostitutivo" o "cambia utente") - fa esattamente questo, avvia un'altra istanza di shell con i privilegi dell'utente di destinazione. Per assicurarti di avere i diritti per farlo, ti chiede la password dell'utente di destinazione . Quindi, per diventare root, è necessario conoscere la password di root. Se sul tuo computer ci sono diversi utenti che devono eseguire comandi come root, tutti hanno bisogno di conoscere la password di root - nota che sarà la stessa password. Se devi revocare le autorizzazioni di amministratore da uno degli utenti, devi modificare la password di root e dirla solo a coloro che hanno bisogno di mantenere l'accesso - disordinati.

sudo (hmm ... qual è il mnemonico? Super-User-DO?) è completamente diverso. Usa un file di configurazione (/ etc / sudoers) che elenca gli utenti che hanno diritti su azioni specifiche (esegui comandi come root, ecc.) Quando viene chiamato, richiede la password dell'utente che l'ha avviato - per garantire che la persona al terminal sia realmente lo stesso "joe" che è elencato in /etc/sudoers . Per revocare i privilegi di amministratore da una persona, è sufficiente modificare il file di configurazione (o rimuovere l'utente da un gruppo elencato in tale configurazione). Ciò si traduce in una gestione dei privilegi molto più pulita.

Di conseguenza, in molti sistemi basati su Debian root utente non ha password impostata - cioè non è possibile accedere come root direttamente.

Inoltre, /etc/sudoers consente di specificare alcune opzioni aggiuntive, ad esempio l'utente X è in grado di eseguire solo il programma Y ecc.

La combinazione di sudo su usata spesso funziona come segue: prima sudo ti chiede la tua password e, se ti è permesso, invoca il comando successivo ( su ) come superutente. Poiché su è invocato da root , non richiede di inserire la password dell'utente di destinazione. Quindi, sudo su ti consente di aprire una shell come un altro utente (inclusa la root), se ti è consentito l'accesso come super utente dal file /etc/sudoers .

    
risposta data Sergey 22.10.2011 - 09:21
fonte
48

sudo consente di eseguire comandi nel proprio account utente con privilegi di root. su ti consente di cambiare utente in modo che tu abbia effettivamente effettuato l'accesso come utente root.

sudo -s esegue una shell con i privilegi di root. sudo -i acquisisce anche l'ambiente dell'utente root.

Per vedere la differenza tra su e sudo -s , fai cd ~ e poi pwd dopo ognuno di essi. Nel primo caso, sarai nella directory principale di root, perché sei root. Nel secondo caso, sarai nella tua home directory, perché sei tu stesso con i privilegi di root.

C'è un'altra discussione su questa domanda esatta qui .

    
risposta data Mike Scott 22.10.2011 - 08:28
fonte
26

Questa risposta è una duplicazione della mia risposta su un duplicato di questa domanda , metti qui la risposta canonica in modo che le persone possano trovarlo!

La principale differenza tra sudo -i e sudo -s è:

  • sudo -i ti dà l'ambiente di root, cioè il tuo ~/.bashrc è ignorato.
  • sudo -s ti dà l'ambiente dell'utente, quindi il tuo ~/.bashrc è rispettato.

Ecco un esempio, puoi vedere che ho un'applicazione lsl nella mia directory ~/.bin/ accessibile tramite sudo -s ma non accessibile con sudo -i . Nota anche che il prompt Bash cambia come con sudo -i ma non con sudo -s :

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

Sebbene sudo -s sia utile per darti l'ambiente che conosci, ti consiglio l'uso di sudo -i per due motivi:

  1. Il promemoria visivo in cui sei in una sessione di 'root'.
  2. L'ambiente di root ha molte meno probabilità di essere avvelenato con malware, come una linea non valida in .bashrc .
risposta data dotancohen 08.11.2014 - 15:07
fonte
6

su chiede la password dell'utente "root".

sudo chiede la tua password personale (e controlla anche se sei autorizzato a eseguire comandi come root, che è configurato tramite /etc/sudoers - per impostazione predefinita tutti gli account utente che appartengono al gruppo "admin" sono consentiti usare sudo).

sudo -s lancia una shell come root, ma non modifica la directory di lavoro. sudo -i simula un login nell'account root: la tua directory di lavoro sarà /root , e root .profile ecc. verrà acquisita come se avessi effettuato il login.

    
risposta data Marius Gedminas 22.10.2011 - 21:38
fonte
2

In Ubuntu o in un sistema correlato, non trovo molto utile per su nel senso tradizionale di superutente. sudo gestisce il caso molto meglio. Tuttavia, su è ottimo per diventare un altro utente in situazioni una tantum in cui la configurazione di sudoers sarebbe stupida.

Ad esempio, se sto riparando il mio sistema da un live CD / USB, monterò spesso il mio disco rigido e altri materiali necessari e chroot nel sistema. In tal caso, il mio primo comando è generalmente:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

In questo modo, sto operando non come root, ma come utente normale, quindi utilizzo sudo a seconda dei casi.

    
risposta data Scott Severance 26.10.2011 - 09:23
fonte

Leggi altre domande sui tag