GNU/Linux >> Linux Esercitazione >  >> Linux

C'è mai un buon motivo per correre Sudo Su?

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.

Correlati:Linux – netfilter/iptables:perché non usare la tabella grezza?

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 .


Linux
  1. Ubuntu - Esegui il comando all'avvio con sudo

  2. Esiste una scorciatoia per eseguire un comando suggerito in un terminale?

  3. Come verificare se ho accesso sudo?

  4. Esegui ifconfig senza sudo

  5. Esegui il comando cd come superutente in Linux

Come eseguire il comando Sudo senza password

Come eseguire comandi Sudo senza password

Come eseguire un alias con Sudo in Linux

Come eseguire sudo comandi senza password

Debian 11.3 è così buono, semplicemente non c'è motivo per non usarlo

Esegui file di testo come comandi in Bash