## Come cambiare utente o diventare temporaneamente root
Announcement
Puoi trovare tutti i miei ultimi post su medium.
## Comandi coperti in questo articolo
id # Visualizza il nome utente dell’utente attualmente connesso. Mostra anche a quali gruppi l’utente appartiene.
su # Ti permette di (s)witchare in un altro (u)ser mentre sei loggato come qualcun altro.
sudo # xxxxxxxxxxxxxxxxx
### Diventa l’utente root usando “su”
In linux si raccomanda sempre di evitare di loggarsi direttamente come utente root. Questo perché può causare problemi di sicurezza e aumenta le possibilità di danneggiare qualcosa. Infatti, Centos mostrerà un messaggio di avvertimento quando si tenta un login diretto come root.
Quindi la pratica migliore è quella di effettuare sempre il login come utente normale. Tuttavia ci sono molti comandi che possono essere eseguiti solo come utente root, e in quei casi, il modo raccomandato per eseguirli è usare l’utilità (s)witch (u)ser, che ti permette di passare da un utente all’altro:
su – root # Questo ti permette di passare all’utente root. Tratterò l’argomento “-” più tardi.
password # Il comando su richiede la password dell’utente a cui si sta passando. In questo caso è la password dell’utente root.
id # Il comando id mostra semplicemente quale utente è attualmente in esecuzione nella tua sessione.
Nota, puoi usare il comando su solo se conosci la password dell’utente che stai passando. L’unica eccezione a questa regola è se sei loggato come utente root, nel qual caso puoi fare su a qualsiasi utente senza che venga richiesta la password.
login:
password:
id
su – # Se lasci fuori il nome utente, come qui, allora per default, su assumerà che tu intenda root.
password
id
su – Tom
id # Notate che non abbiamo avuto bisogno di inserire la password di Tom.
### Passaggio all’utente precedente
Nell’esempio precedente siamo passati da John-=>root-=>Tom. Questo significa che la nostra attuale shell ha 2 sessioni. Quindi, se volete tornare a John, potete usare il comando exit:
id
exit # Questo vi porta indietro di un passo, che in questo caso è l’utente root.
id
exit # Ora siete tornati a John, e non potete uscire ulteriormente. Se provate ad uscire di nuovo, il terminale stesso si chiuderà.
Invece di fare quanto sopra, avreste potuto semplicemente fare:
su – John # in questo caso, sareste in 3 sessioni, cioèJohn-=>root-=>Tom-=>John
# È buona pratica, dove possibile, non andare mai più in profondità di 3 livelli. Altrimenti potresti iniziare a sperimentare comportamenti strani.
## Cosa significa il “-” in ‘su -‘?
Il primo parametro, “-“, dice a su di fingere come se l’utente avesse fatto il login direttamente. Altrimenti, l’ambiente viene passato, con l’eccezione di $PATH, che è controllato da PATH e SUPATH in /etc/default/su.
Questo “-” significa fondamentalmente iniziare la nuova sessione da zero, e non portare alcun ‘bagaglio’ dalla sessione precedente. Per esempio, se si crea una variabile e la si esporta, allora questa variabile è disponibile solo se non si avvia una nuova sessione:
testvar=12345 # Qui ho creato una nuova variabile.
export testvar # Questo imposta la variabile per diventare disponibile in tutte le sessioni.
su Tom # Poiché “-” è omesso, il riporto è permesso. Quindi la variabile dovrebbe essere accessibile nella nuova sessione.
password
echo testvar # esiste nella nuova sessione.
exit
su – Tom # Poiché “-” è specificato, blocca qualsiasi riporto, al fine di imitare un login diretto il più vicino possibile.
echo testvar # Restituisce uno spazio vuoto poiché questa variabile non esiste in una sessione “fresca”.
## Esegui un singolo comando come altro utente.
Puoi usare su per cambiare utente giusto il tempo di eseguire un singolo comando prima di uscire di nuovo:
su – Tom -c ‘echo “Hello and Goodbye Tom”
O puoi unire più comandi in una singola linea usando il punto e virgola:
su – Tom -c ‘id ; echo “Hello and Goodbye Tom’
## Dare accesso ai non-admins ad alcuni livelli di root usando sudo
In Linux, tutti i comandi/task di livello admin che possono essere eseguiti solo dall’utente root. Quindi se c’è una particolare attività a livello di amministratore che si vuole che un collega esegua, allora un modo per farlo è dirgli la password di root. Tuttavia questa non è una buona idea perché:
1. per ragioni di sicurezza, è una buona pratica limitare il più possibile chi ha accesso come root.
2. gli state inavvertitamente dando il pieno controllo di tutto il resto.
Un modo per aggirare questo dilemma è usare l’utilità sudo. Sudo permette all’utente root di dare ad un utente la possibilità di eseguire uno o più comandi di livello amministrativo (come se fosse loggato come utente root ma senza accedere effettivamente come utente root).
Per esempio, solo root può spegnere la macchina:
shutdown # Questo spegne una macchina. Per riaccenderla, è necessario premere il pulsante di accensione sulla macchina.
Se l’utente Tom cerca di usare il comando shutdown, riceve un messaggio di autorizzazione negata:
<code=>
Se l’utente root dà a Tom, sudo il permesso di usare il comando “shutdown”. Quindi Tom dovrebbe ora essere in grado di eseguire il comando di livello admin precedendolo con la parola sudo:
sudo {comando}
Come indicato sopra, la sintassi per avviare sudo è la parola sudo seguita dal comando da eseguire:
Quindi Tom può invocare il suo privilegio sudo in questo modo:
shutdown # questo non funziona perché sudo non è stato invocato.
sudo shutdown # Questo ha funzionato, e la macchina si spegne.
<password=> # Come su, dovete inserire una password. Ma a differenza di su, in realtà si inserisce la password dell’utente corrente.
# Questo è un po’ eccessivo dato che l’utente è già loggato come tale. Fortunatamente questo <l-anchor=>sudo password<l=> prompt può essere disabilitato.
Per ragioni di sicurezza, viene tenuto un registro di tutte le attività relative a sudo, nel caso in cui un utente abusi dei suoi privilegi sudo.
L’utente root deve <l=>configurare e assegnare i privilegi sudo<l=> per assegnare i privilegi.
## La differenza principale tra l’uso di su e sudo (per eseguire comandi di amministrazione)
Per riassumere, la differenza principale per eseguire comandi di livello amministrativo come utente principale sono:
1. Per usare su, è necessario conoscere la password di root, mentre per sudo non è necessario
2. Con sudo, è necessario prefissare ogni comando con la parola “sudo”, ma nessun prefisso è necessario con su.
3. Con su, è possibile eseguire qualsiasi comando di amministrazione, ma con sudo, è possibile eseguire solo i comandi di amministrazione autorizzati nel file di configurazione di sudo.
## Alcuni fatti utili
L’utente root è talvolta indicato come “superutente”.
Un’alternativa all'”id” comamnd “whoami” (ma non è altrettanto informativo).
C’è una convenzione che per un utente root, il prompt utente finisce in “#” mentre per chiunque altro finisce con “$”. A tal proposito, ci sono alcuni modi per <l=>personalizzare il prompt dei comandi<l=>.
Il comando id mostra più di un semplice nome utente e gruppo. Mostra anche i numeri id corrispondenti all’utente e ai gruppi. Puoi anche usare il comando id per vedere i dettagli di altri utenti oltre all’utente attualmente loggato:
id {username}
Il comando id prende le informazioni da /etc/passwd e /etc/group
## Argomenti correlati
Impostazione e assegnazione dei privilegi sudo.