Articles

Linux – Passare temporaneamente ad un altro utente Linux (usando su)

Posted on

## 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *