SDB:Accedere alla sessione come root

(Reindirizzamento da SDB:Login as root)

Introduzione

Nei sistemi Unix e Linux esiste un utente speciale per l'amministrazione del sistema. Questi è l'utente a cui sono assegnati uid uguale a 0 e username root. È anche noto come 'super-utente' (dall'inglese 'superuser'). Nell'utilizzo quotidiano viene chiamato semplicemente 'root'. Root ha il controllo completo ed assoluto del sistema, per cui un qualsiasi errore commesso come root può danneggiare il sistema e renderlo inutilizzabile. Inoltre, qualora una persona non autorizzata dovesse diventare root, sarebbero guai assai seri, probabilmente irreparabili.


Ecco una testimonianza reale, proveniente da un cliente, che dovrebbe servire da monito:

... così, poiché stavo lavorando come root, mi è capitato questo incidente. Nella
speranza di ottenere qualche suono dal sistema, ho scritto per errore "ls > /dev/hdb2" invece di
"/dev/dsp" - sfortunatamente, /dev/hdb2 è la mia partizione root.

Si noti che /dev/hdb2 era la sua partizione root. Tuttavia, assieme ad un sorrisetto malizioso, ha tutta la nostra compassione ;-)


Anni di esperienza con sistemi basati su Unix e Linux hanno portato alla conclusione che non è sicuro:

  • svolgere le 'normali' attività sul sistema come root, dato che è troppo elevato il rischio di commettere per caso qualcosa di pericoloso e di corrompere severamente il sistema mischiando i dati utente con i dati di sistema. Molto meglio diventare root solo quando è realmente necessario;
  • accedere al login direttamente come root, in particolare quando si ha una connessione di rete attiva (per via del pericolo di sniffing). Esistono alcune eccezioni a questa regola pratica, come verrà illustrato più avanti.

Come procedere

Vedremo in dettaglio come osservare queste regole usando openSUSE.

Non utilizzare root per le normali attività

openSUSE ti offre un aiuto

Durante l'installazione ti viene chiesto di aggiungere almeno un utente normale al database degli utenti. Questo è l'utente che dovresti utilizzare per le tue normali attività quotidiane, come, per esempio, accedere ad una sessione grafica (p.es. di KDE o di Gnome) per gestire le email, ascoltare musica, navigare in rete, e tutto il resto. Chiameremo questo userid: happy, a simboleggiare il lettore di questo articolo in qualità di utente felice, e soddisfatto, di openSUSE.

La possibilità di accedere ad una sessione grafica come root semplicemente selezionandolo e cliccando dall'elenco degli utenti disponibili non è un'impostazione facilmente accessibile, e questo rispecchia una precisa scelta di progettazione. Non dovrai dunque stupirti quando ti verrà detto di non modificare quell'impostazione.

Cos'altro si può fare

