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


148

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

su - cambia ID utente o diventa superutente

sudo -s [command]

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

sudo -i scompare descrizione nel manuale


7
Inoltre, non utilizzare su userper accedere da shell non attendibili, ma su - user. Vedi unix.stackexchange.com/q/7013/8250
Lekensteyn il

@Lekensteyn wow, ottimo esempio. grazie per il LOL :)
törzsmókus

1
ricorda sempre il vecchio comandamento: non rivendicherai invano il nome di root!
törzsmókus,

Non dire sudo -iè male, ma puoi sicuramente fotterti usando
Kolob Canyon,

Risposte:


118

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

su (che significa "utente sostitutivo" o "cambia utente") - fa esattamente questo, avvia un'altra istanza della 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, devi conoscere la password di root. Se sul tuo computer sono presenti più utenti che devono eseguire i comandi come root, devono tutti conoscere la password di root: tieni presente che sarà la stessa password. Se è necessario revocare le autorizzazioni di amministratore da uno degli utenti, è necessario modificare la password di root e dirlo solo a quelle persone che devono mantenere l'accesso - disordinato.

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

Di conseguenza, in molti sistemi basati su Debian l' rootutente non ha una password impostata, ovvero non è possibile accedere direttamente come root.

Inoltre, /etc/sudoersconsente di specificare alcune opzioni aggiuntive - ovvero l'utente X è in grado di eseguire solo il programma Y ecc.

La sudo sucombinazione usata spesso funziona come segue: prima sudoti chiede la tua password e, se ti è permesso farlo, invoca il comando successivo ( su) come superutente. Poiché suviene invocato da root, non è necessario immettere la password dell'utente di destinazione. Quindi, sudo suti consente di aprire una shell come un altro utente (incluso root), se ti è consentito l'accesso come superutente da parte del /etc/sudoersfile.


2
Non ho mai visto sucome "switch user", ma sempre come superutente; il comportamento predefinito senza il nome utente di un altro (sebbene abbia senso). Da Wikipedia : "Il comando su, chiamato anche super user [1] già nel 1974, è stato anche chiamato" utente sostitutivo "," spoof user "o" set user "perché consente di modificare l'account associato all'attuale terminale (finestra). "
dr jimbob,

5
@dr jimbob: hai ragione, ma sto scoprendo che "cambiare utente" è un po 'meglio descrivere ciò che fa - anche se storicamente sta per "superutente". Sono anche felice di scoprire che l'articolo di Wikipedia è molto simile alla mia risposta - non ho mai visto l'articolo prima :)
Sergey

11
Il significato ufficiale di "su" è "utente sostitutivo". Vedi: "man su".
Angel O'Sphere,

1
@ AngelO'Sphere: È interessante notare che la manpage di Ubuntu non menziona affatto "sostituto". La manpage su gnu.org ( gnu.org/software/coreutils/manual/html_node/su-invocation.html ) in effetti dice "su: esegui un comando con utente sostitutivo e ID gruppo". Penso che gnu.org sia una fonte canonica :)
Sergey,

1
Che dire sudo su?
Kaz Wolfe,

59

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

sudo -sesegue una shell con privilegi di root. sudo -iacquisisce anche l'ambiente dell'utente root.

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

C'è più discussione su questa domanda esatta qui .


20
"Sei te stesso con i privilegi di root" non è ciò che sta realmente accadendo :) In realtà, non è possibile essere "te stesso con i privilegi di root" - o sei root o sei te stesso. Prova a digitare whoami in entrambi i casi. Il fatto che i cd ~risultati siano diversi è il risultato di sudo -s che non imposta la variabile d'ambiente $ HOME.
Sergey,

1
@Sergey, whoami dice che è 'root' perché stai eseguendo il cmd 'whoami' come se lo avessi sudo, quindi temporaneamente (per la durata di quel comando) sembri essere l'utente root, ma potresti non avere ancora pieno accesso root in base al file sudoers.
Polpo,

