Dopo le 3 del mattino, due sole categorie di persone sono al lavoro: le prostitute e i programmatori.

— Anonimo

ArchLinux Small Business Server (3) - il comando sudo

http://www.stenoweb.it/files/blog/archlogo.png Con questo articolo finalmente termineremo le operazioni preliminari installando e configurando sudo. L' utente/dio root deve essere usato il meno possibile, sia per aumentare la sicurezza del nostro server, sia per ridurre al minimo le possibilità di combinare malanni involontari e, per la legge di Murphy, spesso irreversibili. Con il prossimo articolo si comincerà a fare sul serio :)

Sudo

Introduzione

Nei sistemi operativi Unix/Linux c'è un utente particolare, detto super utente e contraddistinto dall'avere un UID (User ID) uguale a 0 e nome utente root, che ha totale accesso al sistema senza nessuna restrizione, è l' amministratore del sistema.

Nella maggior parte dei sistemi GNU/Linux, l'amministratore del computer non usa l'utente amministratore (per motivi di sicurezza) ma usa un utente normale per svolgere il lavoro quotidiano. Quando ha la necessità di svolgere mansioni di amministrazione apre un terminale e avvia una sessione come utente root, oppure se si trova già in un terminale come utente normale usa il comando su per diventare utente root.

Io preferisco usare un approccio diverso per svolgere mansioni amministrative, basato sull'utilizzo del comando sudo. Qui esistono diverse scuole di pensiero in merito alla sicurezza di sudo rispetto a su.

In ognuno dei due modelli, sudo e su, ci sono vantaggi e svantaggi.

Siccome sudo costringe l'esecuzione controllata di singoli comandi ha questi vantaggi:

  • Riduce il tempo in cui gli utenti sono nel sistema come root e quindi riduce i rischi di lanciare inavvertitamente comandi dannosi per il sistema.
  • Aumenta la possibilità di ricerca e analisi sul sistema grazie al log dei comandi.

Di contro, se qualcuno scopre la password di un utente abilitato all'utilizzo di sudo come root in effetti può ottenere accesso come root. Nel caso di utilizzo di sudo bisogna prestare una maggiore attenzione alla scelta della password utente.
I sostenitori del modello su, cioè account di root abilitato e utilizzo di una shell di root per compiti amministrativi, sostengono che su sia più sicuro in quanto il livello di root si ottiene dopo l'inserimento di due password, la password utente e la password di root.
D'altra parte, chi cerca di entrare in un sistema ha la necessità di scoprire due cose, il nome utente e la password. Con l'account di root abilitato, una delle due è già nota, serve solo scoprire la password. Con sudo si devono scoprire entrambe (nome utente e password).
Quando in un sistema alcuni compiti amministrativi sono assegnati a vari utenti, l'utilizzo di sudo evita di dover dare la password di root a più utenti. L'amministratore può assegnare a qualsiasi utente, temporaneamente, privilegi particolari, eliminandoli o limitandoli quando non vi è più necessità.

Il comando sudo

