AbiWord Image logodip_info.png

Progetto ASID-Grub

12.05.2003

Alberto Cammozzo - Dipartimento di Scienze Statistiche - Universita' di Padova

mmzz@stat.unipd.it


Con questo progetto si propone un metodo per risolvere alcuni problemi tipici per chi, amministrando numerosi PC con piu' sistemi operativi installati, deve garantire la flessibilita' di gestione e contemporaneamente la sicurezza. Il programma GRUB offre diverse possibilita' in questo senso.


Procedura di boot e sicurezza: descrizione

All'avvio i PC consultano una lista di periferiche dalle quali fare il boot, cioe' richiedere il programma di avvio. Questa lista viene memorizzata nell'area di memoria non volatile (NVRAM) e puo' essere modificata dall'utente attraverso un programma di configurazione residente (detto, impropriamente, BIOS) il cui accesso puo' essere protetto da password.

Tipicamente la lista di periferiche e' questa: floppy disk, CDROM, primo disco fisso, secondo disco fisso, eventualmente rete. Questo significa che se un floppy di boot (contenente un programma di avvio per il PC) e' presente nel lettore di floppy il sistema operativo presente sul disco del PC non verra' caricato, ma verra' caricato quello presente sul floppy. 

La sicurezza (autenticita' e riservatezza) dei file residenti in un disco fisso puo' essere garantita solo se e' garantito l'accesso esclusivo ai dati in esso residenti attraverso il sistema operativo che li ha in gestione. Se per esempio un utente non amministratore fosse in grado di caricare un sistema operativo sul quale ha diritti di amministratore potrebbe, attraverso l'accesso diretto alle risorse garantito di norma agli amministratori di sistema, leggere e alterare qualsiasi file presente sul disco fisso. Potrebbe, ad esempio, creare degli utenti con poteri amministrativi per garantirsi privilegi speciali anche nel sistema operativo residente nel disco fisso.

Per fare un esempio concreto, basta che un utente qualsiasi inserisca un CD o un floppy disk contenente un sistema Linux completo (ad esempio 'Knoppix')  e avvii la macchina per ottenere accesso a qualsiasi file, sia Linux che Windows, presente sul disco fisso, compreso ad esempio il file '/etc/passwd', che in Linux contiene le informazioni sugli utenti, nel quale potrebbe modificare i propri privilegi in modo da accedere sistematicamente come amministratore di sistema.

Per garantire la sicurezza del sistema da attacchi di questo tipo e' di norma sufficiente impostare come prima periferica di avvio il disco fisso e proteggere l'accesso al BIOS con una buona password.

Un amministratore di sistema che volesse avviare un sistema attraverso un CD o un floppy sarebbe costretto a seguire questa sequenza: accesso al BIOS tramite password, impostazione del CD come prima periferica di boot, riavvio del sistema. Una volta finito di operare deve ricordarsi di ripristinare le impostazioni precedenti.  Alcuni BIOS prevedono dei menu di scelta ad accesso diretto.


Il Bootloader

Spesso si installano diversi sistemi operativi sullo stesso calcolatore, in partizioni o in dischi fissi diversi: l'utente sceglie quali sistema operativo avviare attrraverso un programma specifico, detto bootloader. E' importante che l'accesso dell'utente al bootloder sia limitato solo alla scelta del SO da avviare, e non alla configurazione dei parametri del bootloader stesso, altrimenti, passando opportuni parametri al sistema operativo, puo' facilmente avviarlo con diritti di amministratore. I prinicipali bootloader consentono di proteggere l'accesso a funzioni superiori con password. Per alcuni, come lilo (LInux LOader), il piu' diffuso bootloder per Linux, la password e' scritta in chiaro nel file di configurazione '/etc/lilo.conf'. Questo e' un grave punto di debolezza. Altri, come GRUB (GRand Unified Bootloader), consentono una cifratura della password. Nel file di configurazione risiedono tutte le informazioni che permettono di avviare i sistemi operativi. Di solito risiedono nel disco fisso, ma GRUB consente di consultare un file di configurazione remoto, attraverso un accesso alla rete.

Una volta avviato, il bootloader chiede all'utente di scegliere uno tra i sistemi operativi presenti. Se l'utente non opera una scelta entro un certo tempo, avvia un sistema operativo di default.



Le necessita' in ASID

L'aula didattica ASID e' composta da 80 PC dislocati in due aule con due sistemi operativi installati: Windows NT e Linux. 

Le nostre esigenze sono queste:

  1. Consentire all'utente unicamente la scelta tra Linux e Windows NT.
  2. Negare all'utente l'accesso ad altre periferiche di avvio.
  3. Consentire all'amministratore l'accesso ad altre periferiche di avvio.
  4. Permettere di scegliere centralmente il sistema operativo di default, specie per consentire gli aggiornamenti centralizzati.


Attraverso la protezione con password dell'accesso al BIOS e l'installazione del bootloader LILO era possibile soddisfare i punti dall1 al 3, ma non il quarto.

Inoltre LILO ha uno svantaggio grave: ogni modifica al file di configurazione richiede l'esecuzione del programma LILO da Linux. Ogni errore commesso rende LILO non funzionante.


Non e' possibile avviare contemporaneamente tutte la macchine delle aule con il SO linux se non tramite il riavvio manuale di ogni macchina nelle aule nella modalita' Linux. Questo rende particolarmente penoso l'aggiornamento simultaneo di Linux su tutte le macchine. Solo potendo scegliere centralmente quale sistema operativo di default avviare e' possibile procedere all'aggiornamento simultaneo di tutte le macchine.

Il bootloder GRUB, che puo' accedere a un file di configurazione presente in un server di rete, consente di scegliere il sistema operativo che si avviera' di default, ha permesso di soddisfare quest'ultima esigenza.

La soluzione.

Su ogni macchina e' stato installato il bootloader GRUB con un file di configurazione locale, residente su disco, aggiornabile attraverso l'avvio del SO Linux.

Al boot questo propone 4 scelte:

  1. passaggio alla configurazione da rete (default)
  2. boot Linux
  3. boot NT
  4. boot da floppy disk (protetto da password)

In mancanza di scelta dell'utente, dopo 5 secondi viene letto tramite il protocollo tftp il file di configurazione di rete da un server centralizzato, il quale puo' essere aggiornato dall'amministratore molto agevolmente. Attualmente e' impostato per offrire per 20 secondi all'utente la scelta tra Linux e NT, con l'avvio di NT in mancanza di scelta. Se per esigenze amministrative e' richiesto avviare Linux o un altro sistema operativo, questo si puo' fare aggiornando un solo file su un server.


La lettura del file di configurazione di GRUB dalla rete offre il destro a un possibile attacco alla sicurezza sostituendosi al server 'ufficiale' della rete e offrendo un file 'addomesticato'. Tuttavia l'operazione dovrebbe essere effettuata in ambienti normalmente sorvegliati e richiederebbe la manipolazione dei cablaggi di rete. Si ritiene che non vi sia motivo per un utente assennato di correre un rischio cosi' elevato per dei benefici marginali. In ambienti non sorvegliati e con motivazioni piu' spinte non si consiglia l'uso di questo metodo. Va ricordato che se l'utente finale ha accesso fisico diretto alla risorsa questa non e' realmente difendibile.


Dettagli tecnici

Ia versione  0.93 di grub e' stata compilata con l'opzione:


./configure --enable-3c90x --enable-3c595 --enable-diskless --enable-pci-dir


Per installarlo e' sufficiente il comando


grub-install /dev/hda


Ogni modifica al file di configurazione non richiede, come lilo, la reinstallazione del programma.

Il file di configurazione LOCALE (/boot/grub/menu.lst) di GRUB e' il seguente:


password --md5 $1$P9T.l/$fNrKK88UUNo63Kq4JeQTd/

default 0

fallback 1

timeout 30

# -- 0

title Configmenu via rete 

        ifconfig --address=147.162.35.222 --mask=255.255.255.0 --server=147.162.

35.42

        dhcp --with-config-file

        configfile (nd)/tftpboot/menu.lst


#-- 1 --

title  Linux GNU/Debian

        root (hd0,1)

        kernel /boot/vmlinuz-2.2.20      root=/dev/hda2

        boot


#-- 2 --

title  Windows NT

        unhide (hd0,0)

        rootnoverify (hd0,0)

        makeactive

        chainloader +1

        boot


#-- 3  Floppy

title floppy 

        lock

        rootnverify (fd0)

        chainloader +1

        boot


Le righe riguardanti la configurazione di rete sono nella sezione #-0:

la prima fornisce un indirizzo IP temporaneo alla macchina,

la seconda richiede un indirizzo IP ad un server DHCP, la terza richiama il file di configurazione presente sul server tftp.


Il file di configurazione offerto dal server tftp con il nome /tftpd/menu.lst e' il seguente:


#-----

default=1

timeout=10

password --md5 $1$nsokk/$0lK5bJOI8usEdKmPZl/0cw1

color cyan/blue white/blue


#splashimage=(nd)/tftpd/splash.img



#-- 0 -- Linux

title           Linux GNU/Debian

        root (hd0,1)

        kernel /boot/vmlinuz-2.2.20      root=/dev/hda2


#-- 1 -- NT

title           Windows NT

        unhide (hd0,0)  

        rootnoverify (hd0,0)

        makeactive

        chainloader +1


#-- 2 -- Floppy

title floppy (solo tecnici)

        lock

        rootnverify (fd0)

        chainloader +1


#-- 3 -- Network

title rete (solo tecnici)

        lock

        root (nd)

        kernel --no-mem-option /tftpboot/vmlinuz-2.4.16-mosix root=/dev/hda2  initrd /tftpboot/initrd-2.4.16-mosix.img

#--

boot


L'ultima opzione serve a caricare un kernel linux diverso, via rete, ad esempio per avviare un cluster Mosix senza la necessita' di installare un kernel nel disco fisso.

L'opzione lock attiva l'accesso alla relativa voce del menu tramite la password.

La stringa 'password' va generata con il comando 


  grub-md5-crypt


e inserita nel file menu.lst con copia-incolla.


Per la spiegazione delle voci standard relative al boot dei sistemi operativi si rimanda alla documentazione di GRUB.


Biblio-Webografia

GRUB: <http://www.gnu.org/software/grub/> Homepage

  <http://www.hurd.it/docs/trad/grub-faq/HTML/grub-faq.html> faq in Italiano

LILO:   <http://home.san.rr.com/johninsd/pub/linux/lilo/> Homepage

  <http://freshmeat.net/projects/lilo/?topic_id=139> Sviluppo.

  <http://www.pluto.linux.it/ildp/HOWTO/mini/LILO.html> HOWto in Italiano.

5