Le differenze tra Su, Sudo Su, Sudo -s e Sudo -i

Dav

Ci sono molti modi diversi per ottenere una sessione root nel terminale Linux. Questo può creare un po’ di confusione, poiché la maggior parte degli utenti alle prime armi che cercano di ottenere privilegi di root potrebbe non essere familiare con il modo in cui ciascun comando può ottenere l’accesso root, come si differenziano e quando queste differenze sono importanti. Qui analizziamo ciascuno dei diversi comandi utilizzati per ottenere l’accesso root in un terminale, spiegando come guadagnano il root, quando usarli e tutto ciò che c’è in mezzo.

Indice

  • su
  • su -c
  • sudo su
  • sudo -i
  • sudo -s
  • Domande Frequenti

Leggi anche: Che cos’è Doas e come installarlo

su

Il comando su sostituisce l’utente corrente con root nella shell attuale.

Puoi passare a qualsiasi utente digitando su e aggiungendo un nome utente dopo di esso.

Questo dirà al sistema di cambiare (e in sostanza disconnettersi) dall’utente corrente a quello specificato. In alternativa, il comando su può ottenere accesso root digitando su senza specificare nulla dopo il comando.

su è meglio utilizzato quando un utente desidera accesso diretto all’account root sul sistema. Non passa attraverso sudo o cose del genere. Invece, ti verrà chiesta l’immissione della password dell’utente root, poiché stai letteralmente accedendo ad esso. Inoltre, altri modi per ottenere l’accesso root non hanno il vantaggio di accedere anche alla home directory di root e all’ambiente root.

Attenzione: usare su è il modo meno sicuro per eseguire un’azione root. In generale, se puoi evitarlo, non usare questo.

Leggi anche: La guida definitiva ai comandi Apt e Apt-Get

su -c

Questo comando passa altri comandi direttamente all’utente root.

Linuxsudo Suc

Simile a digitare sudo prima di un comando, su -c eseguirà un comando come utente root. Tuttavia, invece di digitare semplicemente il comando, dovrai metterlo tra virgolette.

Questo è un modo veloce per eseguire un comando nel tuo terminale con privilegi elevati. È molto utile se sudo in qualche modo non è disponibile (non viene preinstallato in distribuzioni come Arch Linux) o non funziona correttamente perché è danneggiato.

Poiché stai passando qualcosa direttamente a root, se le password del tuo utente e di root sono diverse, dovrai digitare la tua password di root per autenticarti.

sudo su

Questo comando richiede la password dell’utente corrente piuttosto che di root.

È sostanzialmente lo stesso che eseguire su nella shell, salvo per una differenza cruciale: invece di dire al sistema di “cambiare utente” direttamente, stai dicendo di eseguire il comando su con privilegi di superutente. Quando viene eseguito sudo su, verranno avviati “.profile,” “.bashrc” e “/etc/profile,” proprio come eseguire su (o su root). Se qualsiasi comando viene eseguito con sudo davanti, riceve privilegi di root.

Sebbene non ci sia una grande divergenza tra sudo su e su, il primo è comunque un comando molto utile per una ragione importante: quando un utente esegue su per ottenere accesso root su un sistema, deve conoscere la password di root. A root si accede con sudo su richiedendo la password dell’utente corrente, il che rende possibile ottenere root senza la password di root.

Questo è utile in situazioni in cui potresti aver dimenticato la password di root se è diversa dalla password per il tuo account utente. Anche se potresti fare questo nel frattempo, dovresti comunque reimpostare la password di root a un certo punto.

Leggi anche: Come utilizzare il comando Rm in Linux

sudo -i

Usare sudo -i è praticamente lo stesso del comando sudo su con un’eccezione: non interagisce direttamente con l’utente root.

Proprio come sudo su, il flag -i consente a un utente di ottenere un ambiente root senza dover conoscere la password dell’account root. sudo -i è anche molto simile all’uso di sudo su: leggerà tutti i file ambientali (“.profile”, ecc.) e imposterà l’ambiente all’interno della shell.

Dove si differenzia da sudo su è che sudo -i è un modo molto più pulito di ottenere root e un ambiente root senza interagire direttamente con l’utente root.

Per chiarire: con sudo su, stai utilizzando più di un comando root setuid in background. Questo rende molto più difficile capire quali variabili ambientali verranno mantenute e quali verranno cambiate (quando si cambia all’ambiente root). Questo non è vero con sudo -i. A causa di ciò, la maggior parte delle persone lo considera il metodo preferito per ottenere root senza accedere direttamente.

