Per avviare una shell di root su macchine in cui l'account di root è disabilitato, puoi eseguire uno di:
sudo -i
:esegui una shell di accesso interattiva (legge/root/.bashrc
e/root/.profile
)sudo -s
:esegue una shell interattiva senza login (legge/root/.bashrc
)
Nel mondo Ubuntu, vedo molto spesso sudo su
suggerito come un modo per ottenere una shell di root. Perché eseguire due comandi separati quando uno lo farà? Per quanto ne so, sudo -i
è equivalente a sudo su -
e sudo -s
è lo stesso di sudo su
.
Le uniche differenze sembrano essere (confrontando sudo -i
a sinistra e sudo su -
a destra):
E confrontando sudo -s
(a sinistra) e sudo su
(a destra):
Le principali differenze (ignorando il SUDO_foo
variabili e LS_COLORS
) sembra essere il XDG_foo
variabili di sistema in sudo su
versioni.
Ci sono casi in cui tale differenza giustifica l'uso dell'inelegante sudo su
? Posso tranquillamente dire alle persone (come spesso faccio) che non ha mai senso eseguire sudo su
o mi sfugge qualcosa?
Risposta accettata:
Come hai affermato nella tua domanda, la differenza principale è l'ambiente.
sudo su -
rispetto a sudo -i
In caso di sudo su -
è una shell di accesso, quindi /etc/profile
, .profile
e .bashrc
vengono eseguiti e ti ritroverai nella home directory di root con l'ambiente di root.
sudo -i
è quasi uguale a sudo su -
Il -i
(simula login 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
verrà letto ed eseguito dalla shell.
sudo su
rispetto a sudo -s
sudo su
chiama sudo
con il comando su
. Bash è chiamato come shell interattiva non di accesso. Quindi bash
esegue solo .bashrc
. Puoi vedere che dopo essere passato a root sei ancora nella stessa directory:
[email protected]:~$ sudo su
[email protected]:/home/user#
sudo -s
legge il $SHELL
variabile ed esegue il contenuto. Se $SHELL
contiene /bin/bash
invoca sudo /bin/bash
, il che significa che /bin/bash
viene avviato come shell non di accesso, quindi tutti i file dot non vengono 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.
Conclusione
Il -i
flag è stato aggiunto a sudo
nel 2004, per fornire una funzione simile a sudo su -
, quindi sudo su -
era il modello per sudo -i
e destinato a funzionare così. Penso che non importi davvero quale usi, a meno che l'ambiente non sia importante.
Aggiunta
Un punto fondamentale che deve essere menzionato qui è che sudo
è stato progettato per eseguire solo un singolo comando con privilegi più elevati e quindi rilascia quei privilegi su quelli originali. Non è mai stato pensato per cambiare davvero l'utente e lasciare aperta una shell di root. Nel corso del tempo, sudo
è stato ampliato con tali meccanismi, perché le persone erano infastidite dal motivo per cui utilizzare sudo
davanti a ogni comando.
Quindi il significato di sudo
è stato abusato. sudo
aveva lo scopo di incoraggiare l'utente a ridurre al minimo l'uso dei privilegi di root.
Quello che abbiamo ora è sudo
diventa sempre più popolare. È integrato in quasi tutte le distribuzioni Linux conosciute. Lo strumento originale per passare a un altro account utente è su
. Per un veterano della vecchia scuola *nix, cose come sudo
potrebbe sembrare inutile. Aggiunge complessità e si comporta in modo più probabile rispetto ai meccanismi che conosciamo dalla famiglia OS di Microsoft, e quindi è contrario alla filosofia della semplicità dei sistemi *nix.
Non sono proprio un veterano, ma anche secondo me sudo
è sempre stata una spina nel fianco, da quando è stato introdotto e ho sempre lavorato intorno all'uso di sudo
, se fosse possibile. Sono molto riluttante a usare sudo
. Su tutti i miei sistemi, l'account di root è abilitato. Ma le cose cambiano, forse verrà il momento, quando su
sarà deprecato e sudo
sostituisce su
completamente.
Quindi penso che sarà meglio usare sudo
I meccanismi interni di 's (-s
, -i
) invece di fare affidamento su un vecchio strumento come su
.