Quando ti trovi nella condizione che più persone accedono al sistema (come marito/moglie, bambini) assegna a ciascuno di loro una userid. In tal modo disporranno ciascuno del proprio spazio sul disco, senza che gli altri possano interferire, potranno così scegliere il gestore del desktop da usare, lo sfondo del desktop, etc. Benché questa raccomandazione sia solo minimamente correlata col problema dell'utente root che si sta affrontando, mostre le differenze tra utenti 'normali' e root da usare a proprio vantaggio. Si possono avere molti utenti normali, ma esiste un solo utente root. Inoltre la password di root deve essere nota ad un ristretto numero di persone! Il caso un cui c'è un solo utente 'normale' (l'utente happy) è un caso particolare di multi-utenza con Linux. E conduce alla seguente raccomandazione.

Prendi in considerazione la possibilità di creare un utente per gestire i compiti e i dati dell'amministratore del sistema. Chiamiamo questo utente: admin (per esempio). Da quel momento puoi agire e archiviare file e informazioni nel tuo ruolo di amministratore del sistema, cose che non è più necessario fare come root, separatamente da ciò che fai e archivi come utente happy.

Ricordiamo, per inciso, che è possibile aggiungere gli utenti tramite YaST > Sicurezza e utenti > Gestione di utenti e gruppi.

Attraverso la rete

Prima di proseguire è necessario fare alcune precisazioni sulla rete. Poiché i protocolli come Telnet, Rsh e Rlogin sono considerati protocolli molto rischiosi da usarsi nelle reti di oggi, anche nel caso di utilizzo da parte di un utente normale e di utilizzo comune, mai usare tali protocolli se per un qualunque motivo si prevede di inviare la password di root attraverso di essi. Usa, invece, sempre protocolli sicuri, come ssh.

Non accedere direttamente al login come root

Per tutte le azioni che richiedono per la loro esecuzione di diventare root ti verrà richiesta la password di root. Questo si verifica non solo per non permettere ad altre persone non autorizzate di diventare root, ma anche per ricordarti ti prestare estrema attenzione e cautela in ciò che ti appresti a fare.

Abbiamo già parlato della questione dell'accedere al sistema come root dal gestore grafico dei login. Non si può ottenere facilmente in openSUSE, ed è giusto così. Questo non implica tuttavia che non sia possibile utilizzare i programmi ad interfaccia grafica per gestire il nostro sistema, anche se questi richiedono i privilegi di root per essere eseguiti.

Programmi che risolvono autonomamente il problema

Un esempio è YaST. Una volta che YaST è stato avviato rileva che non è stato eseguito come root, richiede allora la password di root ed esegue il resto delle operazioni con i privilegi di root. Quando tutti le attività di YaST terminano, non resta più alcun processo relativo a quelle attività e avviato come root.


Alcuni programmi dispongono di opzioni specifiche per date origine ad un'azione simile a quella appena vista per YaST:

  • konsole --type su avvierà il programma di emulazione del terminale Konsole, chiedendo la password di root nella finestra che ospita il terminale, utilizzerà anche un colore diverso per lo sfondo per ricordarti che stai agendo come root;
  • konqueror --profile filemanagement richiederà la password di root e aprirà la finestra del gestore dei file (in modalità super-utente).

Non è comunque necessario imparare a memoria questi comandi, dal momento ché è sufficiente spostarsi nel Menu di KDE in Applicazioni > Sistema > Terminale > Terminal - Super User Mode (cioè in modalità gestione sistema) questo ti permetterà di fare a meno del primo esempio da riga di comando, e, allo stesso modo, nel Menu di KDE andare in Applicazioni > Sistema > File Manager > Gestore file - Modalità super utente (cioè in modalità gestione sistema) sostituirà il secondo esempio.

Avviare qualsiasi programma ad interfaccia grafica con kdesu o gnomesu

Probabilmente saprai che puoi eseguire un comando dal Menu di KDE, spostandoti in Computer > Esegui comando..., o attraverso la combinazione di tasti Alt-F2. Inizia a scrivere la tua riga di comando con kdesu seguito dal comando (il nome del programma) che desideri eseguire come root, p.es.: kdesu xterm avvierà l'omonimo emulatore di terminale (a bit antiquato), ma attenzione: ciò che digiterai lì, lo digiterai come root! Il comando equivalente per Gnome è gnomesu.


Probabilmente non è una buona idea avviare Firefox in tal modo e poi usarlo per navigare e scaricare da Internet. Si suggerisce quindi di sapere cosa, e perché, andrai ad eseguire come root.

Eseguire un comando come root durante una sessione da terminale

Utilizzare la riga di comando è molto comune in Linux, soprattutto per l'utente root. Come detto sopra è possibile avviare un emulatore di terminale a riga di comando (anche nota come CLI: Command Line Interface), per esempio konsole, xterm direttamente come root, ma quando non stai inserendo da tastiera dei comandi che richiedono permanentemente i privilegi di root, è meglio avviare l'emulatore del terminale come utente admin/happy e limitare il ricorso a root ai soli comandi che lo richiedono necessariamente. Per fare ciò, utilizza il comando sudo, p.es.:

sudo /etc/rc.d/apache2 restart

Dopo che lo script Apache restart è terminato (di solito ti verrà visualizzato a schermo qualsiasi risultato generato durante questa azione) tornerai di nuovo ad operare come admin/happy. Per modificare il file fstab potresti usare sudo vi /etc/fstab. Ma anche kdesu kwrite /etc/fstab potrà essere un'opzione cui fare ricorso, qualora quello sia il tuo editor preferito.

Eseguire un comando che dispone di GUI come root durante una sessione da terminale

Per lanciare un programma ad interfaccia grafica (GUI) come root, è necessario avere accesso al DISPLAY il cui proprietario risulta lo stesso utente che hai usato per accedere alla sessione che stai usando in quel momento. Il comando sudo xeyes restituisce allora il seguente risultato: unable to open Display: Per risolvere il problema puoi lanciare sudo usando l'opzione -E per conservare le stesse variabili di ambiente. Per rendere permanente questa impostazione puoi seguire i seguenti passaggi: sudo /usr/sbin/visudo trova la riga che riporta il testo: Defaults env_keep= " LANG LC_ADDRESS ... aggiungi DISPLAY e XAUTHORITY a quell'elenco. La parte iniziale della riga risulterà ora simile a questa:Defaults env_keep = "DISPLAY XAUTHORITY LANG LC_ADDRESS ... Infine salva il file; da adesso puoi digitare sudo xeyes senza più aver bisogno di aggiungere l'opzione -E.

Sessioni da terminale come root prolungate

Quando è richiesto un accesso al terminale come root per un periodo ti tempo più lungo, usa il comando su. Viene avviata una nuova shell con i privilegi di root. È fortemente raccomandato l'utilizzo dell'opzione - (o, equivalentemente, -l oppure --login) dato che, in questo modo, viene avviata la shell per root come se fosse una shell di login. Ciò significa che vengono eseguite tutte le inizializzazioni che vengono fatte durante un normale login (ovvero un accesso ad una sessione in modalità testo), in particolare verrà assegnato il valore corretto alla variabile PATH. Infatti, quando non starai utilizzando la shell di login, la sessione come root riceverà la variabile PATH dell'utente happy, o admin, a seconda del caso, la quale potrebbe contenere dei percorsi a directory inaspettate, che a loro volta potrebbero ospitare degli eseguibili pericolosi. La più nota è sicuramente la directory . (la tua directory di lavoro). Se un utente normale creasse, per esempio, uno script con il nome ls, con il seguente contenuto

Icon-warning.png
Attenzione! Il codice qui di seguito è un esempio da non imitare. Se eseguirai il codice qui sotto distruggerai il tuo sistema, eliminando qualunque cosa contenga. Il codice qui sotto è confrontabile con il comando deltree C:\
#!/bin/sh
cd /
rm -rf *

in /tmp/ o nella propria directory home, root può cancellare involontariamente l'intero sistema. Anche quando il carattere . è l'ultima directory presente nella variabile PATH non è possibile essere sicuri che, a causa di errori di digitazione, non si invochi involontariamente un programma locale (per esempio: la, al posto di lsi -a). In breve, per diventare root per una sessione più lunga di un singolo comando:

happy@system:~> su -
Password:
system:~ #

Osserva il prompt differente (che in alcuni emulatori del terminal viene anche visualizzato in rosso). Per terminare la tua sessione come root:

system:~ # exit
logout
happy@system:~>

La console vera

La console vera del tuo sistema è quella a cui puoi accedere usando la combinazione di tasti che già conosci perché viene anche usata per accedere alla tua sessione grafica. Per consentire questo utilizzo multiplo del sistema esistono diversi 'schermi logici' disponibili. Si può accedere a questi ultimi mediante le combinazioni di tasti Ctrl-Alt-Fn. La tua sessione grafica (quella dotata di GUI) solitamente è raggiungibile con la combinazione Ctrl-ALt-F7. Puoi avere due, o anche di più, sessioni grafiche allo stesso tempo, ti sposterai alla seconda sessione grafica con Ctrl-Alt-F8, e così via per altre eventuali. La console vera è raggiungibile con Ctrl-Alt-F1. Provando questa combinazione di tasti per la prima volta dopo un avvio del sistema, ti verranno visualizzati sullo schermo le ultime righe dell'outuput generato da quell'avvio e la riga con il cursore lampeggiante (familiarmente, il prompt) per l'accesso al terminale. Lo stesso vale se si ha a che fare con un terminale emulato (ovvero quando, in una sessione come admin/happy, stai utilizzando sudo oppure su (o entrambi), ma NON con kdesu o gnomesu).


Esistono più schermi di login al terminale, li puoi raggiungere con la sequenza di combinazioni di tasti da Ctrl-Alt F2 fino a Ctrl-Alt-F6, ma hanno un aspetto più spartano (dal punto di vista grafico) e non li usa quasi nessuno (tranne forse uno solo di quelli, quando il terminale n. 1 è bloccato).


Dato che è difficilissimo fare sniffing sulle attività della console vera, puoi fare il login a quest'ultima direttamente come root. Ciò potrebbe addirittura rendersi necessario qualora la tua /home non fosse disponibile (se è localizzata su una partizione separata, il che è assai consigliato, potrebbe non essere stata montata a causa di un problema, o perché si è reso necessario, per esempio durante un aggiornamento o una installazione ). In questi casi non puoi accedere come utente normale. Ma la directory home di root non si trova in /home, bensì in /. Questo è uno dei motivi per cui le directory sono organizzate in questo modo.

Bibliografia

  • Practical UNIX Security, Simson Garfinkel e Gene Spafford (O'Reilly Serie, ISBN 0-937175-72-2)
  • Essential System Administration, Æleen Frisch (O'Reilly Serie, ISBN 1-56592-127-5)
  • Computer Security Basics, Deborah Russell e G.T. Gangemi Sr. (O'Reilly Serie, ISBN 0-937175-71-4)

Collegamenti

en:SDB:root cannot execute certain programs <keyword>root,login</keyword>