sudo (superuser do) consente di eseguire un comando come se si fosse un altro utente. Effettua una specie di sostituzione, previa autorizzazione, tra l'utente attuale (colui che esegue il comando sudo) e l'utente target (colui che esegue l'effettivo comando). Mentre con il comando su si cambia utente fino al termine della sessione del terminale, sudo assegna i privilegi dell'utente target al solo processo (e ai suoi processi figli) che viene con esso avviato.

Per eseguire dei comandi con privilegi d'amministrazione è sufficiente digitare sudo e successivamente il comando che si desidera eseguire come utente root, come nel seguente esempio:

sudo nano /etc/rc.conf

Una volta digitato il comando, il sistema chiederà la password dell'utente attuale e non la password dell'utente target. La password viene chiesta la prima volta e memorizzata per un certo lasso di tempo, quindi è possibile usare il comando sudo più volte consecutive senza dover inserire ogni volta la password.

Con sudo l'amministratore del sistema può assegnare privilegi particolari a qualsiasi utente, definire quali comandi far eseguire e quali no e avere il log (/var/log/auth.log) di tutte le operazioni effettuate su tentativi di accesso non autorizzati.

Creazione di un utente amministrativo

A me piacciono i sistemi "rootless" , cioè privi dell' utente "root" che tanti problemi di sicurezza può causare. Quindi creiamo un utente amministrativo con una solida password. In seguito a questo utente assegneremo privilegi particolari per poter disabilitare root e amministrare il sistema.
Siccome sono a corto di idee chiamo questo utente "admin"

adduser admin

Lasciamo le impostazioni di default e assegniamo una bella password che naturalmente non si deve dimenticare e proseguiamo.

Installazione di sudo

Per installare sudo :

pacman -S sudo

Configurazione

Per abilitare il nostro utente "admin" a svolgere i compiti amministrativi utilizzando sudo devo aggiungerlo al file /etc/sudoers. Per editare questo file devo utilizzare il comando :

visudo

che apre il file utilizzando l'editor vim (che io conosco ben poco...). visudo controlla quanto scrivete su questo importantissimo file evitando possibili errori di sintassi. Se non conoscete vim vediamodi arrangiarci lo stesso :)

  • spostatevi nella sezione "User privilege specification" ci dovrebbe essere una riga con 'root'
  • premete il tasto i (insert) create una riga vuota e scrivete :
admin ALL=(ALL) SETENV: ALL
  • premete ESC (con cui uscite dal modo insert)
  • digitate :x per salvare e uscire

Ora l'utente "admin" dovrebbe essere abilitato al comando "sudo". Prima di proseguire provate a loggarvi sulla console con l'utente admin e poi provate, ad esempio:

sudo nano /etc/rc.conf

dopo aver digitato la password di admin provate a salvare il file, se non vi dà errore tutto è filato liscio.

Disabilitare l'utente root

Quando siete sicuri che admin abbia i privilegi di amministrazione attraverso sudo possiamo disabilitare l'utente root:

sudo passwd -l root

In caso di pentimento potete riabilitarlo con:
sudo passwd root

Il nostro sistema "rootless" è pronto. Da ora in avanti ci loggheremo alla console con il nostro utente admin e utilizzeremo sudo per i compiti amministrativi.

Operazioni aggiuntive

Per terminare questa sezione preliminare non dimenticate di :

  • assegnare un nome al vostro server (sempre su /etc/rc.conf, ma serve dirlo ?)
  • aggiungere il nome del server al file /etc/hosts accanto a localhost
127.0.0.1 localhost archi
  • impostare il nome del dominio ed eventualmente il DNS nel caso non vi venga assegnato dal provider in /etc/resolv.conf
search mede.it
nameserver xxx.xxx.xxx.xxx

Bene. Terminate le operazioni prelimiari non abbiamo ancora fatto niente :D.
Ma chi ben inizia ...

La prossima volta entreremo nel vivo.

solo un appunto inutile:
sono abbastanza sicuro che sudo significhi "Substitute User DO", come si può intuire dalle man pages di SUDO e di SU, e se si considera che in realtà SUDO (così come SU) permette di eseguire comandi come un utente qualsiasi tramite l'opzione -u [se non specificato è come se passasse l'opzione "-u root"].
Per il resto belli questi tuoi post sulla creazione di un serverino con Arch...
ciao

Grazie dell'appunto, ma come leggo su [http://en.wikipedia.org/wiki/Sudo wikipedia] la definizione che ho dato è corretta. A meno che non si sbagli anche wikipedia :)
E' corretta la definizione del parametro -u, ma non volevo scrivere una guida completa al comando // sudo //.

Naturalmente, inutile dirlo, apprezzo ogni appunto e correzione, specie nei prossimi post decisamente più impegnativi.

E se in un momento di follia l'utente admin facesse:
sudo visudo
cancellando la riga che gli permetteva di accedere come sudo? :P

E se invece provasse con un più semplice
sudo rm -rf /
O dasse una martellata con mazzuolo da kg 5 sul notebook ?

:D

La mia soluzione era un pò più innocua... alla tua non c'è rimedio... soprattutto la seconda!!! :P