C'è mai un buon motivo per eseguire sudo su?


78

Per avviare una shell di root su macchine in cui l'account di root è disabilitato, è possibile eseguire uno di:

  • sudo -i: esegue una shell di login interattiva (legge /root/.bashrce /root/.profile)
  • sudo -s: esegue una shell interattiva senza login (legge /root/.bashrc)

Nel mondo di Ubuntu, molto spesso vedo sudo susuggerito come un modo per ottenere una shell di root. Perché eseguire due comandi separati quando uno farà? Per quanto ne so, sudo -iè equivalente sudo su -ed sudo -sè uguale a sudo su.

Le uniche differenze sembrano essere (comparando sudo -ia sinistra ea sudo su -destra):

screenshot della combinazione che confronta "sudo -i" e "sudo su -"

E confrontando sudo -s(a sinistra) e sudo su(a destra):

screenshot della fusione che confronta "sudo -s" e "sudo su"

Le differenze principali (ignorando le SUDO_foovariabili e LS_COLORS) sembrano essere le XDG_foovariabili di sistema nelle sudo suversioni.

Ci sono casi in cui quella differenza merita l'uso del non elegante sudo su? Posso tranquillamente dire alla gente (come spesso accade) che non ha mai senso correre sudo suo mi sto perdendo qualcosa?


8
Non ho mai capito quei sistemi fantasiosi come quelli ubuntuche impediscono agli utenti di essere standard su -. Hanno creato il problema e ora ci sono discussioni infinite su come risolverlo.
Jimmij,

16
@jimmij Non hai bisogno di conoscere la password di root con su -? Non pensi che ciò crei una falla nella sicurezza in ambienti multiutente, in cui più di una persona deve avere accesso come root?
Erathiel,

4
@Christopher Il problema non è uno degli utenti che hanno il privilegio sudo o la password di root per hackerare il sistema. Il problema riguarda la sicurezza delle password. Quando si modifica la password di root, è necessario informare tutti gli utenti che ne hanno bisogno, il che può essere difficile. Con sudo non hai questa difficoltà.
Huygens,

4
Qual è lo strumento diff?
Josh The Geek,

5
@jimmij In che modo Ubuntu ne impedisce l'uso su -? Sì, si dovrebbe impostare una password di root, ma è banale.
Phizes,

Risposte:


62

Come hai affermato nella tua domanda, la differenza principale è l'ambiente.

sudo su - vs. sudo -i

In questo caso sudo su -è una shell di accesso, quindi /etc/profile, .profilee .bashrcvengono eseguite e ti troverai nella directory principale di root con l'ambiente di root.

sudo -iè quasi lo stesso di sudo su -The -i(simulare login iniziale) opzione consente di eseguire la shell specificata dalla voce del database password dell'utente di destinazione come una shell di login. Ciò significa che specifica risorsa-login file come .profile, .bashrco .loginsarà letto ed eseguito dalla shell.

sudo su vs. sudo -s

sudo suchiama sudocon il comando su. Bash è chiamato come shell interattiva senza accesso. Quindi bashesegue solo .bashrc. Puoi vedere che dopo essere passati a root sei ancora nella stessa directory:

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

sudo -slegge la $SHELLvariabile ed esegue il contenuto. Se lo $SHELLcontiene /bin/bash, invoca sudo /bin/bash, il che significa che /bin/bashviene avviato come shell non di accesso, quindi tutti i file dot non vengono eseguiti, ma vengono bashletti. bashrcdell'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.

Conclusione

La -ibandiera è stata aggiunta sudonel 2004 , per fornire una funzione simile a sudo su -, così come lo è sudo su -stato il modello sudo -ie voleva funzionare allo stesso modo. Penso che non importa quale usi, a meno che l'ambiente non sia importante.

aggiunta

Un punto di base che deve essere menzionato qui è che è sudostato progettato per eseguire un solo comando con privilegi più elevati e quindi rilasciare tali privilegi su quelli originali. Non è mai stato pensato per cambiare davvero l'utente e lasciare aperta una shell di root. Nel corso del tempo, è sudostato ampliato con tali meccanismi, perché le persone erano infastidite dal perché usare sudodi fronte a ogni comando.

