Autore: Mirko Venieri
Collaboratori: Pietro Ventura
Introduzione
Nel presente documento verranno descritte le modalità di partizionamento e gestione di un filesystem Unix-Like, ottimizzandone prestazioni e sicurezza di base.
Esistono svariati metodi per selezionare le modalità di suddivisione di un disco fisso, dove andrà installato un filesystem Unix-Like, come si vedrà in seguito.
In base a tale scelta possono variare notevolmente le prestazioni, sia in campo di sicurezza che di performance, dellintero sistema.
Il documento si prefigge come obbiettivo la stesura di una serie di linee guida atte a facilitare la selezione del partizionamento di sistema in base alla funzione finale del server, inoltre si tenterà di impostare una suddivisione standard valida per la maggior parte delle installazioni, che lasci comunque prestazioni e sicurezza inalterate.
La lettura del documento è utile e consigliata per qualsiasi sistemista in ambiente Unix-Like.
Per i test e le verifiche verrà utilizzata come distribuzione di riferimento la Debian GNU/Linux considerata lo standard de facto in ambito Linux.
Il documento nasce dallo studio e lapprofondimento dello standard F.H.S (File System Hierarchy Standard), la consultazione di manuali relativi a server Unix oltre alle esperienze personali dellautore.
Gli step fondamentali per poter comprendere a fondo il seguito del documento saranno così ordinati:
- Una breve storia del filesystem di Unix
- La struttura principale del filesystem
- Le directory opzionali
- La suddivisione del filesystem
- Tipi di servizi erogati
- Le modalità di partizionamento
- Migliorie alla sicurezza
- Aumentare le prestazioni del sistema
Una breve storia del filesystem di Unix.
Iniziamo dando un breve accenno storico al filesystem di Unix, che aiuterà a comprendere perché i sistemi in questione possono sembrare così ostici allocchio di un nuovo utente che si avvicina per la prima volta a tale struttura.
In origine i sistemi Unix erano installati unicamente su grossi mainframe che potevano contenere solo pochi kilobyte di informazioni, ciò nonostante i prezzi per questa apparecchiature, (in gergo del ferro) erano elevatissimi, parliamo degli anni 50, un sistema così costoso doveva essere un investimento a lunghissimo termine, sia per le società che per gli istituti governativi. Tale situazione portò ad affrontare uno studio rivolto alla soluzione del problema gestione ottimizzata dell’ hardware.
La soluzione più logica, visto che uno dei componenti più costosi e soggetti a guasti erano i dischi fissi, fu quella di dare la possibilità al sistema operativo di vivere allinterno di un filesystem modulare e di facile manutenzione, riducendo al minimo i tempi di inattività delle macchine.
Ma quale soluzione così innovativa poteva risolvere questi problemi?
Semplicissimo la suddivisione del filesystem in una gerarchia di directoryes autonome e quasi tutte montabili e smontabili a sistema attivo direttamente da software.
Si pensò così di suddividere la gerarchia del filesystem in zone con diverse caratteristiche, directories con un elevato grado di staticità, altre che necessitavano di frequenti aumenti di spazio, altre ancora che venivano pesantemente utilizzate dal sistema per letture e scritture dati.
La soluzione adottata risolveva non solo il problema finanziario, ma anche una serie di problemi secondari:
- Maggiore flessibilità al sistema
- Una più facile manutenzione
- Aggiornamento modulare
- Riduzione dei fermi macchina
- Maggiore sicurezza e stabilità
Nacque in quegli anni la struttura del filesystem Unix che conosciamo ancora oggi.
La possibilità di montare e smontare partizioni in tempo reale per poterle aggiornare o sostituire se guaste, rese la struttura così solida da essere utilizzata, con qualche modifica ed affinamento, per più di 40 anni.
Infatti, può capitare che durante la compilazione di particolari software venga richiesto di creare cartelle o link per questioni storiche non più utilizzate dal cuore del sistema, ma ancora utili per applicativi che sono stati realizzati parecchi anni addietro, ad esempio sendmail, emacs ecc.
La struttura principale del filesystem.
Tutti i sistemi Unix oggi esistenti, che siano essi commerciali o liberi, utilizzano la stessa gerarchia di base per le loro installazioni, fanno eccezione alcune distribuzioni di Linux, ottimizzate per altri scopi.
Di seguito riporto un elenco, il più completo possibile, delle directories oggi presenti nei moderni filesystem, specificando la funzione di ogni directory, non entrando nel dettaglio delle sotto gerarchie di secondo livello:
|
La directory radice (root directory). Comandi fondamentali per gli utenti di sistema. File statici per il caricamento del sistema. Sistemi operativi in fase di sviluppo e test. (Aggiunta dall’autore Opzionale) Tutti I device di sistema. File statici di configurazione del sistema. Home directory degli utenti. (Opzionale) Librerie essenziali condivise dai programmi. Librerie di architetture diverse condivise dai programmi. (Opzionale) Mount point per i dispositivi rimovibili cdrom, dvd, cdrw, usb ecc. Mount point per filesystem esterni e temporanei. Applicativi non standard non necessari al sistema. Directory dellutente root, alcuni utilizzano la / a tale scopo. (Opzionale) Comandi essenziali per la gestione del sistema. Server non standard per servizi erogati dal sistema. (Opzionale) Riservato a filesystem montati via rete. (Aggiunto dall’autore Opzionale) File temporanei degli utenti e degli applicativi. (Opzionale) Gerarchie secondarie non vitali per il sistema. Tutti i dati variabili generati dal sistema. |
Per maggiori informazioni si consiglia di consultare il documento Filesystem Hierarchy Standard, non sono stati riportati tutte cartella generate realtime dal sistema durante il suo funzionamento, /proc, /sys, /lost+found e possibili altre.
Le directory opzionali.
Come risulta dallelenco sopra riportato alcune directories sono opzionali, cioè non sono necessarie per il corretto funzionamento di un sistema di base Unix.
Tali cartelle sono comunque presenti in quasi la totalità delle installazioni, ma la loro presenza non e obbligatoria.
Altre cartelle invece come opt, media, srv, lib[tipo] inserite da poco nello standard, sono utilizzate raramente, nelle installazioni di default.
Inoltre lo standard suggerisce di non creare le cartelle se non sono utilizzate o necessarie per gli applicativi installati sul sistema.
La suddivisione del filesystem.
Come si evince dalle brevi descrizioni storiche, il filesystem e divisibile in alcune macrocategorie, in particolare in 4 tipologie differenti, directories statiche, variabili, condivisibili e non condivisibili.
Per semplificare tale suddivisione si ricorre ad un piccolo schema d’esempio che ne chiarifica la struttura:
condivisibile | non condivisibile | |
statiche | /usr /opt |
/etc /boot |
variabili | /var/mail /var/spool/news |
/var/run /var/lock |
Quindi le cartelle /usr ed /opt possono essere condivise e sono di tipo statico, cioè contengono dati che non cambiano a sistema attivo senza lintervento di un amministratore o un utente.
Mentre le cartelle /var/mail e var/spool/news sono sempre condivisibili ma non sono statiche, i dati al loro interno possono crescere o diminuire in base al carico di lavoro del server, senza lintervento da parte di un utente.
Idem per le cartelle /etc e /boot che però non possono essere condivise perché contengono dati sensibili.
In fine /var/run e /var/lock che variano la loro dimensioni sempre restando dati non condivisibili.
Tale schema e applicabile alla maggior parte delle directory presenti in un sistema Unix.
Quanto detto in questo breve paragrafo e un primo approccio alle modalità di partizionamento di un sistema Unix, e introduce una delle possibili modalità di partizionamento del filesystem in base alla funzione finale del sistema.
Si fa notare inoltre che le directory che non variano a sistema attivo, potrebbero essere montate in sola lettura sui server di produzione per aumentarne la sicurezza, come si vedrà di seguito.
Tipi di servizi erogati.
Per poter preparare una strategia di partizionamento ottimizzata e necessario, come prima cosa, capire quale attività svolgerà il sistema.
Non è pensabile utilizzare lo stesso partizionamento per un server di posta o per una workstation grafica, le loro funzioni sono così differenti che si potrebbero verificare riduzioni nelle prestazioni globali del sistema.
E’ però possibile creare un partizionamento standard di base che sia facilmente modificabile a seconda delle proprie esigenze.
Andiamo a vedere quali sono alcuni tipi di servizi che richiedono una particolare attenzione:
- Mail server.
- Ftp server.
- Server log hub.
- Server di stampa.
- Workstation multimediale.
- Sistemi per sviluppatori.
- Web server.
- Ambienti multiutente.
Ovviamente la lista sopra riportata e solo una minima parte delle possibili applicazioni di un sistema Unix, ma le loro diversità si prestano allo scopo di spiegare le modalità di partizionamento.
Le modalità di partizionamento.
Iniziamo ora a spiegare le modalità di partizionamento del sistema di base per poi procedere via via alla gestione di sistemi più particolari.
Attenzione qualsiasi operazione sul filesystem va affrontata con molta prudenza e solo dopo aver fatto un backup totale del sistema, il più piccolo errore potrebbe causare la perdita di tutti i vostri dati.
Come detto in precedenza i nostri test e le nostre installazioni, verranno effettuate sulla distribuzione Debian GNU/Linux, compatibile con lo standard F.H.S, di seguito riportiamo un elenco delle principali directories presenti in una installazione standard:
|
La directory radice (root directory). La directory attuale. La directory precedente. Comandi fondamentali per gli utenti di sistema. File statici per il caricamento del sistema. Tutti I device di sistema. File statici di configurazione del sistema. Home directory degli utenti. (Opzionale) Directory del ram file system per il caricamento dei moduli al boot. Librerie essenziali condivise dai programmi. Contiene informazioni su files cancellati e inode danneggiati. Mount point per i dispositivi rimovibili cdrom, dvd, cdrw, usb ecc. Mount point per filesystem esterni e temporanei. Applicativi non standard non necessari al sistema. Directory virtuale per informazioni sul sistema runtime. Directory dellutente root, alcuni utilizzano la / a tale scopo. (Opzionale) Comandi essenziali per la gestione del sistema. Server non standard per servizi erogati dal sistema. (Opzionale) Directory virtuale per informazioni sul sistema runtime. File temporanei degli utenti e degli applicativi. (Opzionale) Gerarchie secondarie non vitali per il sistema. Tutti i dati variabili generati dal sistema. |
Sono stati omessi i link cdrom initrd.img e vmlinuz che vengono utilizzati per l’installazione il boot da sistema e non sono standard, inoltre tali link puntano direttamente ai file in /boot e alla cartella /mnt/cdrom , dove effettivamente dovrebbero risedere, solitamente tali link vengono rimossi dopo aver modificato i necessari file di configurazione in /etc/fstab /boot/grub/menu.lst.
Si fa notare che le directory /proc e /sys sono create direttamente dal sistema a runtime, oltre /lost+found generata in fase di formattazione del filesystem, approfondiremo di seguito la funzione di tali directories.
- /boot – File statici per il caricamento del sistema.
Per iniziare e sempre meglio separare anche la partizione di /boot per questioni di portabilità, infatti su alcuni sistemi, con dischi di grosse dimensioni e bios particolarmente vecchi, tale partizione deve essere entro i primi 1024 cilindri del disco per permetterne la lettura in fase di avvio, oltre a ciò su alcune architetture la partizione di boot dovrà essere obbligatoriamente di tipo fat o file system similari per poter essere utilizzata durante l’avvio del sistema.
- / – La directory radice.
Dovrà obbligatoriamente essere presente e la partizione di root o radice rappresentata con il solo / da non confondere con la /root dove solitamente risiede la home directory dell’utente root, lamministratore del sistema, come precedentemente menzionato le directory /proc e /sys sono generate runtime dal kernel e contengono solo dati relativi alla configurazione e allo stato del sistema, tali directory non esistono sul disco ma solo in ram, mentre la directory /lost+found viene creata durante la fase di formattazione del filesystem e generata ad ogni check se non presente, al suo interno andranno inserite tutte le anomalie riscontrate durante il controllo del filesystem oltre ad eventuali inode corrotti e recuperati, ovviamente in ogni partizione formattata verrà generata la cartella /lost+found, tutte queste directory sono proprie dei sistemi con kernel Linux e non sempre presenti in altri ambienti.
- /tmp – File temporanei degli utenti e degli applicativi.
Altra cartella da tenere su una partizione separata e la /tmp dove vengono inseriti tutti i dati temporanei che gli applicativi e i demoni generano durante la loro esecuzione, quindi rimangono nella tmp solo per la durata di un determinato processo e poi vengono eliminati.
Attenzione, al riavvio e buona norma eliminare tutto il contenuto di tmp per ragioni di sicurezza.
- swap – Memoria virtuale.
La memoria virtuale o partizione di swap che conterrà parte delle elaborazioni che la ram non riesce a gestire, ottima strategia sarebbe posizionarla su un canale ed un disco completamente autonomi per velocizzarne gli accessi in lettura e scrittura, il tutto verrà poi bilanciato dal kernel stesso.
- /home – Home directory degli utenti.
La directory /home è sempre meglio separarla dal resto del sistema per rendere possibile eventuali update per mancanza di spazio o semplicemente evitare problemi di saturazione dellintero filesystem, in particolare sui sistemi multiutenza.
- /usr – Gerarchie secondarie non vitali per il sistema.
Nella cartella /usr vengono inseriti quasi la totalità dei programmi standard installati nei sistemi Unix è quindi una partizione che necessita di spazio elevato per contenere i binari e sorgenti degli applicativi, compresi quelli relativi al kernel.
- /var – Tutti i dati variabili generate dal sistema.
Tutti i dati dinamici e variabili, mail, log, siti web, cache ecc. verranno inseriti nella cartella /var il che comporta lassegnazione di una buona quantità di spazio alla partizione o meglio ancora un disco più performante per ottenere prestazioni migliori.
- /var/log – I log provenienti dall’host e dai sistemi remoti.
In fine e sempre consigliato separare la zona dei logs di sistema che tendenzialmente tende a crescere, autonomamente, fino a saturare lo spazio disponibile creando possibili problemi se non controllata.
Altre directory che potrebbero essere candidate a risedere su partizioni separate sono le seguenti:
Test nuovi applicativi non standard:
- /opt – Contiene nuovi applicativi non ancora standardizzati che non erogano servizi.
Test nuovi demoni non standard:
- /srv – Nuovi demoni non standard che erogano servizi ad altri sistemi via rete o altro.
Macchina da compilazione:
- /usr/src – Contiene tutti i sorgenti per le compilazioni ed i binari una volta terminato.
Workstation multimediale:
- /usr/local – Contiene tutti i binari installati dai pacchetti Debian.
Server posta:
- /var/mail – Vi vengono inserite tutte le code delle mail.
Server ftp:
- /home/ftp – Conterrà tutti i dati relativi ai siti ftp.
Server di stampa:
- /var/spool/lpd – Sono inserite tutte le code di stampa.
Server web:
- /var/www – Contiene tutti i dati relativi ai siti web comprese le pagine.
Server sql:
- /var/lib/[db] – Dove andranno inseriti i database dei vari engine sql.
Server proxy:
- /var/spool/squid – Contiene tutti i dati relativi salvati dal cache server (proxy server).
E sempre consigliato creare le partizioni sopra elencate solo se gli applicativi o i serventi relativi sono installati e hanno scopo primario nel sistema, è ovviamente inutile creare una partizione /var/lib/[db] se il sistema non ha un database installato o se il db installato e solo di marginale importanza.
Lelenco di configurazioni riportato sopra e solo una parte delle possibili configurazioni che si potrebbero trovare in ambiente reale, ma seguendo lo schema di base e variando le percentuali utilizzate o addirittura il numero di dischi, con raid, lvm o evms, si può costruire qualsiasi tipologia di server, la scalabilità e quasi illimitata.
Tutte le configurazioni particolari vanno studiate di volta in volta in base alle specifiche esigenze, e la funzionalità finale del sistema installato.
Dimensionamento delle partizioni.
Uno dei problemi fondamentali, durante la fase di progettazione, è stabilire a priori le dimensioni che dovranno avere le varie partizioni, dato che dopo aver preparato il supporto di base su cui poggiare il filesystem non sarà banale modificarlo.
Vediamo ora come impostare le dimensioni percentuali che dovranno avere le singole partizioni, queste percentuali sono derivate leggendo documenti relativi a sistemi Unix in particolare sistemi Linux e BSD oltre allesperienza personale maturata nel tempo.
I modi per procedere possono essere due fondamentalmente:
- Fingere di avere sempre un sistema di base minimo a dimensione fissa e lo spazio in esubero suddividerlo in base alle funzionalità del sistema in esame, o lasciarlo per futuri scopi.
- Assegnare una certa percentuale per ogni partizione che varia con il variare delle dimensioni del supporto sul quale andrà installato il sistema.
Di seguito verrà riportato il partizionamento di base, e relative dimensioni per partizione consigliate da Debian, grazie al quale il nostro sistema riesce e garantire una maggiore sicurezza oltre a migliori performance, tali partizioni andranno sempre create ad esclusione di particolari ambienti, quali sistemi embadded, pc portatitili, workstation grafiche, workstation per l’office automation, apparati con particolari caratteristiche hardware o richieste non standard che verranno trattati, almeno in parte, nel seguito del documento.
|
File necessari all’avvio del sistema (10MB). Sistema di base (150-250MB). File e dati temporanei degli applicativi e dei serventi (40-100MB). Memoria virtuale (2 Volte la RAM). Home directory degli utenti (128-512M per user). Applicativi non standard (512MB-1GB a secondo degli applicativi). Servizi non standard erogati via rete o altri metodi (512MB-1GB secondo i demoni). Applicativi standard binari e sorgenti di sistema (3-6GB). Programmi particolari locali del sistema (1-3GB). File dinamici generati dagli applicativi (40MB-3GB). Log di sistema o log server remoti (256-512MB). |
Di seguito riportiamo due esempi che illustrano entrambi i modi di procedere, evidenziando la validità di entrambe le scelte lasciando decidere al sistemista le proprie preferenze.
Un sistema server di base con tutti i servizi più comuni installati occupa circa 500MB di spazio, senza server X, installando quest’ultimo con un windows manager si può arrivare tranquillamente a 1,5/3GB di spazio occupato, e ovviamente sconsigliato installare un sistema a finestre in ambiente di produzione se non esplicitamente richiesto come funzionalità, mentre workstation grafiche ad uso generico possono arrivare fino a 5-6GB.
Supponiamo la peggiore delle ipotesi e immaginiamo di dover installare un sistema X server che inoltre eroghi servizi mail, database, web, ftp, proxy, stampa oltre all’accesso remoto da parte di utenti e sviluppatori, il partizionamento di base sarà sempre il seguente:
|
100MB File necessari all’avvio del sistema. 3GB Necessario per il funzionamento base del sistema. 2GB Conterrà i file temporanei degli applicativi e dei demoni. 2,5 volte la dimensione della ram, meglio se disposta su un disco separato. [X]GB Varia con il numero di utenze e lo spazio a loro riservato. [X]GB Dipende dal numero di applicativi non standard. [X]GB Come per opt ma per i demoni che erogano servizi. 2GB Contiene tutti i binari che gli utenti possono. 2GB Conterrà tutti gli applicativi standard degli utenti. 1GB Sono presenti tutti i documenti di base del sistema operativo. [X]GB Repository per tutti i sorgenti del sistema. 2GB Contiene tutti i dati dinamici. 3GB contiene i log di sistema e le relative rotazioni. [X]GB Saranno archiviate tutte le pagine navigate dagli utenti. [X]GB dipende dal numero di utenti che utilizzeranno il sistema. [X]GB Dipende dal numero di utenti che utilizzano il print server. [X]GB dipende dal numero di web inseriti. [X]GB dipende dal numero e dalla dimensione dei db installati. |
Come si può notare il sistema di base ha sempre le stesse dimensioni fisse e le partizioni relative a servizi particolari vanno dimensionate in base alla mole di lavoro che il sistema dovrà sostenere, è ovvio che questo è solo un esempio e che non sono solo le partizioni che vanno correttamente dimensionate, ma si riesce già a capire che le 8 partizioni di base rimangono sempre fisse per un totale di circa 15GB oltre allo spazio necessario per la partizione di swap, supponendo di possedere 512MB di ram fisica calcoliamo circa 1,5GB di spazio per la memoria virtuale, si ricorda che tale area non dovrebbe mai superare i 2GB per ragioni di compatibilità e performance se tale valore viene superato e sempre meglio aggiungere ram fisica e lasciare fisso a 2GB la dimensione della swap area o aggiungere altre partizioni sempre da 2GB dette spindle, quindi il totale diventerebbe circa 17GB ben superiore alla quantità minima necessaria al sistema di base precedentemente menzionata cioè 3GB.
Le dimensioni sopra riportate sono sempre riferite a server di buone capacità ma possono essere notevolmente ridotte in base al tipo di installazione.
Ciò ci fa capire che le partizioni delle quali non conosciamo a priori lo spazio necessario saranno comunque facilmente gestibili, inserendo dischi di dimensioni consone alla mole del servizio da erogare o utilizzando dischi logici e dinamici , lvm, evms modificabili per dimensione senza compromettere il sistema di base. Lo spazio sopra riportato ,17GB, è oggi una quantità irrisoria e anche il più piccolo sistema server dispone di tali capacità.
Inoltre se avessimo a disposizione un disco con capacità inferiore a 10-20GB si ricorda che l’installazione di base raramente supera i 500MB in modalità testuale e i 3GB in ambiente grafico, quindi in realtà lo spazio disponibile per poter avere un sistema base funzionante sarà facilmente ricavabile.
Passiamo ora a valutare il secondo metodo detto a percentuali, ovvero non si danno delle dimensioni fisse alle partizioni di base ma si calcolano le dimensioni conoscendo a priori lo spazio disponibile sul supporto nel quale andrà installato il sistema.
Supponendo di avere a disposizione un disco fisso sata da 30GB, un ulteriore disco eide da 10GB ed in fine un disco scsi da 150GB e dover installare un sistema che debba erogare i seguenti servizi:
web, ftp, proxy si procede come segue:
Sul disco eide da 10GB si installerà il sistema di base, sul disco sata andrà inserita la /home directory ed in fine il servizi web e proxy suddivisi sul disco da 150GB scsi.
Si evidenzia che tali percentuali non sono fisse ma possono variare in base alle caratteristiche del sistema che si dovrà installare ed è per questo che si inseriranno dei range di percentuale che dovranno essere presi in considerazione caso per caso, mantenendo però costante le partizioni di base.
Procediamo ora a mostrare il risultato dall’esempio sopra selezionato.
|
1-10% Necessario per il funzionamento base del sistema (eide). 0,1-0,5% Tutti i file necessari al boot del sistema (eide). 1-5% Conterrà i file temporanei degli applicativi e dei demoni(eide). 2,5 Volte la dimensione della ram, meglio se disposta su un disco separato(sata). 5-100% il numero di utenze va alternato all’utilizzo delle quote (sata). 1-50% In base ai software opzionali non standard installati(sata). 1-50% Come per opt ma per i demoni che erogano servizi.(sata). 10-40% Contiene tutti i binari che gli utenti possono (eide). 1-5% Conterrà tutti gli applicativi standard degli utenti (eide). 1-10% Sono presenti tutti i documenti di base del sistema operativo (eide). 2-30% Contiene tutti i dati dinamici (eide). 3-10% Contiene i log di sistema e le relative rotazioni (eide). 10-50% Saranno archiviate tutte le pagine navigate dagli utenti (scsi). 10-50% GB Dipende dal numero di web inseriti (scsi). |
Di seguito riportiamo lo schema base per il partizionamento in diverse situazioni, non vengono volutamente riportate le dimensioni per partizione che possono variare notevolmente da installazione ad installazione.
Server Generico:
|
File necessari all’avvio del sistema. Sistema di base. File e dati temporanei degli applicativi e dei serventi. Memoria virtuale. Home directory degli utenti. Applicativi non standard. Servizi non standard erogati via rete o altri metodi. Applicativi standard binari e sorgenti di sistema. Programmi particolari locali del sistema. File dinamici generati dagli applicativi. Log di sistema o log server remoti. |
Workstation Grafica:
|
File necessari all’avvio del sistema. Sistema di base. Memoria virtuale. Applicativi standard binari e sorgenti di sistema. File dinamici generati dagli applicativi. |
Workstation di sviluppo:
|
File necessari all’avvio del sistema. Sistema di base. File e dati temporanei degli applicativi e dei serventi. Memoria virtuale. Applicativi non standard. Servizi non standard erogati via rete o altri metodi. Applicativi standard binari e sorgenti di sistema. Programmi particolari locali del sistema. File dinamici generati dagli applicativi. Log di sistema o log server remoti. |
Pc portatile:
|
File necessari all’avvio del sistema. Sistema di base. Memoria virtuale. Area di stoccaggio dati e backup informazioni utente. |
Apparati embadded:
|
Sistema di base. |
Per gli apparati embadded non sono necessarie particolari tipi di partizionamento, l’unica partizione che potrebbe essere presente e la radice, questi apparecchi possono addirittura completamente stravolgere la struttura del filesystem omettendo la maggior parte delle normali directory riducendo il sistema al minimo ma in grado di avviarsi, molto spesso non e neppure presente un disco fisso ed il filesystem viene generato e caricato da memorie flash direttamente in ram.
Migliorie alla sicurezza.
Anche se a primo impatto il filesystem sembrerebbe essere ininfluente dal punto di vista della sicurezza di sistema, un partizionamento non corretto potrebbe dare la possibilità ad un malintenzionato di tentare un attacco D.O.S (Denial of services).
Gli attacchi d.o.s sono i più facili da realizzare, ed il loro scopo, come dice il nome stesso, e di provocare cessazione dei servizi erogati dal server attaccato.
Uno dei modi più banali per portare a termine tale attacco, ad esempio, è di saturare la banda a disposizione del sistema, oppure riempire completamente il filesystem, fino alla completa saturazione della macchina, ad esempio inviando una grossa mole di mail ( spam ), su un server non correttamente partizionato o senza controlli sulle quote disponibili agli utenti potrebbe saturare lintero filesystem rendendo il sistema di posta inutilizzabile.
Altro attacco e la possibilità di inserire degli script in particolari zone del filesystem per sostituire dei comandi standard di sistema con delle versioni modificate, che oltre ad eseguire la richiesta effettuata aprono connessioni o peggio ancora distruggono file o inviano dati personali allesterno, solitamente questi file sono inseriti in cartelle con particolari permessi come ad esempio /tmp, e infatti buona norma vuotare completamente la directory /tmp ad ogni riavvio del sistema.
Separando le partizioni si ha la possibilità di montare certe zone sensibili e indispensabili per il sistema in modalità di sola lettura, evitando che si possano sovrascrivere i comandi fondamentali con copie, dei binari originali, modificate.
E’ inoltre possibile evitare problemi con applicativi, che se non seguiti da politiche di archiviazione ben controllate o bug inaspettati, potrebbero saturare il sistema dallinterno.
Inoltre in situazioni particolari il partizionamento protegge anche da errori umani, un utente che erroneamente elimina una parte del filesystem, non necessita della completa reinstallazione del sistema ma semplicemente del recupero dal backup della sola partizione eliminata.
Altra configurazione grazie al partizionamento è la possibilità di montare filesystem formattati in modo diverso, ad esempio utilizzare un normale ext2, supportato di default da qualsiasi kernel, per la directory radice / ed una formattazione con supporto journalling nelle zone dove vengono eseguiti gli applicativi, evitando inutili check di sistema e perdite di dati, in caso di shutdown non corretti, lasciando però la possibilità di accedere al sistema in caso di necessità con un normale floppy di avvio.
Altra possibilità è di creare una partizione chroot dove poter eseguire codice pericoloso o chiudere utenti con determinati diritti evitando che escano da tale zona, ricreando un filesystem minimale che consenta agli utenti di eseguire solamente i software e loro disposizione ed evitando che possano fare qualsiasi cosa al di fuori di tale gabbia, ad utenti ed applicativi tale configurazione risulta completamente trasparente.
Ultima possibilità data dal partizionamento è di creare partizioni di sistema completamente criptate e decriptate runtime dal kernel, garantendo così una sicurezza quasi totale dei dati anche da accessi diretti al supporto in caso di furto, e inoltre possibile proteggere determinate zone del filesystem, che contengono dati sensibili, lasciando la solita radice / sempre in chiaro per potervi accedere in caso di necessità ed in fine si può scegliere, di criptate anche la partizione di swap, evitando così che un malintenzionato possa attraverso appositi programmi, debugger, leggerne il contenuto e risalire a dati riservati, password e pezzi di codice, si evidenzia che lo swap è utilizzato per il salvataggio temporaneo dei dati che transitano dalla ram quando questa è satura, tale partizione pur non essendo obbligatoria, potrebbe essere creata come un normale file su disco fisso,diminuendo le performance riduce ulteriormente la sicurezza del sistema, infatti se messa in un file potrebbe essere copiata per recuperarne informazioni importanti come sopra menzionato.
Aumentare le prestazioni del sistema.
Giocando con il partizionamento e anche possibile migliorare le prestazioni di sistema.
Come esempio di base si riporta le modalità di gestione della partizione di swap.
In situazioni particolari, grosse quantità di compilazioni oppure una notevole mole di applicativi, è buona norma destinare un bus e più dischi alla partizione di swap, il kernel stesso penserà al bilanciamento dei carichi, non influenzando il bus di controllo dei dischi dove vengono eseguite le normali operazioni di I/O.
Altra miglioria linserimento in una macchina con bus standard a basso costo ( ide, eide, ecc ) di una serie di dischi scsci in raid, lvm o evms ecc, formattando le unità logiche con filesystem , jfs, xfs per aumentare le performance nelle operazioni di I/O e riducendo i costi dovuti allacquisto di hardware ad alte prestazioni dove non necessario.
E’ inoltre possibile testare nuove installazioni di sistemi operativi diversi, sempre della famiglia Unix, in partizioni separate e di facile sostituzione con dischi e supporti a basso costo, potendo così utilizzare lo stesso hardware sia come piattaforma di produzione che di sviluppo il tutto con la massima tranquillità.
Conclusioni.
Le situazioni dove un partizionamento di base ben progettato possono essere molto vantaggiose sono molteplici, e qui ne sono state descritte solo alcune.
Chiudiamo il documento ricordando che le informazioni sopra riportate sono solo dei suggerimenti e non un must da seguire in ogni occasione.
Per tutti coloro che si domandano perché scrivere un documento per un argomento così banale, vorrei ricordare che se una casa poggia su solide fondamenta sarà sempre più difficile abbatterla.
Per qualsiasi miglioria o critica al documento e sufficiente inviare una mail a Mirko Venieri, tutte le critiche, se costruttive, sono ben accette.
Di seguito riportiamo per completezza un elenco dei siti e dei documenti utilizzati per realizzare il presente testo.
Siti Consultati.
Sito ufficiale Debian: Linux security com: Sito ufficiale FreeBSD: Linux documentation Project: Italian documentation project: |
http://www.debian.org/ http://www.linuxsecurity.com/ http://www.freebsd.org/ http://tldp.org/ http://it.tldp.org/ |
Documenti consultati.
Man page del sistema Debian GNU/Linux
apt howto
Guida a dselect per principianti
Introduction to Backing Up and Restoring Data
Introduction to Intrusion Protection and Network Security
Introduction to Physical Security and Security of Services
Introduction to Securing Data in Transit
Advanced BashScripting Guide
The Debian GNU/Linux FAQ
EVMS User Guide
Installazione di Debian GNU/Linux.
La guida Debian
The Linux System Administrator’s Guide