1
@Octopus: quello che stavo cercando di dire è che in Unix un processo può avere un solo UID e che l'UID determina le autorizzazioni del processo. Non puoi essere "te stesso con i privilegi di root", un programma viene eseguito con il tuo UID o con l'UID di root (0).
Sergey,

5
Per quanto riguarda "potresti non avere ancora accesso completo alla radice in base al file sudoers": il sudoersfile controlla chi può eseguire quale comando come un altro utente, ma ciò accade prima dell'esecuzione del comando. Tuttavia, una volta che ti è stato permesso di avviare un processo come, diciamo, root - il processo in esecuzione ha l'UID di root e ha un accesso completo al sistema, non c'è modo per sudo di limitarlo. Ancora una volta, sei sempre tu stesso o root, non c'è "metà e metà". Quindi, se il sudoersfile consente di eseguire la shell come root, le autorizzazioni in quella shell sarebbero indistinguibili da una shell root "normale".
Sergey,

36

Questa risposta è una copia della mia risposta su una copia di questa domanda , metti qui la risposta canonica in modo che la gente possa trovarla!

La principale differenza tra sudo -ie sudo -sè:

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

Ecco un esempio, puoi vedere che ho un'applicazione lslnella mia ~/.bin/directory che è accessibile tramite sudo -sma non accessibile con sudo -i. Nota anche che il prompt di Bash cambia come sarà con sudo -ima 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 -ssia conveniente per darti l'ambiente che conosci, ti consiglio di usarlosudo -i per due motivi:

  1. Il promemoria visivo che ci si trova in una sessione 'root'.
  2. L'ambiente di root ha molte meno probabilità di essere avvelenato da malware, come una linea non autorizzata .bashrc.

Ho notato che sudo -s non sembra elaborare / etc / profile, o qualsiasi cosa io abbia in /etc/profile.d/ .. qualche idea del perché?
Meffect,

@dotancohen - Cosa intendi per " sudo -sambiente" con cui un utente ha familiarità?
Motivato il

@dotancohen - Il comando sudo -s fornisce già segnali visivi, quindi sono curioso di sapere perché sudo -i è un'opzione migliore.
Motivato il

9

su chiede la password dell'utente "root".

sudorichiede la propria password (e verifica anche se è consentito eseguire comandi come root, che è configurato tramite /etc/sudoers- per impostazione predefinita tutti gli account utente che appartengono ai gruppi "admin" o "sudo" possono utilizzare sudo).

sudo -savvia una shell come root, ma non cambia la directory di lavoro. sudo -isimula un login nell'account root: lo sarà la tua directory di lavoro /root, e root .profileecc. verranno forniti come se fossero al login.


1
per rendere la risposta più completa: sudo -sè quasi uguale a su($ HOME è diverso) ed sudo -iè uguale asu -
DJCrashdummy

@DJCrashdummy - Perché dici quasi uguale a? Ciò che è diverso?
Motivato il

2

In Ubuntu o in un sistema correlato, non trovo molto utile sunel senso tradizionale del superutente. sudogestisce il caso molto meglio. Tuttavia, suè ottimo per diventare un altro utente in situazioni una tantum in cui la configurazione dei sudoer sarebbe sciocca.

Ad esempio, se sto riparando il mio sistema da un CD / USB live, monterò spesso il mio disco rigido e altre cose necessarie e chrootnel 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 il mio normale utente, e quindi uso sudocome appropriato.


0
  • su Chiede la password di root, diventa root, apre una shell interattiva non di login.
  • su - Chiede la password di root, diventa root, apre una shell di login interattiva.

  • sudo -s Chiede le password, diventa root, apre una shell interattiva non di accesso.
  • sudo -i Chiede le password, diventa root, apre una shell di login interattiva.

La migliore pratica è usare questi due.


  • sudo suChiede la tua password, diventa root per un secondo e viene eseguito sucome root`.
  • sudo su -Chiede la password, diventa root per un secondo e viene eseguito su -come root.

Quindi, in questo caso, stai suutilizzando sudoe non devi conoscere la password effettiva di root. I risultati sono gli stessi di sue su -.


Qual è la differenza tra login e shell non login?
Pilota 6

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.