In linguaggio più semplice: sudo -i ti darà un accesso root “pulito” nella tua cartella “/root”, che è la cartella “home” per l’utente root.

Leggi anche: Come utilizzare il comando dd in Linux

sudo -s

Questo comando evoca una shell con la tua variabile $SHELL.

Il flag -s per il comando sudo legge la variabile $SHELL dell’utente corrente che esegue comandi. Questo comando funziona come se l’utente stesse eseguendo sudo /bin/bash, se la shell da cui proviene l’utente è bash.

Nel nostro caso, sudo -s ci ha dato la shell interattiva fish, poiché abbiamo precedentemente installato fish come nostra shell predefinita, quindi sarebbe come se avessimo eseguito sudo /usr/bin/fish.

Linuxsudo Shellswitch

Sudo -s è una shell in modalità “non-login”. A differenza di un comando come sudo -i o sudo su, il sistema non leggerà alcun file ambientale. Quando un utente dice alla shell di eseguire sudo -s, guadagna root ma non cambierà l’ambiente utente. La tua home non sarà la home di root, ecc.

Linuxsudo Commands

Questo comando è meglio utilizzato quando l’utente vuole passare a root ma mantenere lo stesso ambiente della shell. Ad esempio, potresti voler eseguire uno script fish e non essere costretto nella shell bash predefinita che root ottiene spesso nella maggior parte delle distribuzioni.

Altri comandi trattati sopra ottengono accesso root ma ti daranno anche la shell e le variabili ambientali che la distribuzione ha per root. Forse vuoi solo passare all’utente senza tutto quel bagaglio!

Leggi anche: Comandi Bash di base per principianti Linux

Domande Frequenti

Perché la shell che sto eseguendo conta?

Se usi una shell bash non modificata per il tuo account utente, la differenza è principalmente filosofica. Nella maggior parte dei casi, elevare a root attraverso qualsiasi shell non comporterà alcun cambiamento notevole. Ma se esegui qualsiasi altra cosa, noterai immediatamente quanto possano essere diverse le cose!

Ad esempio, supponiamo che tu stia eseguendo la shell fish per il tuo account utente e mantieni la shell di root in bash. Caricare la shell utente utilizzando sudo -s produce un risultato drasticamente diverso.

La shell seguirà qualsiasi configurazione tu abbia nella cartella home di root. Se non hai tale cosa, caricherà semplicemente la configurazione predefinita anziché la tua personale. (Nel nostro caso, sarebbe “~/.config/fish/config.fish”.) Ai fini pratici, è meglio lasciare le cose in quel modo piuttosto che copiare la configurazione dell’utente in “/root”.

Cambiando alla shell del tuo account utente quando si passa a root, dovrebbe essere fatto solo se hai bisogno di eseguire uno script che ha assolutamente bisogno di quella particolare shell.

Accedere a root può danneggiare il mio sistema?

In alcuni casi, sì. A meno che tu non sia assolutamente sicuro di aver bisogno di accedere a root per tutto in una particolare sessione terminale, è spesso meglio digitare semplicemente sudo seguito da un comando, se desideri accedere a root per quel particolare comando. Ad esempio, digitare sudo apt install vlc in qualsiasi versione basata su Debian di Linux direbbe al sistema operativo di accedere a root solo per eseguire il gestore di pacchetti APT per installare VLC.

Un avvertimento molto importante nell’eseguire sudo -i o qualsiasi altra variante di cui abbiamo discusso in precedenza, rispetto a digitare sudo prima di ciascun comando che desideri eseguire come root, è che il primo non registra la tua cronologia dei comandi in “/var/log/auth.log”. Se commetti errori, non puoi tornare indietro e controllare cosa hai fatto in modo da poter correggerlo. Dovrai operare a memoria, poiché le sessioni root non vengono registrate.

Quando digito “sudo” prima di un comando, quale variante di “sudo su” sto eseguendo?

Digitando sudo per eseguire un comando (cioè, lo stai digitando nella stessa riga del comando che desideri eseguire), lo stai sostanzialmente eseguendo all’interno di una shell root interattiva. Questo è ciò che fa il comando standalone sudo -s. È anche molto simile a eseguire il comando su -c.

Tutti gli screenshot di Miguel Leiva-Gomez.