giovedì 8 aprile 2010

Utilizzare sudo per le operazioni di amministrazione

Molte distribuzioni user friendly, per abituare l'utente a non utilizzare l'account root, che comporta problemi di sicurezza e permetterebbe al neofita di creare grossi danni, si limitano alla creazione dell'utente "normale" e configurano sudo in maniera che questo possa eseguire tutte le operazioni di amministrazione. In molti casi non è neanche possibile utilizzare il comando "su -" per acquisire i permessi di root perchè l'account amministrativo non ha una password impostata, o comunque non la si conosce (può essere anche impostata ad un valore non riproducibile ad un logon), o magari è in lock.
L'eliminazione di questa possibilità aiuta anche a difendersi da possibili attacchi di tipo brute force costringendo l'attaccante a conoscere un account utente diverso da quello di root, oltre a dover indovinare la password, che sicuramente sarebbe presente ed in caso di esposizione del servizio ssh limita molto le possibilità di riuscire a penetrare il sistema (ssh, per fortuna, è quasi sempre configurato in modo da non permettere l'accesso ad utenti con password nulla od account in lock).
Nel caso il nostro sistema fosse configurato in maniera standard e volessimo invece riportarci nella condizione di utilizzare sudo per le operazioni di amministrazione, basta seguire le seguenti informazioni.
Attenzione, le operazioni che andremo ad eseguire comportano sostanziali modifiche delle credenziali e dei sistemi di autenticazione con la possibilità di perdita dell'accesso amministrativo al sistema; quindi dovete prestare un'elevata attenzione verificando di avere sempre la possibilità (o scappatoia) per eseguire operazioni amministrative. Inoltre, se ci sono dei software che vengono eseguiti con le credenziali di root, non so come possano comportarsi in assenza della password all'account amministrativo... io per adesso non ho mai incontrato problemi, ma sicuramente non ho provato tutte le casistiche, quindi prestate molta attenzione a tutto quello che fate.
I passi da fare per replicare la soluzione senza utente root saranno principalmente 2, da eseguire con una logica ben determinata per evitare di ritrovarci senza possibilità di eseguire comandi aministrativi (ed in caso di imprevisti o mal configurazione è ALTAMENTE probabile): configurazione di sudo per l'utente "abituale", con verifica del funzionamento, e rimozione della password dell'utente root.
Il comando sudo si basa sull'escalation dei privilegi, e quindi viene concessa la possibilità di eseguire comandi amministrativi, da parte degli utenti, in quanto i permessi vengono decisi in base a determinati filtri. Il file di configurazione è /etc/sudoers, ma non è possibile editarlo direttamente con vi, anche se è un file di testo, ma si deve utilizzare il comando visudo che autorizza l'apertura e le modifiche al file.
I parametri personalizzabili all'interno di questo file sono molti, dalla creazione di gruppi di comandi ammessi, all'autorizzazione dell'esecuzione di questi da parte di singoli utenti o di gruppi di utenti specifici, ma noi ci occuperemo solamente del caso più semplice... un singolo utente che deve eseguire i comandi amministrativi.
Sfogliando il file, molto spesso si può notare una riga del tipo "%sudo ALL=NOPASSWD: ALL"; questa opzione è molto allettante in quanto permetterebbe di rimuove la richiesta di digitazione della password dell'utente quando utilizza sudo (da molti ritenuta una scocciatura), ma comporta un grande problema di sicurezza in quanto chiunque si colleghi con quell'utente, o trovi una shell attiva, può eseguire comandi con privilegi amministrativi.
La configurazione che interessa nello specifico a noi è relativa all'autorizzazione dell'utente per l'esecuzione dei comandi amministrativi, inserendo la password del proprio account; osservando sempre all'interno del file possiamo notare una linea con "root ALL=(ALL) ALL", in pratica è quello che interessa a noi, ma dobbiamo farlo per un singolo utente, quindi la linea da aggiungere sarà "utente ALL=(ALL) ALL"... a questo punto il nostro "utente" potra eseguire operazioni amministrative digitando la sua password.
Dopo aver modificato la configurazione di sudo proviamo ad eseguire un comando che richieda privilegi amministrativi, ad esempio "cat /etc/sudoers"... dovremmo ricevere un "permission denied"; ora proviamo "sudo cat /etc/sudoers"... se tutto è stato configurato correttamente ci viene mostrato il contenuto del file ed a questo punto possiamo continuare.
Ora veniamo alla parte più semplice: la rimozione della password di root ed il lock dell'accout in modo che non sia possibile utilizzare la password per accedere come root; queste due operazioni sono ottenibili in maniera semplice ed immediata tramite i seguenti comandi:
  • passwd -d root;
  • passwd -l root;
Ora il vostro sistema è configurato per utilizzare solamente sudo ed avere un account di root senza password... buona sicurezza a tutti.