Aumentare la Sicurezza nelle Distribuzioni Linux

La stabilità e la sicurezza offerte da GNU/Linux sono leggendarie, ma non dobbiamo mai abbassare la guardia, soprattutto se stiamo parlando di macchine server che ospiteranno dati sensibili. Per quanto riguarda l’uso desktop non abbiamo bisogno probabilmente degli accorgimenti che andrò ad esporvi, ma potranno sempre servire come lettura per apprendere nuove informazioni su questo bellissimo sistema operativo. Come primo elemento andiamo a definire le partizioni. Propongo un partizionamento piuttosto complesso, ma questo dovrebbe servire per poter bloccare tentativi di attacco. Definiamo un’area di swap che deve essere il doppio della memoria RAM, ma con i nuovi sistemi per il paging della memoria bastano 512 MB o al più 1 GB. Ricordatevi che il sistema operativo ha bisogno di una locazione fisica non formattata, ossia raw device, per poter salvare i dati e le informazioni che vengono via via caricate in memoria. Dobbiamo poi dedicare 100 MB di spazio per la partizione di /boot, necessaria ad ospitare il kernel ed i file che consentono di caricare il sistema Linux. Un’altra partizione è quella della root ( / ) dove vengono installate le librerie e gli eseguibili del sistema operativo. Poi tocca a /usr dove vengono copiate le librerie e gli eseguibili necessari all’utente e /usr/local per ospitare applicazioni di terze parti. La partizione /var non deve essere mai esclusa, perché ospita file di log ed aree di spool. E’ necessario dedicare parecchio spazio a quest’ultima partizione, perché deve ospitare i vari file di log che lieviteranno in dimensioni nel tempo. E’ anche necessario definire la partizione /home per i dati degli utenti e /tmp che ospita file temporanei. Inoltre dobbiamo ricordare che ogni applicazione server ( http, ftp, database, ecc. ) dovrebbe essere creata in una directory separata del disco.
La fase della creazione del file system o formattazione è quella che ci consente di creare fisicamente le varie partizioni con il file system che decideremo di utilizzare per le varie partizioni che abbiamo creato. In generale un ottimo file system è ext4 o ext3 che sono ottimi per partizioni con file piccoli o anche grandi come /home o /usr o /var, mentre per partizioni che dovranno avere tantissimi file e di piccole dimensioni, come root ( / ), consiglio reiserfs.
Un accorgimento importante riguarda le impostazioni di mount, cioé la modalità con cui le partizioni vengono rese accessibili agli utenti. Al fine di evitare che un aggressore possa caricare qualche rootkit e sostituire eseguibili del sistema con alcuni creati ad-hoc, è indispensabile montare alcuni file system in sola lettura ( read only ). In particolare la partizione /usr, /bin e /sbin, devono essere protette più delle altre, perché hanno al loro interno tutti gli eseguibili di sistema e che non devono essere assolutamente mai modificati, tranne che nell’aggiornamento del sistema operativo. Occorre quindi modificare il file /etc/fstab ( dopo averne fatto il backup di sicurezza con il comando cp /etc/fstab /etc/fstab.bak ) ed in particolare inserire ro nella riga di /usr e root ( / ). Quando l’amministratore ( root ) dovrà eseguire l’aggiornamento, dovrà rimontare la partizione in scrittura con il comando mount -o remount, rw /usr e mount -o remount, rw / ; alla stessa maniera, quando avrà finito, potrà rimontarli in sola lettura mount -o remount, ro /usr e mount -o remount, ro / .
Un problema che spesso viene ignorato è quello dei file con attributi SUID ( Set User Identification ) e SGID ( Set Group Identification ). Il primo consente di eseguire il programma con i privilegi del proprietario anziché dell’utente attivo ed il secondo con il gruppo proprietario. I file eseguibili che sono normalmente con queste impostazioni sono ping, ping6, traceroute, traceroute6, mount, umount, chage, gpasswd, passwd ed altri. Per vedere l’elenco completo di questi file nel proprio sistema si deve dare il comando find /bin /usr/bin -type f \( -perm -04000 -o -perm -02000 \) -ls , difatti il permesso 04000 è per SGID e 02000 per SUID. Per avere sempre la situazione dei file con permessi speciali sott’occhio vi consiglio di mandare l’output del comando precedente su di un file e farlo ogni settimana o due, per vedere se la lista si è allungata ed in questo caso vedrete subito i nuovi file che potrebbero essere nocivi.
Alcuni di voi a questo punto potrebbero chiedersi, perché non togliamo gli attributi speciali a questi file eseguibili? La risposta è negativa, perché questo tipo di programmi servono per far eseguire un comando ad un utente senza che questi diventi root, possiamo però assegnare ai file il minimo dei permessi, quindi se avete un comando che apre una shell e questo appartiene a root e gli date il SUID, ovviamente permetterete ad un qualsiasi utente di creare una sua shell con diritti amministrativi. Quindi… Attenzione! Ricordo che per togliere i permessi speciali basta utilizzare questo comando chmod 755 nome_file, mentre per dare il SUID ( 2 ) occorre dare chmod 2777 nome_file, per dare il SGID ( 4 ) chmod 4777 nome_file, per darne entrambe ( 4 + 2 = 6 ) chmod 6777 nome_file.
Esiste un altro permesso speciale che possiamo attribuire alle directory, lo sticky bit. Inizialmente indicava di tenere il file sul device di swap ( appiccicoso ), mentre oggi indica che un file o directory può essere cancellato solo dal proprietario del file o della directory che lo contiene, si applica infatti alle cartelle; questa regola vale anche se il file ha permessi 777. Per impostare lo sticky ( 1 ) occorre dare il comando chmod 1777 nome_directory, mentre se dobbiamo dare anche il SUID ( 1 + 2 ) chmod 3777 nome_directory, se dobbiamo dare sticky + SGID ( 1 + 4 ) chmod 5777 nome_directory, se poi diamo tutto (1 + 2 + 4 ) chmod 7777 nome_directory. Una buona regola è impostare lo sticky per tutte quelle directory che devono contenere file condivisi ed appartenenti a diversi utenti, come /tmp o /var/tmp. Per ricercare le directory con lo sticky attivato dare il comando find / -type d \( -perm -1000 \) -ls.
Infine i lettori Floppy, CD-Rom e DVD possono essere utilizzati per caricare file SUID nel sistema, quindi è bene inserire nel file /etc/fstab l’opzione NOSUID ed anche NODEV, altrimenti si consentirebbe il mount di un file system ext2 presente in un floppy sul quale è stato in precedenza memorizzato un file scrivibile /dev/kmem, che permetterebbe di accedere anche in scrittura alla memoria del kernel.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Linux e contrassegnata con . Contrassegna il permalink.