Quindi il significato di è sudostato abusato. sudodoveva incoraggiare l'utente a ridurre al minimo l'uso dei privilegi di root.

Ciò che abbiamo ora è sudodiventato sempre più popolare. È integrato in quasi ogni distribuzione linux ben nota. Lo strumento originale per passare a un altro account utente è su. Per un veterano della vecchia scuola * nix cose del genere sudopotrebbero sembrare inutili. Aggiunge complessità e si comporta con maggiore probabilità ai meccanismi che conosciamo dalla famiglia os di Microsoft, e quindi è in contrasto con la filosofia della semplicità dei sistemi * nix.

Non sono davvero un veterano, ma anche a mio avviso sudoè sempre stata una spina nel fianco, dal momento in cui è stato introdotto e ho sempre lavorato sull'uso di sudo, se possibile. Sono più riluttante a usare sudo. Su tutti i miei sistemi, l'account di root è abilitato. Ma le cose cambiano, forse verrà il momento, quando susarà deprecato e sudorimpiazzerà sucompletamente.

Quindi penso che sarà il migliore per usare sudoi meccanismi interni ( -s, -i) invece di fare affidamento su un vecchio strumento come su.


4
Ah, quindi prima del 2004 c'era davvero un motivo per correre sudo suallora? Al momento stavo usando distro senza sudo e account root attivi, quindi non lo so. Ciò potrebbe spiegare la prevalenza del sudo su meme nel mondo Ubuntu.
terdon

8
Non ne ho mai saputo sudo -io sudo -sprima - dal 1991 gestisco UNIX di vario genere e per me sudo su -è solo un'abitudine radicata a questo punto.
soffice

2
È sudo -slo stesso di sudo $SHELLallora?
Samuel Edwin Ward,

3
(Accetto con @chaos) I motivi per usare sudo su -sono 1) che funziona e sai esattamente cosa fa, e 2) che non devi ricordare un'altra opzione sudo(quando già lo sai su -) e 3) che non ' Devo ricordare con quale versione sudostai lavorando al momento. Perché ricordare un'altra curiosità quando quello che hai già funziona bene? Esiste qualcosa di su -imeglio che evitare una voce di registro? Non ne uso sudo su -abbastanza per preoccuparmene.
jrw32982,

3
Ho appena visto l'aggiornamento, molto bello! Per la cronaca, lasciatemi dire che anch'io ho tagliato i miei denti * nix su sistemi senza sudoe sono molto abituato su. È la combinazione dei due che mi infastidisce.
terdon

16

Per rispondere direttamente alla tua domanda: no, non c'è una buona ragione per farlo. Inoltre, sudo su produce due voci di registro quando una sarebbe sufficiente.

Ho visto molte persone fare questo, e quando chiedo perché non si limitano a correre sudo -s, la risposta è solo che non conoscono la -sbandiera sudo, e generalmente cambiano dopo che l'ho sottolineato.

Tuttavia, al tuo elenco di sudo -se sudo -i, vorrei aggiungere un'altra opzione sudo -sE, che è una specie di sostituto per su -m. sudo -sEpreserva il tuo ambiente inclusa la home directory. Questo ha dei rischi se la tua home directory non è sicura (su NFS). Ma in un ambiente in cui molte persone usano root, ti evita di dover concordare sul contenuto del .bashrcfile root . My .bashrccontiene molte specializzazioni per root, quindi non ottengo esattamente lo stesso ambiente di root, ma almeno ottengo esattamente l'ambiente che desidero.


4
Se preserva il tuo ambiente, incluso $HOME, ciò significa che tutti i nuovi file creati nella cartella home sono di proprietà di root, non da te. Ho avuto questo causa molti errori di autorizzazione difficile da diagnosticare.
Eris,

sudo -sEe poi echo $HOME/rootsu CentOS 7, bash 4.2. -sEnon sembra preservare la home directory come hai dichiarato.
jeremysprofile,
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.