Reti LAN in pratica: la configurazione Vediamo insieme come configurare una rete LAN, impostare indirizzi IP e tabelle di instradamento dei pacchetti e, infine, condividere la connessione ad interne!
Francesco
Sportolari
<f.spDrtolari@linuxpratico.com>
I networking è sicuramente uno dei punti di
forza di Linux. Con il tempo e con l'evolversi della tecnologia delle reti di computer, lo stack
di protocolli TCP/IP incluso nel kernel Linux è matu
In base alla distanza le reti si dividono in LAN (Locai
rato notevolmente, fino a raggiungere la sua quarta
Area Network), che sono reti di solito localizzate in
versione, denominata NET-4.
un singolo edificio e quindi coprono un raggio
Molte sono state le novità introdotte, a partire da
abbastanza breve, o WAN (Wide Area Network), che
Netfilter, un potente firewall (ed il relativo comando
coprono un raggio maggiore (anche da una parte
iptables), fino ad arrivare alla suite di comandi
all'altra dell'oceano).
iproute2 (ip e te) che permette di utilizzare funzio
Attualmente lo standard più diffuso per realizzare
nalità avanzate di routing nonché di effettuare
reti LAN è ethernet: le reti ethernet sono definite
traffic shaping (ripartizione dinamica della banda
reti a bus, in quanto un messaggio inviato ad uno
disponibile).
specifico host è ricevuto anche da tutti gli altri. Soltanto l'host il cui indirizzo corrisponde al destina
My Network
tario del messaggio, però, lo leggerà.
Si parla di network di computer quando più di due
Ogni interfaccia di rete ethernet ha attribuito un
macchine comunicano tra loro tramite un canale di
indirizzo univoco, chiamato MAC address, che è
trasmissione. La comunicazione fa parte della vita
composto da 12 cifre esadecimali. che garantiscono
degli esseri sociali: nell'Età della Pietra, quando il
un elevatissimo numero di combinazioni distinte.
cavernicolo A doveva invitare a cena il cavernicolo
Internet non è altro che un insieme di reti LAN con
6, batteva sul suo tamburo il messaggio che corri
nesse tra ioro tramite reti WAN, che parlano un pro
spondeva a "B, vieni a cena da me". Questo, nella
tocollo universalmente riconosciuto: il TCP/IP. Qui di
sua semplicità, è un network. Il tamburo è l'inter
seguito si vedrà come un host Linux-based possa
faccia con il network, mentre la forma dei messaggi
comunicare con
scambiati è detta protocollo.
Internet. Iniziamo una panoramica sui comandi a
Attualmente non si comunica più in questo modo,
disposizione dell'utente tramite alcuni esempi.
ma attraverso reti telematiche. In una rete telema tica come Internet, le macchine più diverse possono
qualsiasi altra macchina in
Il comando ifconffìg
comunicare tra loro se scambiano lo stesso genere
II ruolo del protocollo IP è quello di decidere la stra
di messaggi, ovvero se parlano il protocollo IR Ogni
da che i nostri pacchetti devono compiere per arri
dispositivo affacciato sulla rete sarà dotato di una o
vare a destinazione. Perché questo sia possibile è
più interfacce di rete (un tale dispositivo sarà gene
necessario che a ciascuna interfaccia di un determi
ralmente indicato con il nome di host), che utilizzano
nato host connessa alla rete sia attribuito un indiriz
i più diversi media trasmissivi: cavi in fibra ottica, in
zo IP univoco.
rame e, ultimamente, l'etere, nel caso delle reti
Cominciamo con un esempio che riguarda il caso
wireless.
più semplice: due host connessi direttamente tra loro tramite interfaccia ethernet.
L'amministratore di Shinji dovrà configurare l'inter faccia ethO dell'host in modo tale da attribuirgli l'indi asuka
shinji
rizzo IP 192 .168.0.3 con netmask 255.255.255 .0. Questo è possibile grazie al comando ifconfig:
Shinji;-* ifconfig ethO 192.168.B.3 netmask 255.255.255.0 up
IP:
Mask:
192
168.0.3
255.255.255.
IP: Hask:
192.168.0.2 255.255.255.
Due, host shinji e asul'a, connessi direttamente tra loi.i tramite interfaccia ethernet
<.
Lo stesso dovrà fare l'amministratore di Asuka, con il seguente comando:
Asuka:-*
ifconfig
ethS
192.168.0.2
netmask 255.255.255.0 up
II comando ifconfig comunica al kernel del sistema
~ operativo i parametri di configurazione per l'inter
colUsions:6 txqueuelemlOO
faccia ethO. Con la parola chiave up al termine del
RX Qytes: 3226909
comando si attiva effettivamente l'interfaccia: dopo
Intermpt:41 Base adaress:GxcO0G
[3.0 HlB)
TX b/tes:547798
(534.9 KlB)
aver premuto Invio, quindi, la macchina Linux è pronta a ricevere e ad inviare pacchetti a tutti gli
lo
Link encap:Local
Loopback
host della rete "192.168.0.x".
inet
Si può immaginare che un indirizzo IP sia qualcosa
UP LOOPflACK FtUWJING
di simile ad un numero telefonico, composto da un
RX packets:3 errors:G dropped;G ouerruns;0 frame:0
prefìsso e dal numero di utenza. Nel caso in esame,
TX packets:8 errors:G dropped:G overrufis:0 carrier:fl
il prefisso è 192.168.0, il numero di telefono di
toUiiions:0
ixqueuelen:9
Shinji è 3, mentre quello di Asuka è 2.
RX bytes:SW
(544.Q b)
addr:127.0.9.1
Kask:255.G.O.O
fflU:16436
Hetric:l
TX bytes:544
(544.9 b)
Proseguendo con le analogie, si può anche osserva
re che il prefisso telefonico è più corto in base ai
Nel caso sopra riportato sono presenti due interfac
numero degli utenti, quindi alia grandezza del
ce di rete: la prima è una scheda ethernet vera e
distretto. Ad esempio, Roma, che ha un bacino di
propria (la si può riconoscere dal nome in alto a
utenti molto grande, ha come prefisso 06, mentre
sinistra, ethO), mentre l'interfaccia lo è un disposi
Perugia, che è una città più piccola ha 075, Allo
tivo di rete virtuale che permette di utilizzare lo
stesso modo, la rete con prefisso lO.x.x.x ha intui
stack TCP/IP anche se non si possiede alcuna sche
tivamente più indirizzi disponibili per gli host rispet
da di rete. L'indirizzo 127.0.0.1, comunemente indi
to alla rete 192.168-Q.x.
cato anche come localhost, è un indirizzo che ha
Ok, ma come si fa a capire quale parte di un indiriz
significato solo all'interno del singolo host e lo si
zo IP è il prefisso di rete e quale è l'indirizzo di un
può utilizzare, ad esempio, per testare dei servizi
host? Grazie alla netmask, ovviamente: si faccia
di rete (un Server Web, ad esempio) senza necessa
riferimento al riquadro in queste pagine che appro
riamente rendere disponibili i dati dell'host al
fondisce la trattazione.
mondo intero.
Oltre a configurare un'interfaccia di rete tale
Si analizzi, ora, riga per riga il blocco di output rela
comando permette di visualizzare anche lo stato ed
tivo ad ethO. Sulla prima, oltre al nome dell'inter
i parametri impostati per tutte le interfacce presenti
faccia compaiono informazioni strettamente legate
sull'host. Se, ad esempio, su Shinji viene digitato il
alla sua tipologia. Ad esempio, nel caso della sche
comando ifconfig senza argomenti si ottiene il
da ethernet si può vedere Link encap:
seguente output:
seguito da HWaddr 00:83:93:72:99:22. Per com
ethernet
prendere queste due voci è necessario aprire una eth9
Link encap;ethernet inet addr: 192.168.0.3
piccola parentesi sullo stack di protocolli TCP/IP. Il
MWaddr 00:03:93:72:99:22
TCP/IP, e più in particolare il protocollo IP, astrae il
Bcast: 192.168.Q.255
più possibile dal mezzo di trasporto al livello inferio
Hask:255.255.255.0 LP BROADCAST R1MJING MULTICAST
OTUilSOO
re: infatti potremmo avere un modem, una scheda
Metnc:l
RX nackets:4M2 errors:Q tìropped:0 overrunsiB frame:Q
wireless. oppure una scheda token-ring. Nel caso
TX paekets:4612 errorsrG dropped:9 overrijns:0 carrieriS
di una interfaccia ethernet c'è la necessità di un
Indirizzi IR, Netmask
prefisso di rete. Come detto, in corrispondenza degli I della netmask abbiamo
e numeri binari
il nostro prefisso di rete: togliendo o aggiungendo un 1 alla
Come si è visto, indirizzo IP e netmask sono identificati da 4
netmask si incrementa o si decrementa il numero di bit che ci restano per rappresentare gli indirizzi delle singole macchine
numeri, separati da un punto, con una rappresentazione che
della rete. La metafora tra netmask e prefisso telefonico viene
viene definita dotted decimai notation {ad esempio,
ancora in aiuto: cosi come tutti i numeri di un distretto telefo
192.168.0.1).
nico sono diversi, cosi tutti gli host di un certo prefisso di rete
Questo è sicuramente un modo semplice da ricordare, ma non è l'unico di rappresentare queste informazioni: all'interno del sistema, infatti, tali dati vengono memorizzati seguendo la
devono essere diversi. Ricordate, però, che ci sono due indiriz zi che non possono MAI essere utilizzati: quello in cui la parte
host è composta da tutti Q (nel nostro esempio 192.168.6.0),
notazione binaria, che dispone delle sole cifre 0 e 1. Ogni numero decimale, che può andare da 0 a 255, viene converti-
che è l'indirizzo che rappresenta la rete stessa, e quello in cui la parte host è composta da tutti 1 (192.168.0.255). chiama
to in una sequenza di 8 bit: l'IP 192.168.0.1 diventa quindi
to indirizzo di broadcast, che ha una valenza particolare.
una sequenza di 32 bit. pari a 11000000 10101000 00000000
Attenzione, comunque, che non tutti gli indirizzi di broadcast
00000001, mentre la netmask 255.255.255.0 diventa
presentano come ultima cifra 255: ad esempio lo stesso indi
11111111 11111111 11111111 00000000.
rizzo IP 192.168.0.1 con netmask 255.255.255.240 ha come
Ormai tutte le calcolatrici scientifiche e anche la calcolatrice
indirizzo di broadcast 192.168.0.15.
disponibile sul vostro desktop Linux permette di fare questa trasformazione senza dover convenire a mano
Prefisso di rete
i numeri decimali con divisioni successive.
Host
Una osservazione importante: la netmask, a
192
168
0
1
differenza dell'indirizzo IP, ha tutti gli 1 a sini
11000000
10101000
00000000
00000001
stra, e non vi possono essere zeri che si inter pongono in questa sequenza, e sarà
proprio il
limite di questa serie di 1 ad indicare il
255
255
255
0
11111111
11111111
11111111
00000000
Indirizzo IP
Netmask
J
^
byte inviati o ricevuti. Tutto è pronto adesso per testare la prima piccola LAN sempre con l'ausilio del comando ping: Internet
Shinji:-# ping PING
-e
192.168.G.2
3
192.168.0.2
(192.168.B.2]:
56 data bytes
64 bytes
from 192.168.0.2:
ìcmp seq=l
ttl=64
time=0.2 ms
64
bytes
from 192.168.G.2:
icmp seq=2 ttl=64
time=G.2 ms
64 bytes
from 192.168.G.2:
iemp seq=3
tÌme=0.2 ms
---
3
192.168.0.2
ping
statistica
packets transmitted,
3
ttl=64
--■
packets
receiued,
round-trip min/avg/fnax = 6.2/0.2/0.2
0% packet
loss
ms
■
55.2!
Un network formato da tre host; uno dei tre. Rei, fa anche da gateway verso Internet
Un test della rete Lo scenario che è stato mostrato è il più semplice in assoluto, ma i network che è possibile incontrare
INFORMAZIONI
sono ben più complessi. In figura 2 un esempio abbastanza comune, questa
volta con tre host coinvolti: in questo nuovo dise
II comanda ping
gno è stato aggiunto un nuovo host (Rei), dotato di
Uno dei comandi più utili ad un amministratore di rete è sicuramente ping. Questo comando utilizza il protocollo
ICMP per scambiare messaggi di controllo tra l'host chia mante, che invia un echio-request e l'tiost destinatario, che risponde con un messaggio di tipo echo- reply. Nella sua
due interfacce di rete: ethO, con la quale il computer
è connesso agli altri nodi tramite uno switch, e pppo, che si suppone essere un modem (AD5L o meno non fa differenza) connesso ad internet.
forma più semplice questo comando prevede come parame
Gli indirizzi IP riportati sono relativi alle schede
tro l'indirizzo IP del host destinatario.
ethernet. Si da per scontato, inoltre, che la connes sione via modem sia già configurata e funzionante. Rei si trova in una posizione particolare, a cavallo
protocollo ausiliario, chiamato ARP, che permette di
tra due reti diverse (la nostra rete privata ed
passare dall'indirizzo IP all'indirizzo hardware della
Internet): sarà quindi suo onere permettere agli
scheda (quello evidenziato dopo la parola HWaddr) e
host della rete locale di navigare liberamente.
viceversa. La seconda riga dell'output relativo ad et ho
Per prima cosa, se già non è stato fatto, all'interfac cia ethO di Rei deve essere assegnato l'indirizzo
inet addr: 192.168.6.3
Bcast:192.168.9.25S
Masti:255.2S5.255.9
192.168.0.1.
Anche l'altro host della rete. Shinji, deve configura mostra invece l'indirizzo IP primario della nostra
re la sua scheda di rete con indirizzo 192.168.0.3.
scheda, la netmask nonché l'indirizzo di broadcast,
A questo punto è possibile testare la rete verifican-
Bcast. Questo indirizzo identifica tutti gli host del
do che i vari host siano, tra loro, visibili. Si effettui
segmento di rete al quale è collegata la scheda
un veloce controllo con il comando ping:
ethernet: inviando un pacchetto a tale indirizzo,
esso verrà ricevuto da tutte le macchine presenti.
Shinji:-* ping -e
Il comando ping può essere utilizzato per capire
PIHG 192.168.B.1
meglio il significato di broadcast: se su Shinji, ad
64 byles
from
3
192.168.0.1
(192.168.0.1):
192.168.9.1:
56 data bytes
icmp sep=l
ttl=64
time=6.2 ms
esempio, si esegue il comando (notate che il desti natario è proprio l'indirizzo di broadcast della rete): La scheda ethO di Rei è quindi visibile. Rei dispone, Shinji:-!* ping -e 3 -b 192.168.0.255
però, di un altro indirizzo IP, questa volta non
PING 192.168.0.255 1192.168.9.255): 56 data bytes
legato alla rete locale (il prefisso di rete è diverso)
64 Bytes (rom 192.168.6.3:
iOTp_seq=ì «1=64 tiire=6.4 ras
ma pubblico, assegnato dal collegamento via
64 Dytes from 192.168.8.2;
ìcmp seq=l ttl=255 time="1.6 ms (DUP!)
modem. Sì verifichi se anche questo è raggiungibile
64 bytes from 192.16B.9.3:
icmp seq=2 ttl=64 time=0.3 ms
64 bytes from 192.158.0.2:
icmp seq=2 ttl=255 time=l.l ms (DUP!)
Shinji:-* ping -e 3 151.16.34.36
64 bytes from 192.168.B.3:
icmp_seq=3 ttl=64 time=6.3 ms
PING 151.16.34.36
64 bytes from 192.168.D.2:
icmp seq=3 ttl=255 time=l.l ms
(DUP!)
ping:
sentito:
(151.16.34.36):
Network
is
56 Cata bytes
unreachable
Ecco presentarsi il primo problema. Per cercare di
si nota che rispondono all'appello due host (gli unici
^
capire cosa stia succedendo è necessario chiedersi
al momento) della rete.
prima di tutto perché l'indirizzo della prima scheda
Le righe successive dell'output di ifconf ig riporta
ethernet sia stato raggiunto e l'aitro indirizzo
no una serie di altre informazioni e statistiche, tra t
pubblico - assegnato a pppO - no, considerando che
quali i il numero di pacchetti ricevuti (RX) ed inviati
entrambi gli indirizzi appartengono a Rei.
(TX), i! numero di errori riscontrati, la quantità di
La risposta si trova nella tabella di routing (vedi
riquadro), quella tabella che viene consultata tutte
appartiene alla rete locale (ha un prefisso di rete
le volte che c'è da inviare un pacchetto.
diverso) e che, quindi, non potrebbe essere rag
Solo quando nella routing table vi è un asterisco al
giunto in modo diretto senza passare attraverso
posto di gateway l'indirizzo è direttamente rag
nessun altro host, è necessario specificare qualche
giungibile: quindi, quando si cerca di raggiungere
informazione in più.
l'indirizzo 192.168.0.1, appartenente alla stessa
Una considerazione pratica: chi ha detto che l'indi
rete di Shinji, la rete ethernet consegna ai vari
rizzo 151.16.34.36 debba appartenere proprio a Rei
computer ad essa interconnessi il pacchetto, che
e non, ad esempio, ad Asuka?
verrà scartato da tutti tranne che da Rei.
Quello che serve è una indicazione "per tutti gli
Quando, invece, si va a cercare un indirizzo che non
indirizzi" che non siano quelli locali: serve una
INFORMAZIONI
Tabella dì routing
Seconda
RIGA della tabella di routing
192.168.0.0 AND 255.255.255.0 -
192.168.0.3 ANO
La tabella di routing è quella tabella che permette ad un
192.168.0.9 =
host di sapere come instradare pacchetti verso la destinazio
La
ne richiesta. Per visualizzarla, si utilizzi il comando route,
192.168.0.0
255.255.255.S = 192.168.8.0 192.168.0.0
riga viene selezionata,
lunghezza prefisso = 24 bit
senza argomenti, che, su Rei, restituirà qualcosa di simile (sono state eliminate alcune colonne): Rei:~# route Kernel
IP
Terza
-n
routing table Gateway
Genmask
Iface
10.16.34.3G
•
255. 255. 255 ..'V,
pppQ
255 255. 255 .0
eth8
9.6 e.e
pppB
default
le.16.34.36
della
tabella
di
routing:
AND
0.0,0.3 =
9.0.0.0
192.168.0.3
AND 0.0.Q.O =
0.0.0.0
G.B.G.O == 0.0.0.0
Destinatimi
192.168.0.0
RIGA
9.0.0.0
La
riga viene selezionata,
lunghezza prefisso = 0 Oit
Vi sono due righe che rispettano l'uguaglianza, ma. secondo il metodo del longest prefix match, verrà selezionata la secon da. A questo punto, Rei sa qual è l'interfaccia da utilizzare per
Si cerchi di capire il significato di ciascuna riga. Per semplicità
inviare il pacchetto: ethO (presente nella colonna Iface -
verrà utilizzato un esempio: un programma in esecuzione su
Interface - della tabella).
Rei genera un pacchetto destinato a Shinji (indirizzo
Si sarà sicuramente notato le particolarità della terza riga.
192.168.0.31. Rei dovrà decidere tramite quale interfaccia di
Innanzitutto, come Destination abbiamo la parola default, che
rete inviarlo. Linux, per prendere questa decisione, utilizza un
sta ad indicare qualsiasi destinazione. Anche la Genmask è
metodo denominato longest prefix match (corrispondenza del
particolare, in quanto essendo 0.0.0.0 permetterà di includere
prefisso più lungo, tradotto letteralmente) che funziona gros
sempre come possibile scelta la riga che la contiene (anche se
solanamente così: si scorre la routing tabie riga per riga e. per
non è detto che verrà effettivamente utilizzata in quanto in
ogni riga, si effettuano le sequenti operazioni:
un'altra riga potrebbe esserci una corrispondenza "migliore", come in questo caso). Inoltre, vediamo alla colonna Gateway
si confronta il prefisso di rete con la Genmask della tabella
l'indirizzo IP 10.16.34.36, presente anche nella prima riga.
di routing, ottenendo un primo valore. Tale confronto
Questo è l'indirizzo del gateway al quale verrà inviato il pac
avviene bit a bit: è bene ricordare che, secondo le regole
chetto che dovrà essere inoltrato.
dell'AND logico, il valore risultante è 1 se entrambi i bit
Quando riceverà un pacchetto da inoltrare, anche il gateway
confrontati sono 1;
10.16.34.36 prenderà una decisione utilizzando un metodo
si confronta l'indirizzo di destinazione con la Genmask
simile a quello visto, e cosi via. fino ad arrivare a destinazione,
della tabella di routing, ottenendo un secondo valore;
E' bene soffermarsi un attimo sul concetto di "default gateway" appena espresso con un altro esempio: si supponga che una
Se c'è uguaglianza tra questi due valori, la riga viene
applicazione generi un pacchetto destinato questa volta all'in
selezionata e viene annotata la lunghezza del prefisso di
dirizzo 66.102.11.109. Ripetendo il procedimento di selezione
rete, che corrisponde alla lunghezza della Genmask (ad
si vedrà che questa volta solo la riga del "default gateway"
esempio, la maschera 255.255.255,0 è lunga 24 bit);
(l'ultima) sarà selezionata; di conseguenza, il pacchetto verrà
Se viene individuata più di una riga durante il
inoltrato tramite l'interfaccia pppO, come indicato dall'ultima
procedimento il kernel sceglierà quella il cui prefisso di
colonna della tabella di routing di Rei.
rete è più lungo (longest prefix).
In questo caso, pero, non è possibile conoscere la localizzazio ne effettiva dell'host al quale appartiene tale indirizzo, quindi
Tornando all'esempio si avrà:
l'unica cosa da fare è inviare il pacchetto al gateway di default (indirizzo 10.16.34.36), che è direttamente connesso
Prima RIGA della tabella di 10.16.34.36 AND
tramite l'interfaccia pppQ; il gateway, a sua volta, basandosi
routing:
255.255.255.255 ■
10.16.34.36
192.168.0.3 AND 255.255.255.255 =
192.168.0.3
10.16.34.36
La
!=
sulla propria tabella di routing, dovrà indirizzare il pacchetto verso la destinazione. Il pacchetto durante il suo viaggio passerà per più gateway
192.168.e.3
che lo reindirizzeranno ad ogni salto (ogni salto viene detto in
riga non viene selezionata.
gergo hop), avvicinandolo alla destinazione reale.
Nelle prime due righe si è visto che la colonna Gateway è 1M.W1. 0.)
vuota (è presente un asterisco): questo significa che l'host
.
uoouooll mimi
10.16.34.36 (prima riga) e gli host della rete 192.168.0 sono
00000000 .
00000011
direttamente raggiungibili, ovvero sono connessi direttamente
-> uoooooo . 1O1O1O00 .
00000000
.
aooooou
-j
11111111
.
mimi
umili
.
00000000
-
:-.■_
.
:.:.:..
10101000
.
.
mimi
.
.
1 GIOÌ000
.
->
11000000 .
->
11111111
Il
i«.isa. 0.3
00000000
all'host in questione, anche se con tipologie di collegamento 192.MS 0.3 JH.C 19;.jfta
--
j
.
..
_..
diverse (nel primo caso abbiamo un collegamento puntopunto tramite modem. a cui partecipano solo due host, nel
J
secondo abbiamo una LAN Ethernet).
direzione di default... è necessario specificare quel
Rei:-* ping
lo che viene definito un default gateway, l'indirizzo
PING
dell'host al quale verranno passati i pacchetti quan
64 bytes
from 66.102.9.99:
lcmp seq=l :tl=239 time-128 ms
do Shinji non saprà come raggiungerli direttamente.
64 tìytes
from 66.192.9.99:
icmp_seq=2
Si lanci il comando route su Shinji e si otterrà qual
64
from 66.102.9.99:
iemp seq=3 ttl=239 time=124 ms
-e 3 66.102.9.99
66.102.9.99
bytes
(66.1B2.9.99)
56(84)
bytes
of
:tl=239
data.
time=123 ms
cosa di simiìe a quanto segue (sono state tralascia te alcune colonne)
L'host da raggiungere è attivo e risponde corretta
Kernel
da chiedersi adesso come sia possibile che da Shinji
mente, il problema sta quindi nella rete locale. C'è IP
routing table
Destinaiion
Gateway
Genmask
Iface
non funzioni e da Rei, invece, tutto proceda per il
192.168.0.0
■
255.255.2S5.O
ethB
meglio. Che differenza c'è tra i due host?
II default gateway si imposta in maniera estrema
mente veloce: è sufficiente digitare il comando Shinji:-» route actd defauU
NAT: Network Address Translation La differenza c'è ed è sostanziale: Rei è affacciato
gw 192.168.0.1
direttamente su Internet, mentre Shinji, invece, A questo punto si lanci nuovamente il comando
deve passare tramite Rei. L'aver specificato il
route e si ottiene:
default gateway non è sufficiente: serve qualcosa
Kernel
che è privato, e che quindi fuori dalla LAN perde
per dare validità all'indirizzo di Shinji (192.168.0.3) IP
routing
Destinatici!
table
Gateway
192.168.0.0 default
192.168.0. 1
completamente valore.
Genmask
Iface
25S.2S5. 255 .0
eth0
Nessun computer su Internet potrebbe raggiungerlo
0.0.0.0
etno
con la risposta al ping (echo-reply). a meno che Rei non faccia da "traduttore", utilizzando una tecnica
Che vuoi dire pressappoco questo: "tutti i pacchetti
nota come NAT {Network Address Translation).
che non verìficano le precedenti regole della tabella
Senza dilungarci troppo, dato che sarà trattata in
di routing, devono essere instradati tramite la sche
maniera esauriente nelle pagine che seguiranno, è
da ethO verso l'host 192.168.0.1". Ovviamente l'ul
necessario adesso capire il concetto alla base: tra
tima riga della routing table è sicuramente verifica-
mite alcune stratagemmi Rei è in grado di sostituire
ta, visto che la netmask è 0.0.0.0. (se non fosse
il suo indirizzo IP ai pacchetti provenienti da Shinji,
chiaro, si riguardi nuovamente il riquadro sulla
in modo da dare loro validità, mascherando, alla
tabella di routing: nel longest prefix match, il con
vista degli altri computer su Internet, la presenza di
teggio degli AND con una maschera di rete 0.0.0.0
Shinji. Le risposte degli host contattati, ovviamente,
è sempre verificato, con lunghezza 0 bit). A questo
avranno come destinatario Rei, visto che ha sosti
punto si riprovi il ping che prima non era riuscito:
tuito all'indirizzo di Shinji il proprio; Rei, quindi, dovrà disporre di un criterio di selezione per far arri
Shinji:-* oing PING
6J
-e
151.16.34.36
Bytes
from
3
vare a Shinji, opportunamente rimodificati, i pacchetti
151.16.34.36
(151.16.34.36):
151.16.34.36:
56
data
icmp seq-1
che erano di sua pertinenza (e solo quelli!).
bytes
ttl=64 tirce=a.2 ms
Tutto questo è più facile da mettere in pratica che da spiegare: è sufficiente il seguente comando
Questa volta, come prevedibile, è stato possibile
Rei:-# iptables -t nat
-A POSTROUTING -o
-j
MASQUERADE
raggiungere l'altra interfaccia. La prova successiva,
arrivati a questo punto, consisterà nel raggiungere
per far si che tutte le "traduzioni" di indirizzi IP ven
un host su Internet: si provi ad effettuare un ping su
gano effettuate correttamente. Il comando sopra
un indirizzo che risponde ai ping (non tutti lo
mostrato, tradotto in linguaggio naturale, dice qual
fanno), ad esempio 66.102.9.104.
cosa di simile"per quaisiasi pacchetto proveniente
Shinji:-ff ping -e 3 66.102.9.104
pppO (-0 pppO), effettua il mascheramento dell'indi
dalla rete interna e che debba uscire dall'interfaccia PING 66.102.9.104
(66.192.9.104):
rizzo mittente (-j MASQUERADE)".
56 data bytes
Proviamo di
nuovo a effettuare un ping verso l'host 66.102.9.99: ■-■ 66.102.9.99 Ring statistics 3 packets
transmitted,
---
0 packets received,
packet
loss
Shinji:-# ping
-e 3 66.102.9.194
PING 66.192.9.184
(66.102.9.104):
56 data bytes
Qualcosa non sta funzionando come dovrebbe... eppure il ping appena effettuato sull'indirizzo pub
---
blico assegnato dal collegamento via modem aveva
3 packets
66.102.9.99 ping
statistica
iransmitted,
■■■
0 packets received,
100^ packet
loss
ricevuto risposta. E' necessario cercare di isolare il
problema, magari effettuando la stessa operazione
Ci sono ancora problemi. Effettivamente, è stato
su Rei, per escludere eventuali problemi non impu
trascurato un aitro particolare fondamentale: Shinji
tabili al network (ad esempio, se 66.102.9.99 fosse
contatta Rei tramite l'interfaccia ethO, mentre
spento, si starebbe effettuando una ricerca di errore
Rei contatta l'host 66.102.9.104 tramite pppO, l'in
per niente):
terfaccia esterna (si riveda la colonna Iface della
~ tabella di routing): di defauit Linux non permette
Questa volta sembra funzionare tutto correttamente.
che i pacchetti vengano passati tra le diverse inter
Eppure manca ancora qualcosa: chi, tra i lettori, ha
facce e quindi è necessario specificare in maniera
riconosciuto www.google.com nell'indirizzo numerico
esplicita questa nostra volontà.
66.102.9.104? Pochi davvero.
Per verificare che sia proprio questo i! problema, si
E' ovviamente necessario riuscire a raggiungere gli
controlli il valore della variabile ip
host su Internet tramite il loro nome mnemonico,
forward presen
te al seguente indirizzo sul filesystem virtuale Iproc:
non certo tramite il loro indirizzo IP, un po' troppo difficile da ricordare.
Rei:-# est
Ecco su Rei come dovrebbero andare le cose:
/proc/sys/net/ipv4/ip_forward
0
Rei:-* ping
-e
3 i~ww.qoogle.com
Quando il valore è 0 significa proprio che il forward
PING www.google.akadn5.net (66.1B2.9.99)
tra ie interfacce è disattivato. E' sufficiente quindi
64 bytes frosn 66.192.9.99;
icmp_seq=l ttl=239 time=156 ms
porre ad 1 tale valore
64 bytes from 66.102.9.99:
iorp seq=2 ttt-239 tùne=122 ras
54 bytes from 66.102.9.99:
ionp^seq-3 tt 1=239 tiine^l22 ms
Rei:-# echo
1
>
/proc/sys/net/ipv4/ip
56(84)
bytes of data.
forviarci
Ecco lo stesso test effettuato su Shinji, con un risul A questo punto è opportuno un nuovo test:
tato ben diverso:
Shinji:--» ping
Shinji:-» ping www.google.com
PING
e
66.162.9.184
3
66.162.9.1G4
(66.162.9.164):
56 data
bytes
ping:
unknown
host
wv.\>.google.com
64 bytes
from 66.102.9.194:
icmp_seq=l
ttl=248
time=126 ms
bytes
frani 66.1Q2.9.1Q4:
iemp seq=2
ttl=24G
time=126
ms
Eppure l'indirizzo numerico rispondeva al ping con
64 bytes
from 66.1G2.9.104:
icmp seq-3
ttl-24B time-126
ms
successo. Riflettendo per un attimo, se il ping all'IP
64
numerico funziona e il ping al nome no, c'è un pro blema dì traduzione nome->IP.
APPROFONDIRE
Questa funzione fondamentale viene svolta dal DNS, un database distribuito su Internet: senza
Riferimenti web
entrare ancora una volta nei dettagli (ci sarà modo
II networking, relativamente ad un sistema operativo com
di approfondire in seguito), è il contenuto del file
plesso come Linux, non è argomento che sì esaurisce in
presente in /etc/resolv.conf ad indicare gli host
poche pagine. La fonte migliore per ottenere nuove informa
che "sanno" come trasformare in indirizzo numerico
zioni è sicuramente il web. Vi consiglio due siti molto inte
i nomi. Con il comando cat si controlli il contenuto
ressanti a proposito: il primo è
di tale file su Rei:
http://vA-M.linux-ip.net/ un tutorial approfondito su molti degli aspetti legati alte reti IP in ambienti Linux. Il secondo 6
Rei:~# cat
/etc/resolv.conf
http://www.tlpd.org/HOWTO/Net-HOWTO/
search miodominio
un how-to che tratta tutti gli argomenti visti nell'articolo.
nameserver
193.7Q.192.25
#
ppp
temp
entry
nameserver
193.70.152.25
# ppp
temp
entry
ESERCIZI
"—■
■"
■--— ■
file
indica
che
sono
proprio
gli
host
193.70.192.25 e 193.70.152.25, nel caso in esame i
W Esercizi per casa »
Tale
locai
server DNS di Wind-lnfostrada, quelli destinati alla
——.....
Ecco un piccolo esercizio per approfondire la conoscenza degli strumenti di networking. Supponiamo di dotare Rei di
una nuova interfaccia Ethernet, ethl, il cui indirizzo sarà
risoluzioni dei nomi, comunicati automaticamente
alla connessione via modem (è il pppd che, appena avvenuta la connessione ad internet, compila oppor
10.0.0.1/255.255.255.0, alla quale è connesso un nuovo
tunamente il file /etc/resolv.conf sui computer di
host, Misato, dotato di un'unica interfaccia con indirizzo
Rei). La tecnica più veloce perché tutto funzioni per
10.O.O.2/255.255.255.0, come in figura.
il meglio è creare un file identico su tutti gii host
Quali comandi dovremo dare a Rei per permettere a Misato
della rete, copiando le stesse righe presenti nel
di utilizzare la connessione Internet?
resolv.conf di Rei. Fatto questo, si verifichi che tutto finalmente funzioni:
Internet
Shinji:-» ping
-e 3 www.goDgLe.com
PING iAV.googl.e.akadns.net
166.102.9.99|
64 bytes from 56.163,9.99:
icmp_seq=l ttl-239 time=116.5 ms
561841
bytes of data.
64 bytes
from 65.102.9.99:
icmp_seq=2 ttl=239 time=HB.2 ms
64 bytes
from 66.102.9.99:
iemp setp3 tt1=239 time=122.6 ms
Finalmente abbiamo il network è attivo e funzionan
te. Ancora ci sono da approfondire molti aspetti importanti, che verranno visti nelle prossime pagine.
Migliorare la configurazione di rete Vediamo insieme come staticizzare le impostazioni di rete, in modo da non perderle al reboot e poi scopriamo come migliorare le prestazioni della nostra connessione con alcuni accorgimenti...
Francesco
Sportolari
<f.sportolari@linuxpratico.com>
Nell'articolo precedente abbiamo esaminato i comandi e le operazioni fondamentali per il
setup della nostra rete locale. Le modifiche effettuate, ad eccezione del file /eic/resolv. coni,
Per impostare l'indirizzo IP di una delle interfacce
sono temporanee. E' necessario, per mantenere la
presenti è necessario aggiungere alcune righe di
configurazione tra un reboot ed un altro, operare
configurazione nel file /etc/network/interfaces
opportunamente su alcuni file di configurazione,
con un editor di testo qualsiasi.
diversi da distribuzione a distribuzione. A tale scopo
Su Rei questo è quanto dobbiamo aggiungere per
vedremo le operazioni da compiere relativamente a
configurare la scheda ethernet che si affaccia sulla
due delle distribuzioni più diffuse: Debian Sarge e
rete locale:
Mandrake 10. Vedremo inoltre come sfruttare al meglio la nostra connessione Internet con l'ausilio di due "trucchi": l'installazione del servizio di
auto cthe
caching DNS, che ci permetterà di abbassare i
lfate ethB
inet
static
tempi di attesa relativi alla risoluzione dei nomi di
address
192.168.6.1
dominio e l'ottimizzazione della banda messa a dis
netmask
255.255.255.Q
posizione dal nostro provider grazie al controllo del
nelwork
192.16H.0.0
traffico ed alla Quality Of Service.
broadcast
Configurazione degli host [Debian unstable]
192.168.B.255
NOTA: il driver della scheda di rete deve essere
caricato all'avvio, altrimenti questa non funzionerà.
Per controllare se il driver è già stato caricato pos La rete di riferimento presentata nel numero prece
siamo utilizzare il comando ifconfig
dente era quella mostrata in figura 1.
mostra tutte le interfacce di rete presentì, tra le
-a che ci
In questa rete abbiamo un gateway. Rei, che forni
quali dovrà comparire anche ethO. Se così non
sce la condivisione della propria connessione ad
fosse è necessario individuare il modulo del kernel
Internet ad altri due host, Shinji e Asuka.
necessario per pilotare la nostra scheda ed aggiun
Nell'articolo precedente avevamo individuato i
gerlo nel file /etc/modules. Ad esempio, per una
seguenti parametri, necessari per il corretto funzio
scheda di rete 3com 905B PCI il modulo è 3c59x.
namento del networking:
ASUKA E SHINJI:
>
Indirizzo IP e Netmask (di classe 192.168.0. x)
>
Default Gateway (TIP di Rei)
>
DNS Server di riferimento
1151.16.J4.36
■
Interne!
REI (gateway):
>
Indirizzo IP e Netmask dell'interfaccia locale (ethO, 192.168.0.1)
>
II parametro ipforward impostato a 1
>
Setup del masquerading per ia condivisione della connessione
Andiamo quindi ad analizzare i passi necessari per fissare questi parametri di configurazione in modo
IP: «ask:
192.163.G.3 255.255.255
IP: Mask:
19? 255.25'.
tale da non doverli inserire ad ogni reboot su cia scuna macchina.
Partiamo da Rei, che sicuramente è la macchina che presenta le maggiori difficoltà in quanto è il
La rete di riferimento con Shinji e Asuka
i nostri host interni e Rei che funge anche da gateway verso internet...
gateway della nostra rete.
7
~ Naturalmente tutto questo può essere già presente
subito dopo aver stabilito la connessione in quanto
se al momento dell'installazione del sistema opera
il nostro provider può ogni volta assegnarci un indi
tivo la vostra scheda di rete è stata riconosciuta
rizzo IP differente (IP dinamico}.
ed avete riempito correttamente la form relativa
Relativamente ad un host Debian, ecco come si può
alla configurazione del protocollo IP che vi è stata
procedere:
presentata.
/etc/ppp/ip-up.d/ denominato OOstartmasq (i due
si
crei
uno script nella directory
La seconda cosa da fare è quella di permettere la
zeri prima del nome consentono allo script di essere
condivisione della connessione ogni volta che que
uno tra i primi ad essere eseguito). Il contenuto
sta viene stabilita, il programma che si occupa di
dovrà essere questo:
gestire tutti gli aspetti inerenti la connessione
Internet dial-up con il provider è pppd.
«!/bin/sh
Tale programma, oltre a creare un canale di comu
* Awìa
nicazione punto-punto tra il nostro gateway ed il
lPTABLES=/5bin/iptables
i\ MASQUERADING
provider, permette a Rei di ricevere i parametri di configurazione indispensabili per far funzionare cor
SIPTABLES -t nat
-F POSTROUTING
rettamente il networking. Tra questi parametri
SIPTABLES
-A POSTRQUTING -0 SPPP_IFACE
-t fiat
-] MASQUERADE
abbiamo il nostro indirizzo IP pubblico, l'indrizzo IP del default gateway e gli indirizzi IP dei DNS server.
Questo script, se presente nella directory prima
Una caratteristica interessante di pppd è quella di
citata, sarà lanciato dal demone pppd ogni volta che
poter eseguire degli script in maniera automatica
la connessione dial-up viene stabilita. La variabile
subito dopo aver stabilito correttamente la connes
PPPIFACE viene passata da pppd allo script per
sione. Si può sfruttare questa peculiarità per effet
comunicare l'interfaccia di rete utilizzata dalla
tuare la configurazione del masquerading.
nostra connessione.
Questa operazione va effettuata per forza di cose
Ricordatevi inoltre che è necessario dare i permessi
INFORMAZIONI
Utilizzo del comando dig Prima di modificare il file /etc/resotv. conf di questi host,
richiesta per il nomewww.oltrelinux.com otterremo la seguente risposta:
però, vediamo se la cache DNS funziona correttamente. Si uti lizzerà a questo scopo il comando dig, contenuto nel pacchet
to dnsutils. che può essere installato con il comando:
Rei:-» apt-get
instali
dnsutils
www.oltrelinui.com
35B6
IN
A
BQ.17.149.253
Si provi ora a chiedere a Rei un nome di un host che sicura
Si può ora interrogare Rei chiedendogli di risolvere il nome hostwww.oltrelinux.com:
Rei:-* dig @192.16B.0.1 www.oltreUnux.com
Dato che è la prima volta che richiediamo l'indirizzo IP relativo al nome dell'host specificato, la query verrà inoltrata al DNS server del dominio oltrelinux.ccm. il quale risponderà a Rei comunicandogli il dato richiesto. Nell'output del comando pos
mente non è stato mai risolto, specificando quindi direttamen te l'opzione ->-norecurse:
Rei:-* dig @192.168.Q.l www.ibm.com +norecurse
Si può notare, in questo caso, come Rei non sia in grado di fornire alcuna risposta in quanto non ha mai effettuato una richiesta verso il server DN5 del dominio in questione.
~
L'output del comando, infatti, è il seguente:
siamo infatti identificare le righe relative alla risposta: www.ibm.com
www.oltrelinux.coni
3680
IN
CNAME
karma.oltrelinux.com
kanra.oltrelinuK.com 36Q0
IN
A
80.17.149.253
IN
A
...I
n. ihE.cca
Rei inserirò il dato nella sua cache, in modo tale che le richie ste successive per questo specifico nome vengano risolte localmente senza essere inviate al server DNS di riferimento.
Nota: naturalmente, dato che l'associazione hostname/lP può cambiare, queste informazioni non verranno memorizzate in
maniera permanente da Rei. Il dato nella cache esiste solo per
»"«■=«>
i ;
Gol
ii
-»num«-
*:.----? : op=
de:
;:
:;»B5i
imi
OOlBf:
;;
QDtaTKK
::
ifisvcfl
at
m
OUIBT. 1,
Itltui
UJSKIP:
NOEBJCTt.
d:
iimwni Ti
t,
9J90 4,
ÀDtJlTICMtL:
IH
i
arcuai;
v». shn.i-cTi-.
:-
IN
:9.*:.ia.ii
un limitato periodo di tempo.
•>». lbn.com.
in
IN
19.*;.21.99
«■.IBa.co».
:i
IH
Ì9.41.1S.99
Vediamo se il nostro server caching DNS si sta comportando
»«■. lbm.com.
:i e
IN
u». lbrn.com.
:.-
come vorremmo, digitando il seguente comando:
L'opzione norecurse dice a Rei di rispondere solamente se
ha il dato nella cache, ovvero di non inoltrare la query verso il server DNS del dominio oltrelinux.com. Naturalmente, dato che prima avevamo già effettuato una
29.42.17.99 29.42.18.99
IN
29.12.19.99
IN
i
iBo.co».
■:.
DI
KB
US.0SB.
■
:■.
113
u.suatln. Itn.cai.
-
:■.
M
j.vt:san. Ibp.ccp,
H
■■.
M
j.nlsadcn. Itu.con
71298
IH
i
92 . 3 S. 2 ] 2 . J <
71298
IH
*
98.4.S 3.3 S
;:
Rei:-» dig 3192.168.9.1 www.oltrelinui.com tnorecurse
■ .
.-■■
:
.i :
1UTH0BITT SICT1CH:
xt«.co»■ ;:
1
stentai
U»tTI0HU
nteioel-jitvii.fJt
3KTICB:
ns.ouacin. iCn.con.
lsb.1
~
di esecuzione al file prima creato con il comando:
nel file di configurazione omonimo presente su Rei. Eccone un esempio:
Rei:-# chmod +x /etc/ppp/ip-up.d/G9startnat
L'ultima cosa che rimane da fare su Rei è quella di
nanieserver
193.70.192.25
nameserver
193.70.152.25
abilitare TIP forwarding all'avvio del sistema opera
tivo. Per fare questo è sufficiente impostare a yes
Questi due indirizzi, nel nostro caso, sono i DNS
il
server di Wind-infostrada.
parametro
ipforward
presente
nel
file
/etc/network/options, in questo modo:
Quando viene stabilita la connessione da Rei verso
ip_forward=yes
ticamente dal demone pppd nel file prima citato.
Passiamo ora alla configurazione degli altri host
andranno inseriti manualmente.
il provider, questi indirizzi vengono inseriti automa Negli altri host della nostra rete questi indirizzi della nostra LAN. Il file di riferimento per configura re le interfacce,
come abbiamo già visto, è
/etc/network/interfaces. Ecco come dovrà esse
Il servizio di Caching DNS [Debian unstable]
re su Shinji la parte relativa ad ethQ: Apriamo una piccola parentesi sul Domain Name Service (DNS). In un network esteso come Internet
auto ethe
iface etha ^
inet
address
è impossibile ricordare gli indirizzi IP dei server che
static
forniscono un determinato servizio. Si è deciso di
192.168.9-3
utilizzare, per comodità, dei nomi facilmente
netinask 255.255.255.0 network
broadcast gateway
memorizzabili per identificare gli host.
192.168.0.0
Ad esempio, l'indirizzo 80.17.149.253 corrisponde
192.168.B.255
a www.oltrelinux.com. La trasformazione da nome
192.168.0.1
host a IP (e viceversa), necessaria per il corretto Si noti la riga che inizia per gateway tramite la
funzionamento del protocollo IP, è possibile grazie
quale impostiamo come default gateway l'host Rei.
al servizio DNS. Tale servizio può essere visto come
Si faccia attenzione inoltre ai fatto che sul file di
un database distribuito sull'intera rete Internet
configurazione di Rei questa riga non compare, in
mondiale, a cui partecipano numerosi server DNS.
quanto il default gateway, in questo caso, viene
Ciascun server DNS gestisce un particolare "domi
impostato automaticamente da pppd.
nio" (per esempio. oLtrelinux.com).
Per concludere la configurazione, è necessario
II server DNS è padrone di scegliere la corrispon
copiare nel file /etc/resolv.conf di ciascun host
denza tra i nomi di host ed indirizzi IP all'interno del
della rete gli indirizzi IP dei DN5 server, già presenti
dominio di sua competenza.
Al momento della configurazione di rete di una macchina Linux, l'indirizzo IP che si inserisce all'in
INFORMAZIONI
\ Schede di rete su Mandrake
terno del file /etc/resolv.conf è quello di un server DNS al quale si inoltreranno le richieste del
tipo "che indirizzo IP ha l'host identificato dal nome www. oltrelinux. com?".
Il server DNS che riceve una tale richiesta {query)
Anche con Mandrake è possibile configurare la scheda agen
risponderà direttamente solo se è il server che
do direttamente sui file di configurazione, ma è sicuramente
gestisce il dominio oltrelinux.com, altrimenti la
molto più comodo e semplice sfruttare i comodi strumenti di
configurazione disponibili. Per la configurazione dì una sche da ethemet (presumendo che la scheda sia riconosciuta
ed il relativo modulo caricato), sarà necessario avviare, in
query verrà inoltrata verso il server corretto.
Ciò è necessario in quanto il database DNS è enor me e non sarebbe conveniente conservarlo tutto in
console o anche sotto X, l'utility drakconnect.
un'unica macchina, per ovvi motivi di efficienza.
Una volta partito il programma, sarà sufficiente scegliere
Tornando alla configurazione della nostra rete loca
una connessione di tipo LAN e seguire il wizard. Per prima
le, a questo punto, vediamo come possiamo miglio
cosa andrà scelta dall'elenco la vostra scheda (probabil mente sarà chiamata othO), poi dovrete procedere con la configurazione manuale, impostando l'indirizzo IP (ad esem
pio 192.168.D.5), la netmask (solitamente 255.255.255.0)
rare le prestazioni relative al servizio DNS.
Attualmente, per la risoluzione dei nomi, stiamo uti lizzando il server DNS del nostro provider, per rag
e lasciando selezionate le voci "Hotplugging della rete" e
giungere il quale dobbiamo utilizzare, per ogni
"Attiva al momento del boot".
query, il collegamento via modem.
Nel passaggio successivo potrete impostare gli indirizzi dei server DNS (quelli forniti dal vostro provider) e del gateway
(in una rete locale, probabilmente 192.168.e. 1) oltre al nome del computer (localhost. localdomain, ad esempio)
e al percorso di ricerca (il dominio del vostro provider. nella forma nomeprovider. it).
Un modo per ridurre il traffico DNS verso il provider
è quello di installare, all'interno della nostra rete locaie, un server caching DNS. Questo tipo di server
DNS non gestisce nessun dominio, ma registra in una cache locale le query effettuate per conto degli
Potete saltare a pie pari la sezione su Zeroconf e procedere
host della LAN.
al riavvio della rete. Una volta terminate le operazioni di
Rei è l'host che meglio si presta per fornire un tale
shutdown e riavvio della rete, la configurazione sarà final mente terminata.
servizio. Su Debian è disponibile un pacchetto adat
to ad assolvere le funzioni di cache DNS, che è
per nameserver ed inserendo la seguente
dnsmasq. Per installarlo si digiti il seguente coman do da utente root;
narreserver 192.168.0.1
Rei:-# apt-get
instali dnsmasq
per poter così utilizzare il servizio di caching DNS
Appena terminata l'installazione, il servizio è già
appena installato. Si noti come questo semplifica
pronto per essere utilizzato sia da Asuka che da
notevolmente i problemi relativi alla configurazione
Shinji. Prima di concludere la configurazione dei
degli indirizzi IP dei DNS server in fase di installazio
due client, è necessario modificare il file di configu
ne di una nuova macchina nella rete, sia essa Linux
razione
o Windows, in quanto non sarà più necessario dover
/etc/dnsmasq.conf
aggiungendo
la
consultare ogni volta il file /etc/resolv.conf origi
seguente riga:
nale di Rei.
Migliorare le
Usten-address=192.168.0.1
performance di una connessione ADSt
Dopo aver riavviato dnsmasq con il comando:
La configurazione dì un server caching DNS è solo Rei:-# /etc/init.d/dnsmasq
uno dei modi per migliorare le prestazioni di rete
restart
della nostra LAN. Vediamo ora come è possibile 5oltanto gli host all'interno della nostra LAN potran
sfruttare al massimo la
banda che ci viene
no raggiungere il server DNS su Rei. Questo è
messa a disposizione dal provider con il quale ci
necessario per motivi di sicurezza, in quanto trat
colleghiamo ad Internet. I concetti che verranno
tandosi di una cache DNS esiste la possibilità di
presentati in seguito riguardano connessioni di tipo
"inquinarla" con indirizzi IP fasulli.
ADSL. ma possono essere facilmente adattati anche
A questo punto non rimane altro da fare che modifi
a connessioni analogiche tradizionali o 1SDM.
care il file /etc/resolv.conf sia di Asuka che di
Uno dei limiti dei collegamenti ADSL è la spropor
Shinji, cancellando le vecchie righe che iniziano
zione tra banda in ingresso (640 Kbit/s) e banda in
INFORMAZIONI
Condividere la
connessione [Mandrake] Anche con Mandrake e possibile condividere facilmente la connessione ad Internet. Supponendo che il sistema operativo del nostro gateway sia la versione 9.2 di Mandrake, vediamo come è possibile ottenere gli stessi risultati visti nell'articolo. Innanzitutto si deve lanciare il tool di configurazione DrakConf dal menu Configuration -> Configure your computer o diretta
relativamente alla conligurazione di rete, l'utilizzo di DHCP
piuttosto che la configurazione di un indirizzo IP statico. In questo modo, tutti i parametri necessari al corretto funzio namento del networking (indirizzo IP, netmask, default gateway e server DNS) saranno comunicati automaticamente dal gateway
agli host della LAN locale. Per quanto riguarda Debian, relativamente al DHCP. si riman
da ai prossimi numeri della rivista in cui si parlerà approfonditamente di questo servizio.
mente da shell digitando drakconf.
A questo punto, si deve selezionare la voce Network & Internet e successivamente l'icona di DrakGw, il tool di confi gurazione per la condivisione della connessione.
Dopo aver avviato il wizard premendo sul pulsante Configura, verrà chiesto, innanzitutto, di selezionare l'interfaccia di rete
Intemet Connection Sharing Please entet thè name of Ihe interface connecledlo thè inlemet Exaroples. ppp+ for rrorieni or DSL connectioni.
connessa ad Internet. Nel caso di un modem ADSL o tradizio
ethO, or ethl tor cable connection. ippp+ for a isdn connection
nale, la scelta adequata sarà ppp+ {figura A). Se nel nostro gateway sono presenti più di due schede Ehternet, verrà chiesto come secondo step di selezionare la scheda di rete connessa alla nostra rete locale. Chi possiede un modem ADSL Ethernet deve far attenzione a non selezio nare l'interfaccia collegata al modem, altrimenti la connessio ne ad Internet smetterà di funzionare correttamente.
Se l'interfaccia di rete esposta alla rete locale era già configu rata (cosa molto probabile) il wizard vi presenterà una finestra di dialogo in cui si chiede la riconfigurazione di questa per essere compatibile con i servizi di gateway Internet che ver
ranno offerti agli altri host. Lasciando l'opzione di default Automatìc Reconfiguration: Yes si eliminerà l'indirizzo IP pre
cedente e si terminerà la riconfigurazione {figura B).
Internet Connection Sharing .-.■ !■■
.:
■■-■. ■,-..- ■■
,,-:.., ■■
.. ■'■: ■
■
■■:■■:,
1i .■<■■:
Do you wan: an automati; [•-configufitioiJ You can do A manually but you need to kno* what you're domg
Completato anche questo ultimo passo, il wizard terminerà la configurazione installando tutti i pacchetti aggiuntivi necessa
ri. Tra questi verrà installato un server DHCP. che permetterà la configurazione automatica degli host della rete interna.
Su ciascuno degli host andrà esplicitamente specificato,
Automati: recwifigi*alion
*cj Sho* currwit interface configuratine
~
SORGENTE
SDrpCntC IpShapET
te eia» add dev SDEV parent 1: cU»m l:l htb rate S{RATEUP}kbit
sl/bin/bash
# jrca le OppOrtune classi di traffico con priorità diverse * Le classi
a Banda
(in Ktut/s)
in
ingressa ed
in uscita.
vanno da
18 a
14,
in ordine di
prio decrescente
I valori sono
» leggennente sotto la velocità nonlnale del link
(649/128)
COUMTER»e
ratedown-668
^lta ,
RATEUP=9G
(e elass afla Oev SDEV par(,nl 1;1 ciassnj l:s|SC0UNTER+l8]
DEV=$PPP IFACE
lc q(JlK acl0 dev SDB, parent 1;S|SCOUW7ER+1B] \
htb
SC0UHTEB .u 5 ,. d0
rate S[SRATEUP/7!kblt celi SlRATEUP}kblt
handle S1SCOUNTER+10]: »
Funzioni
per
la
classificariane
te
*ark lowports 0 { -j
-t
mangle
-A 5HAPE0UT
-p
tep
( )
iptables
MAfiK
■]
shcrtudps
MARK
( )
SI
HARK
--set-mark
SI
« Crea
La
catena SHAPEOUT nella tabella
iptables
-t mangle
-H SHAPEOUT
lptables
-t mangle
-I
-p icop
■]
HARK
--set-marti il
«
II
traffico
#
va
nella
su
-t mangte
nark shortteps
-A SHAPEOUT
-p udp
-iti length
-.length
:82 \
mark
si
I)
•
<
-t mangle --set-nark
-A SHAPEOUT
p tep
-m length
--length
Alta
mark
:64 \
iptables
, {
\
'mangle' di
-o
SDEV
-j
priviliegiate
Itra
1
lptables
SHAPEOUT
-t mangi*
-t mangle
e
16231
13
10
prio ai
pacchetti
prio ai
JDP
corti
(query ONS)
11 pacchetti TCP corti
ShomcpS
(pacchetti
fli
ACK)
11
-A SHAPEOJT
-p tep
--dport
-A SHAPEOUT
-p tep
--sport
.
nella classe Bei
i t ras fermenti
wrk
-] iptables
lp
SI
» ,, ()
,
13
ìcmp
» SSH e telnet
. nark ssti
POSTROUTING
porte
classe
rriark Sliortudos
KAHK
,
* Massima prio aU'ICMP (ping con delay basso)
« Alta
-j
„
done
{
--set-nark
lptables
1G
.
1:0 prio 0 protocol
{
-t raangle -A SHAPEOUT
iptables
,
CMm«1IMMIHM1
--set-mark
mark lowports tiark
.
SOEV parcnt
-dport 0:1024 -j
nark icpjj
sfq perturo
_,
filler aed tìev
prio SCOUNTER
handle S[SCOUNTER-ie] fw flowld 1:S[SCOUNTER-1Q]
1Ctables -t .a.gle -A SHAPEOtTT -p tep --sport 9:1024
ìptables
,,,
\
servili
interattivi,
ftp vengono penalizzati
ssh
in
ultima
classe
12
ssh MARK
. --set-mark
.. SI
mark ftpdata
14
ssh
M,_^
.
.
# QUI
sotto si possono aggiungere
le classi
personalizzate
) $9 9* *■* *ltt$ ttttOSX tf S J SS B9S ffgfl *>*■ SU
aark telnet () < lptables
-t
* shanln9 del traffico in ingresso
mangle
-A SHAPEOUT
.p tep
-flport
telnet
KARK --set-reark SI
lc tJcllsl: add dev SDÉV nant)le ff(f: 'ngress
lOtanles -t mangle -A SHAPEOUT -p tep --sport telnet
« (lller add Bev SOEU Parent ""■ protocol lp U32
-j HARK -SBt-Mrt SI
match *P src 9'B-B-fl/G ^
j
polite
rate
SRATEDOWIkbit
hurst
5k
drop
flowifl
:1
} narkftpdata
I)
{
lptables -t nangle -A SHAPEOUT -p tep --Oport 26
<los stop() {
-j HARK --set-mark si
tc qdlsc del dev SDEV root > /dev/nult 2>&1
1
qos starti)
-D
ffff:
POSTROOTING
add
traffico non
identificato va
SDEV
dev SDEV
la
classe
RATEUP Kblt/S
SHAPEOUT > /dev/njll 2=il
lptables
-t nangle
-X SHAPEOUT > /dev/null
2>41
) root
handle
li
htb default
14 qos
» Aggiunge
ingress > /dev/null 2>61 -o
iptaùles -t «angle -F SHAPEOtJT > /dev/null 2>il
» nella classe 1:14
# di
-t nangle
■]
• Per default tutto il
odlsc
del dev SDEV handle
ìptables
{
* Aggiunge la qdisc KTB alla scheda ethernet
te
te qdlsc
principale di
traffico
con
un
stop:
qos.start
tetto exit 8
La variabile SPPP_ IFACE è disponibile solo se la connessione è stata stabilita da pppd, qualora questo non fosse vero, basterà assegnare il device a mano cambiando la dichiarazione in DEV^nomedev/ice (ad esempio DEV=ethG).
11
« Bodprobe
-l
|
grep sched
uscita (128 Kbit/s). In condizioni di traffico normale questo non è un problema, ma quando il link è satu
Dovrebbe essere visualizzata una lista di moduli
ro in upstream le prestazioni peggiorano drastica
disponibili, comprendente schcbq.o ed altri file
mente. Chi utilizza programmi di fi!e-sharing come
che sono i moduli per il QoS.
BitTorrent, ad esempio, il quale tende rapidamente
Anche sulla Debian Woody è possibile avere il sup
a saturare la banda in uscita, avrà notato che tutto
porto al QoS. installando uno dei kernel della serie
il traffico di rete ne risente, anche se non si sta uti
tsc (al momento della stesura, la versione da
lizzando tutta la banda in entrata disponìbile. A sof
installare è kernel-ìmage-2.4.18-586tsc).
frire di questo problema sono soprattutto le connes
Lo script che utilizzeremo, scaricabile all'indirizzo
sioni TCP. Ma perché?
segnalato nel riquadro Riferimenti Web, necessita
Il fenomeno è connesso al meccanismo di conferma
del comando te, facente parte del pacchetto
dei pacchetti TCP ricevuti, chiamato aknowledgment
iproute, il quale ci permette di manipolare te rego
{brevemente ACK). Dopo aver ricevuto una certa
le di Quality of Service che ci vengono messe a dis
quantità di dati, l'host destinatario che partecipa ad
posizione dal kernel. Se non è già presente nel
una connessione TCP conferma l'avvenuta ricezione
sistema, lo si può installare nel solito modo:
dei dati al mittente inviando un pacchetto di ACK. Se questo pacchetto viene perso o viene ricevuto
Rei:-* apt-get
instali
iproute
dal mittente con un sensibile ritardo, quest'ultimo
comincierà ad inviarci i dati più lentamente.
A questo punto non ci resta altro da fare che copia
Se la banda in uscita a nostra disposizione è satura,
re lo script Ipshaper nel file OLpshaper all'interno
i pacchetti di ACK subiranno certamente ritardi
della directory /etc/ppp/ip-up.d. Come abbiamo
notevoli.
già visto prima in relazione al masquerading, lo
Uno dei metodi per risolvere questo problema è
script Qlpshaper sarà eseguito automaticamente
quello di dare alta priorità ai pacchetti di ACK in
da pppcJ subito dopo aver stabilito la connessione.
modo da inviarli prima di altri (ad esempio, prima
Ricordiamoci di attribuire i permessi di esecuzione
dei pacchetti di BitTorrent che contegono dati).
al file:
Facendo così possiamo far comprendere all'altro
capo della connessione TCP che abbiamo ancora
Rei:-» chmod
•»
/etc/ppp/ip-up.d/Glpsliaper
banda disponibile in entrata. La stessa procedura è applicabile a un gateway con
Un altro fastidioso problema che si verifica quando la banda in uscita è piena è il rallentamento dei ser
installato Mandrake, in quanto la struttura della
vizi interattivi. E' bene evitare, ad esempio, che un
directory /etc/ppp/ è esattamente la stessa.
upload FTP penalizzi eccessivamente i tempi di
Perfetto!
risposta di applicazioni quali ssh o telnet, se non
Lo script appena installato è già in grado di miglio
addirittura la nostra partita a Quake. Anche in que
rare sensibilmente le prestazioni della vostra ADSL,
sto caso, possiamo innalzare la priorità dei servizi
in quanto da alta priorità ai pacchetti di ACK e alle
interattivi in modo tale da mantenere basso il ritar
query DNS e classifica il traffico interattivo ssh e
do generato dalla condivisìone del collegamento
telnet in modo adeguato.
con altre applicazioni di tipo bandwidth-intensive
L'unica modifica da apportare potrebbere riguarda
(file-sharing, HTTP, FTP).
re la configurazione delle due variabili presenti in
Come molti di voi avranno già intuito, il compito di
testa allo script, RATEDOWN e RATEUP, che identifica
decidere la priorità dei pacchetti da inviare deve
no rispettivamente la banda in entrata ed in uscita.
essere assolto da Rei, il gateway della nostra rete.
I valori presenti sono adatti ad una ADSL 640/128.
Per fare questo si può sfruttare una delle feature
Avrete sicuramente notato che questi valori non
del kernel Linux, il supporto per il Quality of Service
corrispondono alla capacità nominale del collega
(QoS). Per QoS si intende la capacità di fornire un
mento. Ciò è stato fatto volutamente per evitare di
servizio migliore (basso ritardo dei pacchetti o una
far accodare i pacchetti (soprattutto quelli in uscita)
quantità di banda garantita, ad esempio) relativa mente ad una determinata classe di traffico. Una
INFORMAZIONI
classe di traffico è un insieme di pacchetti identifi cati da una caratteristica comune. Ad esempio, i pacchetti UDP che contengono delle query DNS
Classificazione
possono formare una classe di traffico. Lo strumen
dei pacchetti
to che si utilizza per identificare un gruppo di pac chetti viene chiamato "classificatore". Lo script nel riquadro è stato realizzato in modo tale da risolvere i problemi fin qui visti. Prima di adden
trarci nell'analisi del suo funzionamento, vediamo come si installa sul nostro gateway.
Classe
Priorità
ie
0
Pacchetti ACK,
11
1
Servizi
13
2
Servili che utilizzano porte inferiori alla
Innanzitutto, abbiamo bisogno di un kernel precom
query DNS e ICHP
interattivi
1024
(servizi
(telnet,
ssh)
privilegiati)
pilato con il supporto per il QoS. per sincerarsi di
13
3
Servizi a bassa priorità
disporre di tale supporto, sarà possibile utilizzare il
14
4
Traffico non classificato
comando modprobe in abbinamento con grep:
12
Descrizione
al modem; sarà il gateway Linux a gestire le code.
La classificazione dei pacchetti viene effettuata per
Se ad esempio avete un link ADSL 256/128, potete
mezzo di funzioni (riconoscibili dal prefisso mark )
impostare le due variabili così:
le quali utilizzano il comando iptables per marcare
RATEDOWN=216
come la porta TCP sorgente o di destinazione, o la
RATEUP=9G
lunghezza del pacchetto.
i pacchetti che presentano determinati attributi
Lasciamo ai più temerari il compito di sperimentare Nota: ricordatevi dì modificare RATEUP e RATEDOWN in
nuove funzioni di classificazione de! traffico come
base alla capacità nominale della vostra connessio
esercizio.
ne ADSL restando circa 40Kbit/s sotto ad essa.
Cerchiamo ora di comprendere il funzionamento
H port-forwarding
dello script Ipshaper in modo tale da avere infor
Concludiamo con un argomento che sicuramente
mazioni sufficienti per personalizzarlo in base alle
risulterà molto utile alla maggior parte di voi: il
esigenze. Lo script è stato realizzato in modo tale
port-forwarding. Nel primo articolo si è accennato al
da fornire cinque classi di traffico differenti (docu
fatto che nella LAN di figura 1 gli host "interni"
mentate nel riquadro).
delia nostra rete (Shinjì ed Asuka) utilizzano indi
Fate attenzione alle priorità: un valore più basso
rizzi IP privati, che non hanno alcuna validità su
indica una priorità più alta, quindi i pacchetti della
Internet. Come si può fare allora per raggiungere
classe 10, ad esempio, hanno priorità maggiore
dall'esterno, ad esempio, il client aMule in esecuzio
rispetto a quelli della classe 11.
ne su Asuka (figura 2)?
Prima di arrivare alla soluzione, però, è necessario
INFORMAZIONI
come al solito fare riferimento ad un po' di teoria. Ogni servizio disponibile in Internet è identificato da
i Port forwardìng
una coppia di valori che sono, rispettivamente:
' con i router
> l'indirizzo IP della macchina sulla quale è in
La maggior parte dei modem-router ADSL presenti sul mer
cato permette di realizzare NAT e. anzi, la quasi totalità viene utilizzata proprio in questa modalità. Come accade
con il masquerading (che non è altro che un particolare tipo di NAT) di Linux, c'è il problema di avere un solo indirizzo pubblico per diversi computer. Con iptables è possibile
realizzare port-forwarding inoltrando i pacchetti ad host della rete locale in modo da permettergli di ricevere connes
in questione;
> la porta TCP (o UDP) che identifica univocamente il programma che gestisce il servizio all'interno dell'host. L'indirizzo IP, come si è visto nel primo articolo, è
sioni dirette (e poter quindi anche ospitare server): tale fun
indispensabile per quel che riguarda il routing,
zionalità è spesso disponibile anche sui router che fanno
ovvero per trovare la strada verso l'host desiderato.
NAT, con nomi come Virtual Server o simili e sarà possibile impostarla direttamente dallo strumento di amministrazione del router stesso (solitamente una comoda interfaccia web).
Una pagina su cui potrete trovare maggiori informazioni riguardo alla configurazione del vostro router è:
La porta, invece, ha valore assoluto solo per l'host servente, in quanto identifica uno specifico servizio (es. Server Web -> porta TCP 80).
Il problema, come avrete già intuito, non sta nel
http://www.winmxitalia.it/routers.htm
numero di porta, che può essere scelto arbitraria
Se il vostro router non è trattato, probabilmente una ricerca
mente, ma nel fatto che gli host che utilizzano indi
su Google con chiave <nome -
esecuzione il programma che gestisce il servizio
router> .manual o <nome
router> configuration [o un'occhiata al manuale dell'ap parecchio), sarà illuminante...
rizzi IP di classe privata non sono raggiungibili diret tamente.
Nel nostro caso abbiamo un unico
indirizzo IP valido, che è quello che il provider asse gna a Rei quando viene stabilita la connessione.
La soluzione al problema ci viene fornita dal mecca nismo del port forwarding, che consente di reindiriz zare il traffico destinato ad una coppia IP/porta verso una nuova coppia IP/porta.
Ad esempio, si supponga che l'indirizzo pubblico di Rei sia xxx.xxx.xxx.xxx. Se vogliamo esporre in Gateway (Rei)
Wl.ì LAM
Internet il server Web di Shinji, il cui indirizzo IP
Modem
privato è 192.168.0.3, dobbiamo configurare il port Interne!
forwarding su Rei (che è l'unico host raggiungibile dall'esterno) in modo tale da formare un'associazio ne di questo tipo:
Destina;ione:
xxx.xxx.xxx.xxx:f
192.168.0.3:80
Rei, quindi, se riceve un pacchetto indirizzato al Attivando il destination NAT è possibile far ricevere a Asuka le connessioni direttamente
suo IP pubblico ed alla porta TCP 80, deve reindiriz zarlo verso la porta 80 di Shinj i.
Per permettere la comunicazione in entrambi i sensi
il gateway dovrà effettuare questa conversione
13
utenza domestica. Sicuramente molti di voi utilizze ranno programmi di file-sharing che fanno parte del
network eDonkey come aMule per Lìnux o per
-
(Sanerà*
CsimMiinnr'! >nn
■ ■■
Capacita della lint j
Windows, i quali, per ottenere delle buone presta zioni in download hanno bisogno di permettere ai
Cimili [i^Uid,)
Onviwu] SO M
"
tan
UfWM
;
>Wi
AlKIBOn* IKI
(fetta!
■-
;
■
colari, una TCP ed una UDP.
>sn
:
;
TCP
client esterni la connessione verso due porte parti
ta^
:
Una fase
1BI1
del settaggio
UOP
r
li!
ai aliila
v
:
-Fono mamme pti We
ConnoiilorM ni
interna, sarà necessario configurare sul gateway le
delle
opportune regole per permettere il port forwarding
preferenze
verso le due porte incriminate.
di aMule
[ i mise tenne s sia ni
Limite mutino
Se l'host su cui gira il client è un host della rete
Per individuare tali porte possiamo procedere in
vari modi. Il più semplice è quello di consultare la
iiim>
configurazione del programma. Nel caso di aMule.
possiamo trovare l'informazione richiesta sotto x
Preferenze->Connessione {figura 4),
(Hconrxa aspo pennu rtmntivi M
In corrispondenza del campo TCP abbiamo, ovvia n m ■ u
1 ' '
minora
mente, la porta TCP da utilizzare e in corrisponden za di UDP abbiamo ovviamente la porta UDP. Supponendo che il client aMule sia Asuka, il cui indi
rizzo IP è 192.168.G.2, ecco le due regole di cui
;_«LJL
abbiamo bisogno:
Rei:-# ìptables -1 nat -p
WEBOGRAFIA
Riferimenti web
--dport
Rei:-* iptables
■p
Chi volesse approfondire gli aspetti dei networking Linux
tep
udp
-t
nat
--dport
A PREROUTING
4663
-j
DNAT
A PREROUTING
4672
■)
DKAT
d IP-pubblun
■ -to-fleslinalioii
-d
192.168.0.2
IP-pubblico
■-to-destinauon
192.168.9.2
legati alla qualità del servizio (QoS) può consultare l'interes
Come per il masquerading, possiamo realizzare uno
sante sito:
script da inserire nella directory /etc/ppp/ip-up.d/,
http://wwrt.lartc.org
chiamato Olstartpf. Supponendo di voler effettua
Per chi invece vuole imparare ad utilizzare iptables è pos
re il port-forwarding dei servizi precedentemente
sibile consultare il seguente sito:
illustrati (ovvero Apache e aMule), ecco il risultato:
http://www.linuxguruz.coni/iptables/howto/ Sempre relativamente ad ìptables, per quanto riguarda
• (/llln/sh
l'argomento specifico del NAT. si può consultare il relativo
IPTAELES=/stun/iQtaoles
documento HOW-TO:
http://www. notfilter.org/documentation /HOWTO/NAT-HOWTO.h trai
Lo script di traffic shaping presentato in queste pagine è disponibile per ii download su:
1IPTABLES
-t
nat
-F
iIPTABLES
t
nat
-A PREROUTING
--dport
http://www.linuxpratico.com/networking/lpshaper.tqz ÌlPrABLE5
t
nat
iIPTABLES
t
nat
89
j
-A
■■dport
4662
1
■]
-d
DNAT
-p Up
--to-destlnation
-d JPPP LOCAI
DNAT
PREROUTING 4672
-d SPPP LOCAI
DNAT
-A PREROUTING
-dport
anche per i pacchetti che da Shinji vanno verso
PREROUTING
-u
- -to-deslination JPPP_LOCAI
-p
192.168.8.3
tep
-
192.16H.S.2
udp
-to-destination
192.168.6.2
l'host che ha effettuato la richiesta. Uno dei metodi con il quale si può ottenere que
La variabile SPPP LOCAL viene passata in modo
sto risultato è quello che consiste nell'utilizzo di
automatico da pppd allo script e sta ad indicare l'in
iptables per sfruttare una forma particolare di NAT
dirizzo IP pubblico che ci è stato attribuito dal
denominata DNAT {Destination NAT). Andiamo a
nostro provider.
vedere il comando da utilizzare per poi fornirne una breve spiegazione:
Conclusioni Come abbiamo visto, con alcuni sempiici accorgi
Rei:~# iptables -p
tep
--dport
-t
nat
89
■)
-A PREROUTING QNAT
-d
IP-pubblico
■■to-de5tination
192.168.e.3
menti è possibile migliorare le prestazioni della pro pria connessione: la presenza di un server DNS che fa caching delle richieste e la classificazione (e con
14
In questo modo si comunica al kernel di Rei di rein
seguente prioritizzazione) del traffico in base a
dirizzare tutti i pacchetti destinati all'indirizzo
regole specifiche possono aumentare molto la
IP-pubblico (opzione -d, destination} e alla porta
responsività della rete e diminuire la latenza in
TCP (-p
tutte quelle operazioni interattive che si svolgono
tep} 80 (--dport
80) all'indirizzo IP
192.168.0.3 (opzione - - to-destination). La porta
tutti i giorni.
di destinazione è sottintesa (80).
Chi vuole, potrà approfondire gli argomenti trattati
Concludiamo con un altro esempio, utile nel caso di
sui siti segnalati nel riquadro Riferimenti Web.
~
Configurare un DNS Server con BINO 11 servizio offerto da! DNS è estremamente importante nelle moderile reti, sìa esposte su Internet - per le quali diventa fondamentale - sia per le reti locali: ecco come fare con BIND, il DNS server più diffuso.
Marco Ceresa <m.ceresa@linuxpratico.coni>
Installare un server DNS è una operazione che può essere effettuata in tutta semplicità senza troppe complicazioni: è un ottimo punto di par tenza per successive sperimentazioni, dato che il
Server: questa fase riguarderà sia la definizione
DNS è un protocollo cruciale per tutti gli altri: web,
delle impostazioni del server vero e proprio
maii, ftp sono esempi di servizi che si appoggiano
(named.conf ), sia ia scrittura dei file di zona (db.*),
alla risoluzione dei nomi. Vedremo di seguito come
dove verranno inserite le informazioni riguardo ai
configurare B1MD (Berkeley Internet Name Domain),
record che il DNS dovrà gestire. La directory di lavo
il più popolare e diffuso DNS Server in circolazione,
ro standard per Bind può cambiare da distribuzione
realizzato dallo ISC (Internet Systems Consortium,
a distribuzione: in Debian è situata in /etc/bind/
http://www.isc.org).
(sia named.conf che file dì 2ona), mentre in Mandrake le zone stanno in /var/named mentre i
Installazione
file di configurazione di Bind in /etc/.
Prima di tutto sarà necessario procurarsi il pacchet to di Bind per provvedere all'installazione: è possi
Scenari e configurazione
bile scaricare i sorgenti direttamente dall'ftp ufficia
A seconda della funzione che andrà a svolgere il
le del prodotto, disponibile all'indirizzo
server DNS si possono identificare diversi scenari di
ftp://ftp.isc.org/isc/bind/
utilizzo. Nella configurazione più semplice, esso non
Sia che stiate utilizzando Mandrake Linux che
dovrà gestire alcun database, ma semplicemente
Debian GNU/Linux, Bind sarà già disponibile in pac
centralizzerà le richieste provenienti dalla rete loca
chetto binario pronto ad essere installato con le tec
le, ad esempio, offrendo un servizio di cache per la
niche classiche (il pacchetto, normalmente, è dispo
memorizzazione delle richieste più frequenti.
nibile nei edrom di installazione).
Alle richieste DNS qualcuno, però, dovrà rispondere.
Con Debian sarà sufficiente un
Le operazioni di un DNS Server, quindi, dovranno andare oltre il servizio di cache: quando c'è da
# apt-get
instali
gestire un dominio - sia esso pubblico, quindi rag
bina
giungibile via Internet, o locale, interno all'ufficio ad mentre con Mandrake si utilizzerà il tool urpmi
esempio - è necessario indicare al server come rispondere alle varie query DNS che verranno effet
# urpnii
tuate. Queste indicazioni vengono inserite nei
bind
cosiddetti "file di zona", presenti nella directory di A questo punto sarà necessario configurare il DNS
lavoro indicata nel file named. conf.
I file di zona vengono normalmente chiamati in
INFORMAZIONI
La cache del DNS La cache di un DN5 server è contenuta in una zona della memoria RAM appositamente dedicata da BIND a questo
modo tale da rendere evidente il loro contenuto: in
caso di risoluzione "diretta" (Nome host -> IP), il nome del file sarà db. nomezona, ad esempio db.linuxpratico.net; per la risoluzione "inversa",
quando cioè si vuole recuperare il nome dell'host dall'indirizzo IP, ì file delle zone avranno un nome
scopo. Per questioni legate al funzionamento interno del
simile a db.192.168 (esempio di zona con indirizzi
programma e, soprattutto, per ovviare ad alcune proble
locali), oppure db.81.17.149 (esempio di zona con
matiche di sicurezza abbastanza gravi, non viene tenuta
indirizzi pubblici).
una copia della cache su memorie non volatili, come il disco fisso, in un file apposito.
Non c'è quindi modo di salvare da qualche parte tutte le informazioni contenute nella cache, per un utilizzo succes
Un server DNS cache-nnly La prima configurazione che si prenderà in esame è
sivo o per spostarle da un name server all'altro.
quella di un name server di tipo cache-only. Ciascun
Se, per qualche motivo, dovesse essere necessario il riav
name server, di qualsiasi tipo esso sia, utilizza una
vio del dns server, il contenuto della cache andrà perduto,
parte di memoria per contenere le informazioni
ed il server dovrà quindi ripartire dai forwarder.
relative alle risoluzioni di indirizzi già effettuate.
Caratteristica del server cache-only è però quella di
~ essere dedicato esclusivamente a questo compito,
RIQUADRO 1
offrendo una grande flessibilità in fase di progetta zione di una rete {anche piccola, come quella casa
Seruer DNS Cache-only:
linga o di un ufficio di modeste dimensioni).
file named.conf
Il server cache-only non è autoritativo per nessuna zona ed avremo quindi bisogno solamente del file
//
di database db. 127.0.0.
//
Vi sono due possibili scenari di funzionamento per
//
Configurazione
un server cache-only: quello che prevede la risolu
//
con root
zione degli indirizzi a partire dai root-server, e quel la detta di forward (esclusiva o meno}, che deman
named.conf
options
-
only
per un
name
server cache only
resolution
{
directory
da la risoluzione al DNS del vostro provider.
cache
// la dir di default,
"/var/named";
Occupiamoci del primo caso: risoluzione con inter
//
da
//
necessita'
cambiare
a seconda
delle
rogazione dei root-server. Il file named.conf sarà simile a quello presente nel riquadro 1. Una nota riguardante il file dei root server, qua
zone
indicato come named.root: a seconda della distri buzione utilizzata potrebbe chiamarsi in maniera
"O.Q.127.in-addr.arpa" type
master;
file
"db.127.0.0"i
{
diversa (ad esempio, su Mandrake tale file prende il nome di named. ca).
zone
Le prime righe del file avvertono il server della ubi cazione della directory di lavoro, quella che conter
"."
{
type
hint:
file
"named.root":
rà i file di zona. Successivamente, si definiscono due zone: la zona di loopback, le cui informazioni sono presenti nel file db. 127.0.0, e la zona root,
RIQUADRO 2
nel file named . root. Il passo successivo è la creazione di questi due file.
Server DNS Cache-only:
Partiamo con la zona di loopback (riquadro 2):
la zona di loopback
abbiamo definito una cache per la zona di 24 ore
(5TTL 24h), ed i record SOA (il DNS è autoritativo per la zona rete. test). NS (il name server associa to alla zona) e PTR (per la risoluzione inversa del l'indirizzo 127.0.0.1
che viene tradotto con
localhost). I valori inseriti nel record SOA possono essere
lasciati come indicato, sono comunque commentati ma vi consiglio di non cambiarli. Discorso a parte
li
db.127.0.0
// //
File di
//
127.0.B.1
//
Vengono effettuate
STTL
configurazione per è
il
la
zona
loopback
localhost query per
l'indirizzo di
loopback
24h
G.0.127.in-addr.arpa.
IN SOA ns.rete.test
hostmaster.ns.rete.test
2Q84061S01
;
Serial
merita il campo Serial, che influenza il meccani
3h
;
Ref resti
smo master/slave dei DNS server.
Ih
;
Retry
Da ultimo è presente il file con la zona root, che
lw
;
Expire
Ih)
;
Negative cache
specifica le informazioni per contattare i root server.
Una volta completata la configurazione, è necessa rio far partire il server, o rìavviarlo nel caso fosse
0.B. 127.in-addr.arpa.
IN
NS
1.6.0.127.in-addr.arpa.
IN
PTR localhost
ns.rete.test
già in esecuzione. Con Debian sarà sufficiente un
/etc/init.d/bind
restart
RIQUADRO 3
mentre su Mandrake sì potrà utilizzare il comando
servite
named
Server DNS forwarder: file named.conf
restart
Contattare i root server per la risoluzione è il com portamento di default di un server DNS, ma spesso
non è la soluzione conveniente. Per un utente casa
//
named.conf
-
foruarder
// // Configurazione por nome server cache only //
con
forwarders
lingo, tipicamente dotato di connessione dial-up con ADSL, 1SDN o addirittura modem analogico, si
ottengono migliori prestazioni configurando il server cache-only come forwarder.
options
{
directory 'Vvar/named";
forwarders {
192.168.(5.1;
Il concetto di forward è insito nel meccanismo di gestione delle risorse del DNS: se l'informazione per la risoluzione di una query non è presente nella
192.168.0.2;};
// da sostituire con gli indirizzi ip // dei dns del provider forward
first;
//
oppure
"forward only;"
cache di un name server, si possono avere tre com
portamenti differenti:
12
^
> il server contatta i root server per conto proprio;
contribuiremo a generare meno traffico inutile in
se questi non sono esponibili, restituisce un mes
Internet. Come a dire, la banda non è mai troppa.
saggio di risorsa non disponibile;
Per implementare un DNS cache-only è quindi
> il server inoltra !a query ad uno o più name
necessario modificare alcune righe del named.conf,
server indicati nel file di configurazione (forward
ne! modo indicato nel riquadro 3. Naturalmente, in
only); se la query non viene soddisfatta, restitui
caso di forward only, non è più necessario interro
sce un messaggio di risorsa non disponibile;
gare i root server, e quindi la zona "." può essere omessa ed il file named. root cancellato.
> il server inoltra la query come al punto preceden
te e, se non ottiene l'informazione richiesta, prov
Interrogare il
vede a contattare i root server (forward first).
name
server
Tipicamente si impostano i forwarder con gli indiriz zi dei name server del provider che ci fornisce la
Proviamo ora ad interrogare il name server per veri-
connettività; in questo modo si hanno due vantaggi:
ficare se la nostra configurazione è corretta. Anzitutto digitiamo:
> il DNS server del provider impiega meno tempo a rispondere di altri dns, compresi i root server;
5
> i DNS server dei provider hanno in genere una
host
wvAj.google.it
wvw.google.it
ìs an alias for www.google.com.
cache molto ampia, a causa delle numerose
www.google.com
richieste che ricevono; ciò aumenta la probabilità
wkM.google.akadns.net
che la risorsa cercata sia già presente, velociz
www.google.akadns.net has address 66.162.9.99
is
an
alias has
for www.google.akadns.net. address
66.102.9.164
zando ulteriormente le risposte. Se otteniamo una risposta come quella presentata,
In più, configurando come forwarder il name server.
allora il name server funziona e le richieste sono
INFORMAZIONI
Vantaggi di un server "cache nnly" Un name server locale di tipo cache only, come quello appena
Name: Adflress: Name:
Address:
www.google.akadns.net 216.239.59.104 www.google.akaans.net
216.239.59.99
visto, offre numerosi vantaggi alle reti in cui è situato. Anzitutto è molto facile da configurare e richiede poche risor se hardware, giusto qualche Mb di RAM in più. Grazie poi al meccanismo della cache, la velocità di connessione percepita diventa molto maggiore, poiché minori saranno i tempi di attesa per la risoluzione di un record.
Di seguito è presentato un test che ciascuno di voi può ripete
real
GmB.257s
user
GmB.GGOs
sys
O-.O.OOS'.
$
time
nslookup www.google.it
re a casa con molta facilità. Si tratta di misurare il tempo che
Server:
192.168.G.254
impiega una nostra query nelle tre configurazioni che abbia
Add ress:
192.168.G.254SS3
mo analizzato: root resolver, forwarder e cache. Non-authoritative answer:
$
time
nslookup www.google.it
Server:
192.168.6.254
Address:
192.168.G.254S53
wuw.google.it
canonical
name = www.google.com.
www.google.com
canonical
name = www.google.akadns.net.
Name: Address:
Name:
Non-authoritative answer:
www.google.it
canonica!
name = www.google.com.
www.google.com
canonica!
name = www.google.akadns.net.
Name: Adefress:
Name:
Address:
www.google.akadn5.net 216.239.59.90
www. google.akadns.net
216.239.59.164
Address:
www.google.akadns.net 216.239.59.164
uww.google.akadns.net 216.239.59.99
real
OmO .O2Bs
user
OmO .OOBs
OmB .OGBs
Nel primo caso, il nostro name server ha dovuto contattare i vari root server e risolvere la query a partire da quelli. In tota
real
0m3.347s
user
QmQ.698s
sys
6i7iG.616s
le ha impiegato 3.347 secondi per fornire la risposta. Nel secondo caso abbiamo contattato il forwarder, presumibil mente il DNS del nostro provider, il quale ha risposto con una
informazione presente nella sua cache, ed ha impiegato in $
time
nslookup www.google.it
Server:
192.168.6.254
Address:
192.168.0.254#53
totale 0.257 secondi.
Infine, nel terzo caso, il nostro server ha restituito una rispo sta presente nella sua cache, impiegando 0.028 secondi. La
differenza rispetto ai due casi precedenti è palese, impietosa soprattutto se confrontata con la risoluzione a root server.
Non-authontative answer: www.google.it
canonical
name - www.google.com.
www.google.com
canonical name = www.google.akadns.net.
Pensate: ogni volta che navigate, si tratta di scegliere se aspettare circa 3 secondi per ogni indirizzo che digitate,
oppure attendere 28 miltisecondi. lo prediligo la seconda.
RIQUADRO 4
soddisfatte. Vediamo adesso più in profondità meccanismo di risoluzione: S
Testare il funzionamento del DNS con dig
nslookup www.oltrelinux.com
Server:
192.168.0.254
AdtJress:
192.168.9.254#53
$
dig
oltrelinux.com soa
«» DiG
9.2.2 <«» oltrelinux.com soa
Non-authoritative answer:
;
global
www.oltrelinux.com
;
Got
;
-»HEADER-;<-
Name:
canonical name = karma.oltrelinux.com.
karma.oltrelinux.com
AdtJress:
options:
pnntcmd
answer:
npcode:
; Ilags: qr rd ra; OUERY:
8G. 17.149.253
Tra le altre informazioni che il comando nslookup
restituisce, possiamo notare la frase "non-authori tative answer". Tale informazione ci avvisa appunto che la risposta alla nostra query non è da conside
rarsi completamente affidabile: l'host in questione
;
OUERY.
status:
NOERROR,
id:
53102
1, AKSWR: 1. AUTHORITY; 3, ADOITIONAL: 3
OUESTIOM SECTION:
oUrelinux.com.
;
ANSWEfi 5ECTI0H:
oltrelinux.com.
0
IN
SOA
nsl.oltrelinux.com.
hostmaster.oltrelinux.com.
potrebbe non avere più lo stesso record, oppure
200-1031301 1800 7200 604890 7200
non essere addirittura più presente all'interno del dominio.
Ecco che cosa è avvenuto: il nostro DNS server ha
;;
Query time:
inoltrato la query ad uno dei forwarder presenti nel
;;
SERVER:
file di configurazione. Questo forwarder ha poi
;; WHEN:
risposto con una informazione presente esclusiva
;;
107 msec
192.168.0.254*531192.168.9.254)
Sat
HSG SIZE
Jun
5
rcvd:
16:14:31 26B4 181
mente nella sua cache, magari datata di qualche ora o di qualche giorno. Se nel frattempo sono avvenuti cambiamenti, il forwarder non ha modo di
saperlo e di aggiornare la sua cache. Per questo
RIQUADRO 5
motivo, è bene non assegnare valori troppo alti al
1 Testare il funzionamento
Time to Live (TTL) della cache.
Controlliamo allora che le risposte siano giuste. Per
del DNS con nslaohup
farlo, dobbiamo sapere qual è il name server autoritati vo per la zona oltrelinux. com. Usiamo questa
S nslookup www.oltrelinux.com nsl.oLtrelinux.com
volta dig (riquadro 4).
Server:
nsl.oltrelinux.co™
Il campo 50A è proprio quello che identifica un
Address:
86.17.149.253*53
name server autoritativo per una certa zona. In questo caso, scopriamo che nsl.oltrelinux.com è
www.oltrelinux.com
il DNS autoritativo per il dominio oltrelinux.com.
Name:
Utilizziamo adesso nslookup (riquadro 5) e questa
Address:
canonical
name = karma.oltrelinux.com.
karraa.oltrelinux.com
86.17.149.253
volta la risposta è autoritativa. Possiamo stare sicu ri che le informazioni ricevute sono corrette.
Configurare un DNS server primario Si vedrà adesso come è possibile costruire un dominio per la nostra rete casalinga e gestire la
INFORMAZIONI
La propagazione delle informazioni DNS
zona configurando un DNS primario che risolva i
Logicamente in una rete casalinga non ha molto senso, ma
nomi interni ed esterni. A titolo di esempio, chia
se il DNS server che state configurando andrà a fare parte
miamo il dominio casamia.lan.
integrante del sistema di risoluzione di Internet. perché
Supponiamo di avere uno scenario di rete come
volete rendere pubblica la vostra zona, vi chiederete come
quello indicato dal riquadro 6, che mostra la corri
mai non siate raggiungibili dall'esterno.
spondenza tra gli host,
Per prima cosa, banale finché volete ma fondamentale,
i nomi di dominio e gli
indirizzi IP.
Creare i file di zona La prima operazione da eseguire è creare i file di zona. Questi file contengono le informazioni che il DNS server dovrà restiruire quando interrogato; possiamo considerarli una sorta di database interno
relativo alla nostra configurazione di rete.
Come già detto, esistono sostanzialmente due tipi di file di zona, a seconda delle operazioni che si intendono effettuare:
~
bisogna registrarsi presso uno degli enti preposti allo scopo. Registrarsi quindi significa pagare una quota per poter
utilizzare il proprio nome di dominio ed avere visibilità nei vari DNS. Il problema della propagazione sorge quando,
modificando i record del vostro DNS, vi accorgete che alcuni name server restituiscono ancora le vecchie informazioni. Questo comportamento è dovuto proprio alla presenza della
cache: evidentemente questi DNS non hanno ancora avuto la scadenza della TTL per i vostri dati. La soluzione? Aspettare! Ecco perché generalmente è meglio non impostare delle TTL troppo lunghe.
~
RIQUADRO 6
> risoluzione nome -> indirizzo: ci si riferisce con il nome forward mapping
Tabella degli indirizzi per
■ risoluzione indirizzo -> nome: ci si riferisce
la rete casamia.lan
con il nome reverse mapping
host
FQDN
indirizzo IP
camera
camera.casamia.lan
192.16B.10.1QO
Nel
cucina
cucina, casalina, lan
192.168.1B.8B
db.DOMINIO, dove DOMINIO per noi è casamia.lan.
sorella
sorella.casamia.lan
192.168.1B.9B
Nel secondo caso, avremo il file db.INDIRIZZO, con
rtns
dns.casamia.lan
192.168.1O.20D
INDIRIZZO gli ottetti della parte relativa alfa rete
router
router.casnia.tan
192.16B.10.1
degli indirizzi IP, cioè 192.168.10.
per cui abbiamo la zona diretta e la zona inversa.
primo
caso,
chiameremo
il
database
La sintassi usata in questi file è relativamente sem plice; nel paragrafo precedente abbiamo già avuto ^H
/fe^g Configurazione di un database per
//
indirizzi
la
risoluzione
Diretta della
DNS
due file:
rete casamia.lan
touch
db.casamia.lan
#
touch
dD.192.168.10
Inserite ora, con il vostro editor preferito, le righe
STTL
3h
nei file di configurazione presenti nel riquadro 7.
casamia.lan.
IN SOA
dns.casamia lan.
hostmaster.dns casamia.lan.
2004061501
;
Serial
3h
;
Refresh
ih
;
Retry
lu
;
Expire
Ih)
;
Negative
(
Alcune particolarita di questo file meritano attenzio ne. Avrete notato che tutti i nomi di dominio termi nano con un punto. Tale punto finale non è punteg
giatura, bensì sta ad indicare che ii nome di dominio in questione è completamente specifi
cache
cato; ad esso non dobbiamo più aggiungere nessun suffisso di dominio. Questo ad esempio non capita
server dns
casamia.lan.
//
#
192.168.1G.G/24
//
//
Procediamo dunque in modo analogo. Spostiamoci nella directory /var/named e creiamo i
H^B primario: db.casamia .lan //
un assaggio di come si scrive un file di zona.
IN
NS
dns.casi mia.lan.
con il nome cucina, che in fase di risoluzione diret ta viene espanso in cucina.casamia.lan. Se ci dovessimo dimenticare di inserire il punto finale,
forward mapping
avremmo un tentativo di risoluzione per il FQDN
camera.casamia.lan.
IN
A
152.Ì5S
cucina.casamia.lan.
IN
A
192.168 10.88
cucina.casamia.lan.casamia.lan.
sorella.casamia.lan.
IN
A
192.163
Prendiamo ora in esame il record SOA. Esso ci avvi
dns.casamia.lan.
IN
A
192.168 10.290
roiiter.casmia.lan.
IN
A
192.168
16.196
10.90
10.1
sa che il name server in questione è autoritativo
per la zona casamia.lan (vi ricordate il discorso precedente sulle risposte autoritative?), e che le
//
alias
informazioni di tipo autoritativo provengono esclusi
ns.casamia.lan.
IN
CNAME
dns.casamia.lan.
gateway.casamia.lan.
IN
CNAME
router.casata.lan
vamente da questo name server.
Dopo la parola chiave SOA, infatti, abbiamo specifi cato il FQDN del DNS server (che, con molta fanta sia, abbiamo chiamato dns . casamia . lan .) e un
MINI GLOSSARIO FQDN (Full Qualifred Domain Name): nome di
dominio completamente specificato; ad esempio
cucina non è FQDN, mentre cucina, casamia. lan sì. SOA (Start of Autorrty): indica che il name server è autorita
tivo per la zona specificata. Per ogni zona ci può essere un solo record SOA.
NS (Name Server): sono i record che definiscono i nomi dei name server.
A (Address): corrispondenza nome -> indirizzo. PTR (Pointer): corrispondenza indirizzo -> nome.
CNAME (Alias): permette di specificare degli alias (sinonimi) per i nomi.
Unità di misura: i valori temporali definiti nei file di zona pos sono essere espressi in due modi complementari. L'unità di
misura generalmente usata è il secondo, ad esempio Retry 3600 (un'ora) oppure Expire 604800 (una settimana).
indirizzo di posta valido presso cui contattare l'am ministratore del DNS, Poiché nella sintassi di BIND il carattere @ ha un significato speciale, l'indirizzo è
espresso nella forma hostmaster.dns.casamia.lan, da intendersi come tiostmastenadns .casamia . lan.
Successivamente abbiamo indicato il record di tipo NS, per rispondere alfe query che interrogano il database con l'intento di scoprire quali siano i DNS server della nostra zona.
Volendo, se avessimo a disposizione più di un DNS server, avremmo potuto specificare più indirizzi.
I record di tipo A ci permettono di specificare il forward mapping per tutti gli host della nostra rete.
Infine, i record CNAME sono degli alias, o dei sino nimi, per alcuni FQDN presenti nei record A. Cosi
facendo, possiamo identificare ad esempio l'host router
con
router.casamia.lan
ovvero
Eventualmente, per una più facile comprensione, si utilizzano i
gateway .casamia. lan indifferentemente.
suffissi h (ora), d (giorno), w (settimana) come negli esempi.
Diamo ora uno sguardo al database per la zona inversa, presente nel riquadro 8.
15
E' del tutto simile al precedente. Abbiamo solamen
RIQUADRO 8
te sostituito ai nomi di dominio i corrispondenti
Configurazione di un DNS
indirizzi
primario: db.192.168.10 //
database
//
della rete
STTL
per
la
inversi
della
rete,
nella
forma
indirizzo, in-addr.arpa, come spiegato nella teo ria. I record per il reverse mapping ora sono del tipo PTR, abbreviazione dì pointer, che ricordano i
risoluzione inversa
puntatori del linguaggio C.
192.168.18.6/24
Occorre scrivere anche il file di zona loopback,
3h
10.168.192.in-addr.arpa.
IN SOA
dns.casamia.lan. hostmaster.dns.casamia.lan.
come abbiamo fatto precedentemente per il server cache only. Le uniche voci da modificare sono quel
29Q4O61501
;
Serial
le relative al nome del name server (è consigliato
3h
;
Refresh
come esercizio per chi legge).
Ih
;
Retry
Passiamo infine ad inserire le informazioni di confi
lw
;
Expire
gurazione nel file /etc/named .conf. Saranno da
Ih)
;
Negative cache
//
impostare alcuni forwarder e, come esempio, sce glieremo i DNS di Telecom Italia, comodi per chi ha
dns
//
una ADSL Alice. Sostituite altrimenti gli indirizzi con
//
quelli forniti dal vostro provider.
200.10.168.192.inaddr.arpa.
IN
MS
dns.casamia.lan.
Facciamo partire named con i comandi visti sopra, e
controlliamo che non ci siano errori di startup: //
reverse mapping
U grep named
//
ÌQS.10.168.192.ìn-addr.arpa.
IN
PTR
camera.casamia,lan.
80.10.168.192.in-addr.arpa.
IN
PTR
cucina.casamia.tan.
90.16.168.192.ìn-addr.arpa.
IN
PTR
sorella.casanua.Lan.
200.10.168.192.ìn-addr.arpa.
IN
PTR
dns.casamia.lan.
1.1G.168.192.in-addr.arpa.
IN
PTR
router.casamia.lan.
•
ps
au*
#
netstat
|
/var/log/message
grep na
named
■(
inet
|
grep
53
Con questi comandi ci possiamo rendere conto se BIND è partito in modo corretto. In caso di errori, controllare per prima cosa che i file di zona siano corretti e che abbiano i permessi giusti.
Una tecnica veloce per verificare che la sintassi dei RIQUADRO 9
Configurazione di un DNS primario: named.conf //
file di configurazione per un dns casalingo
//
dominio:
casamia.lan
//
network:
192.168.18.0/24
options
file di configurazione siano corretti è utilizzare due utility preposte allo scopo:
a named-checkconf
/etc/na/Jed.conf
controlla il file di configurazione e
# named-checkzone <nomezona> <filezona=-
(
controlla i file di zona, ad esempio:
directory forward
"/var/naaed"
first;
forwarders
* ngtr.ed-checkjone casamia.lan /var/namea/db.casamia.lan
{
212.216.112.112;
Una volta partito BIND, usiamo i comandi host. dig,
212.216.172.62;};
nslookup come visto precedentemente per interro gare il name server: zone
"casamia.lan"
in
{
type
master;
file
"db.casamia.lan";
zone
"10.168.192.ìn-addr.arpa"
type
in
"0.0.127.ìn-addr.arpa" master;
file "db.l27.0.G";
dig
@dns
cucina
i
dig
-x
casamia.lan
any
192.168.18.166
(
Configurazione dei client
V.
type
host
J
sono solo alcuni esempi tra quelli possibili.
master;
file "db.192.168.10";
zone
$
in
{
Per poter sfruttare il DNS server appena installato
sarà necessario indicare ai client della rete di utiliz zare l'indirizzo \P del server come resolver: come
già visto a pagina 9 di questa stessa sezione (5y9) sarà sufficiente indicare tale indirizzo nel file zone
"."
in
{
type hint; file
"naneil. root";
/etc/reso\v.conf.
Risorse web E' possibile effettuare il download degli esempi su http:/A**v.l inuxpratico. con/ riso rse/networking/bind.tar.gz
La gestione del filesystem con Linux Non è possibile amministrare una Linux box senza conoscere la strut tura del fìlesystem, a livello logico ma anche a li-cello fisico: device, partizioni, inouni, sono alcuni dei concetti che verranno presentati
Francesco Sportolari <f.sportolari@linuxpratico.coms
In un sistema operativo il filesystem ricopre un ruolo di fondamentale importanza, che è quello di stabilire l'organizzazione dei file all'interno di
un dispositivo di memorizzazione di massa, sia esso
Si vedrà più avanti come ogni partizione trova la
un disco rigido, un CD-Rom o una chiave USB.
sua collocazione in questa particolare organizzazio
I dispositivi di memorizzazione di grandi dimensioni,
ne dei file.
come gli hard disk, possono essere suddivisi in par
Come abbiamo detto, in Linux ad ogni partizione
tizioni, ciascuna delle quali è in grado di ospitare un
corrisponde un file speciale tramite il quale è possi
filesystem.
bile effettuare le varie operazioni necessarie per
Attenzione a non confondere il concetto di partizio
interagire con il filesystem che risiede all'interno
ne con quello di filesystem: una partizione è sempli
della partizione in questione. Ciascuno di questi file
cemente un contenitore di filesystem, quest'ultimo,
segue uno schema di numerazione che dipende dal
a sua volta, consiste nell'organizzazione che si
tipo e dalla posizione della partizione nel disco.
impone ai file ed alle directory tramite l'ausilio di
Riferendoci al disco IDE rappresentato dal file
opportune strutture dati che risiedono fisicamente
/dev/hda, le partizioni primarie in esso contenute
sul disco. Prima di poter utilizzare una partizione
saranno
per contenere i nostri file è necessario formattata.
/dev/hdal a /dev/hda4. Le partizioni logiche sono
identificate
dai
file
che
vanno
da
Nelle distribuzioni Linux è presente il comando mkf 5
invece
per assolvere a questo scopo.
/dev/hcia5 a /dev/hdal6 e, nel caso ci sia almeno
rappresentate dai file che vanno da
Le partizioni primarie e le partizioni logiche impon
una partizione logica, ovviamente /dev/hda4 corri
gono all'hard disk una suddivisione in "dischi logi
sponderà alla partizione estesa e non sarà utilizza
ci", i quali contengono filesystem indipendenti tra
bile. La figura 1 mostra una possibile suddivisione
loro. Nei sistemi Windows, generalmente ciascuna
per l'hard disk identificato dal file /dev/hda.
partizione è riconosciuta come un disco a sé stante,
I file speciali che identificano le partizioni vengono
indentificato da una lettera (C:, D:, E:
utilizzati come argomenti per alcuni comandi che
e così via).
Nei sistemi Linux, invece, l'utente ha accesso ad
operano con i fiiesystem. Tramite questi file è possi
un'unica collezione di oggetti organizzata ad albero,
bile formattare una partizione, controllare il filesy
la cui radice è la cosiddetta "root directory", identi
stem in essa contenuto alla ricerca di eventuali
ficata dal carattere /, all'interno della quale risiedo
errori ed "agganciarla" ad una delle directory del
no tutti i file e le directory del nostro sistema.
virtual filesystem in modo da poter accedere ai file in essa contenuti. Ad esempio, con il comando:
# mke2f5
■j
/dev/hdaZ
si crea all'interno della partizione identificata da /dev/hdol Partizione
/(Jev/hda2
i1 r 1 MI] 1
Primaria
Partizione
/dev/hda3 Partizione Primaria
_-
/dev/hdaS
/dev/hda6
Partizione
Partizione Logica
Logica
/dev/hda2 un filesystem di tipo ext3.
/dev/hda4
Partizione Estesa
"mount" e "unmount"
/
'
/dev/hda? Partizione Logica
di un filesystem Linux supporta un numero elevato di filesystem. i quali differiscono per il modo in cui i dati sono orga
nizzati fisicamente sul supporto di memorizzazione (si veda il riquadro a pagina successiva).
Fortunatamente, queste differenze sono maschera te all'utente dal virtual filesystem, il quale fornisce Un esempio di partizionamento del disco con tre partizioni primarie e tre logiche
una visione univoca dei file indipendente dal tipo specifico di filesystem utilizzato.
La cosa che può spiazzare maggiormente un neofita
~ alle prime armi con Linux è il fatto che esiste una
vo indicato con il primo argomento. Se il tipo non
unica struttura gerarchica per quanto riguarda l'or
viene specificato, Linux tenta automaticamente di
ganizzazione dei file e delle directory. Il virtual
determinarlo.
filesystem Linux. inoltre, può essere distribuito su
Una volta che abbiamo terminato di lavorare con il
più partizioni appartenenti anche ad hard disk
CD-Rom. è necessario "smontarlo" dal mount point
diversi, mantenendo inalterata la sua struttura
al quale è collegato. Questo può accadere, per
gerarchica, come illustrato nella figura 2.
esempio, quando vogliamo inserire un nuovo CD.
Per continuare con il paragone con Windows, Linux
Per effettuare questa operazione possiamo utilizza
utilizza il concetto di mount poìnt invece di asse
re il comando umount, in questo modo:
gnare una lettera ad ogni partizione del nostro disco.
Qualsiasi directory del virtual filesystem può
tt
umount
/mnt/cdrom
essere considerata un mount point anche se, di norma, ad essi corrispondono directory vuote. Una
Dopo l'esecuzione di questo comando, la directory
partizione o un disco (un CD-Rom o un floppy, ad esempio) possono essere agganciati ad un mount point tramite il comando mount. A seguito dell'ese
INFORMAZIONI
cuzione di questo comando tutti i file e le directory contenute nella partizione o nel disco saranno
Riconoscere
disponibili all'interno del mount point selezionato.
dischi rigidi
Un esempio dell'utilizzo del comando mount può aiutare a comprendere meglio questo concetto. Si
I controller IDE, di norma integrati nella motherboard del
supponga di aver inserito un CD-Rom nel drive e di
sistema, sono dotati di due canali indipendenti ai quali è
voler accedere ai suoi contenuti. Eseguendo il
possibile collegare un massimo di quattro dispositivi, due per canale. A seconda della posizione occupata nel canale, i
comando:
#
Is
-la
due dispositivi assumono il ruolo di master o di slave.
I dischi IDE sono accessibili tramite dei file speciali di dispo
/mnt/cdrom
sitivo presenti nella directory /dev. I nomi di questi file sono
total e »
mount
#
I5
total
del tipo /dev/hdX, dove X è una lettera che va da a a d, la /dev/cdrom
-la
/mnl/cdrom
quale riflette la posizione che il disco occupa rispetto al canale IDE al quale è connesso. Ad esempio, il disco master
/mnt/cdrom
connesso al canale IDE principale è rappresentato dal file
265 9
root
root
4896
Mar
29
drwxr-xr-x
9
root
root
4Q96
Juo
14
11:49
../
■r--r--r--
13 root
root
65
Feb
10
09:28
autorun.inf
-r--r--r--
17 root
root
183BS Sep 19
2SS3
dr-xr-xr-x
3
root
2048
root
Mar
29
1B:27
/dev/hda, mentre il disco slave connesso al canale secon
dr-xr-xr-x
10:27
./
dario è identificato dal file /dev/hdd. Al momento del boot, il kernel Linux ci comunica i dispositivi IDE che ha ricono sciuto con un delle linee output simile a queste:
COPYING doc/
il filesystem contenuto nel CD comparirà come per
rida:
QUANTUM FIRESALLP A530.Q.
hdb:
JLHS
htìc:
QUANTUM FIREBALLP
hdd:
LITE-ON LTR-32123S,
DVD-ROH LTD-16SH,
ATA DISK drive
ATAPI
LH2G.5. ATAPI
CD/DVD-ROM drive
ATA DISK drive CD/DVD-ROM drive
magia all'interno della directory /mnt/cdrom, a Oltre a comunicarci il nome del file speciale relativo,
patto che quest'ultima esista, mount può accettare
kernel indica anche il modello del dispositivo.
come parametro, tramite l'opzione -t, il tipo del filesystem contenuto nella partizione o nel dispositi
/dev/hdal
/dev/Ma;
/dev/Ma3
/dev/haa5
/(tev/hda-t
/root
/ijsr
/eie
/dev
/home
/lib
/sbin
/var
/òooi
/proc
La struttura
mm
/usr/XIl
/noiut/user
di un
/var/log
/innl/cilrom
/jsr/local
/var/log/messages
/mnt/floppy
filesystem
Linux: in evidenza i mountpoint delle diverse partizioni
/hoae/user/Ooes/file.t.t
V.:
RIQUADRO 1
II file /Etc/fstab /dev/sdal
/
ext3
defaults
1
ì
/dev/sda3
/home
ext3
defaults
1
2
/dev/hda
/ront/cdrom
auto
iocharsei=iso8859-l,codepage=850,noautn,ro,nosuid,urnask=O,user.exec,nooeu
e
e
/dev/scdfj
/mnt/cdrom2
auto
iocharset=i5o8BS9- l,cadepage=850, noauto, ro. rmsuid, urnask=0,user.exec, nocev
e
e
/dev/fd0
/mnt/ floppy
auto
todepage=B5B,iocharset=i.sQB859-l, sync, unhide, noautD,no5iiid,uniask=0, user, nodev
e
e
/dev/sda-1
swap
swap
defaults
e
e
none
/prò
proc
defaults
B
e
nane
/dev/pts
devpts
mode=G629
e
e
none
/sys
sysfs
defaults
e
e
Nel caso in cui nella terza colonna sia presente la voce "supermount". significa che è attivo una caratteristica del kernel identi ficata con tale nome che permette la gestione automatica dei supporti removibili: tale caratteristica sarà analizzata in dettaglio nelle prossime pagine. Se volete disattivarla, per ritornare al mount e umount manuale dei dispositivi, è sufficiente lanciare il comando
supermount
-i disable da utente root.
GLOSSARIO
Gli altri
ling, le quali forniscono una maggiore
facilità file lunghi anche parecchi
filesystem
tolleranza agli errori causati da eventi
gigabyte.
inattesi come la mancanza di alimenta
vfat (FAT 32)
Ecco un breve elenco dei principali filesystem supportati dal kernel Linux,
zione e tempi più brevi nella fase di check del filesystem.
Linux supporta l'accesso alle partizioni di tipo FAT32 utilizzate dai sistemi ope
con le caratteristiche salienti di ciascu
reiserfs
rativi Microsoft, in particolar modo da
no di essi.
E' un filesystem pensato appositamente
Windows 98.
ext2 E' il filesystem standard di Linux, che ha raggiunto ormai un grado di stabilità
per Linux. anch'esso journaled. molto
performante, specialmente su file di grandezza piccola e media.
NTFS Linux include anche il supporto per il filesystem NTFS. sempre sviluppato da
molto elevato. Da un punto di vista fisi
JFS
Microsoft ed utilizzato dai sistemi opera
co, utilizza delle strutture dati particola
Un altro filesystem journaled; sviluppato
tivi Windows NT, 2000 ed XP E' indub
ri chiamate inode per rappresentare cia-
da IBM, risulta essere molto stabile gra
biamente migliore in termini di presta
scun file. Ogni inode contiene
zie anche al fatto di essere il filesystem
zioni rispetto al filesystem FAT32, anche
informazioni quali i blocchi fisici del
del sistema operativo Unix AIX da molto
se in Linux è supportata soltanto la let
disco nei quali risiede il file, i permessi
tempo.
tura dei dati (l'operazione di scrittura è
di accesso e le date dell'ultimo accesso
fattibile sfruttando Captive).
e dell'ultima modifica.
XFS Anch'esso journaled, è stato sviluppato
ISO9660
ext3
(e portato su Linux) da Silicon Graphics,
E' il tipo di filesystem contenuto nella
E1 l'evoluzione del filesystem ext2, a cui
Ine; è pensato per gestire quantità di
maggior parte dei CD-Rom attualmente
vengono aggiunte funzionalità di journa-
dati veramente notevoli e tratta con
in circolazione.
/mnt/cdrom risulterà vuota, dato che il filesystem
del boot del sistema. Nel riquadro 1 è riportato il
che era ospitato al suo interno non è più disponibile.
file relativo al sistema dell'esempio.
Il file /etc/fstah Montare i filesystem contenuti nei dispositivi rimovi
Ogni linea di fstab rappresenta un singolo filesystem ed è suddiviso in 6 colonne, ciascuna delle quali ha un significato particolare. Nella
bili come i CD-Rom o i floppy è un'operazione che
prima troviamo il nome del file speciale connesso
deve essere effettuata manualmente in quanto pre
alla partizione dell'hard disk o al dispositivo da
suppone che nei drive sia presente un disco. In
montare. Nella seconda, viene indicato il mount
Linux esistono comunque altri filesystem, contenuti
point nel quale andrà innestato il filesystem in que
nelle partizioni del disco rigido, i quali devono esse
stione. La terza colonna indica il tipo di filesystem
re montati nel virtual filesystem il prima possibile,
contenuto nella partizione o nel dispositivo. La
poiché possono contenere file e directory indispen
quarta contiene una lista di opzioni, separate da
sabili per il corretto funzionamento del sistema.
virgola, che influenzano il modo in cui il filesystem
Facendo riferimento al virtual filesystem rappresen
viene montato. La quinta colonna viene utilizzata
tato nella figura 2, si noti come i file contenuti nelie
dal comando dump, una utility di backup che control
directory /usr, /home, /var e /boot risiedono su
la ciascuna riga del file: se in questa posizione è
partizioni differenti rispetto a quelli della root
presente il valore 1, dump effettuerà il backup del
directory.
filesystem così individuato, secondo la propria con
Nei sistemi Linux è presente il file di configurazione
figurazione; per maggiori informazioni vi invitiamo
/etc/fstab, il quale contiene le informazioni sui
alla lettura della pagina del manuale di dump.
filesystem che devono essere montati al momento
La sesta colonna, infine, è utilizzata dal comando
INFORMAZIONI fsck per determinare quali filesystem controllare in fase di boot e l'ordine in cui farlo. Il valore 0 indica
Se la memoria
che il filesystem non deve essere controllato (come
non basta
nel caso dei CD-Rom e dei fioppy disk). Al root filesystem, identificato dal mount point /, deve sempre essere assegnato il valore 1, in modo
Può capitare di sottovalutare il bisogno di memoria del pro prio sistema, ma è possibile porre rimedio a questa situazio
tale da essere controllato per primo, mentre agli
ne creando un file di swap. da aggiungere alla partizione di
altri filesystem andrà assegnato il valore 2.
swap già esistente. Bastano pochi, semplici comandi. Per
Per quanto riguarda le mount options, ovvero quelle
prima cosa, andrà creato un file "in bianco" con dd:
opzioni che compaiono alla quarta colonna di ogni of=swap.img
linea, andremo ad esaminare solo quelle più impor tanti: per tutte le altre si può fare riferimento alla pagina di manuale del comando mount. L'utilizzo
dell'opzione defoults equivale a specificare una
count=512
Come è facilmente intuibile, creeremo un file swap.img di 512 Mb (li:; sta per block size, count per il numero di bloc chi da utilizzare) pieno di zeri. Proseguiamo con;
serie di opzioni adatte per i filesystem che devono essere montati al momento del boot. Tra queste
#
opzioni compare anche auto, la quale indica che il
Setting
mkswap
swap.img
up swapspace versìon
1,
size = 536866
kB
filesystem in questione deve essere montato auto maticamente all'avvio della macchina. Per contro,
ora controlliamo quanta swap abbiamo:
l'opzione noauto, che deve essere specificata per tutti i dispositivi di memorizzazione rimovibili, impo ne di non montare il filesystem a! boot. Questo fatto
tota!
used
free
6S536
6328G
65535
[... ]
potrebbe far pensare che la presenza delle linee relative al CD-Rom e al floppy disk sia superflua. Ciò
non è vero per due motivi: il primo è che possibile montare i media rimovibili in maniera più rapida. Il CD-Rom, relativamente al nostro file /etc/fstab di esempio, potrà essere montato digitando una di queste due forme del comando mount:
Swap: •t
swapon
S
free
Swap:
swap.ing
total
used
free
589816
63289
526536
I - - -1
Con il comando swapon abbiamo, di fatto, abilitato la swap e l'abbiamo aggiunta a quella della nostra partizione.
# mount
/mnt/cdrom
U
/dcv/cdrom
mount
Il resto delle informazioni necessarie saranno infatti
per realizzare il meccanismo della memoria vir
prelevate dalla riga corrispondente del file di confi
tuale che consente di estendere la RAM di sistema
gurazione.
della dimensione della partizione. Come si può
Il secondo motivo riguarda la possibilità di permet
notare dalla linea di configurazione relativa, ricono
tere il mount dei supporti che figurano con l'opzio
scibile dalla presenza della parola swap nella terza
ne noauto anche agli utenti normali del sistema.
colonna, non ha un mount point definito in quanto
Ciò è possibile specificando l'opzione user nella
non viene gestita tramite il comando mount, ma tra
quarta colonna in corrispondenza dei filesystem
mite il comando swapon.
desiderati. Il comando mount, infatti, nella sua forma con due argomenti è disponibile solo per l'utente root.
Il check dei filesystem ext2
Concludiamo la panoramica sul file /etc/fstab
18
citando tre filesystem particolari che sicuramente
Come si è detto prima, all'avvio di un sistema Linux
avrete notato nel file di configurazione di esempio e
i filesystem specificati nel file /etc/fstab vengono
che sono reperibili in tutte le distribuzioni Linux: il
controllati per la presenza di errori tramite il
proc filesystem, il sys filesystem e la partizione di
comando fsck.
swap. Il primo, identificabile nel file fstab dal tipo
Alle volte può accadere che in seguito ad un arresto
di partizione, cioè proc, è un filesystem fittizio (in
poco "pulito" della macchina, ad esempio in seguito
quanto non risiede in nessun disco) gestito diretta
alia mancanza di corrente, i filesystem si vadano a
mente dal kernel.
trovare in uno stato incosistente dovuto al fatto che
I file contenuti in tale filesystem permettono di
alcuni blocchi di dati presenti in RAM non sono stati
accedere a numerose informazioni sul sistema. Alla
salvati su disco.
stregua di un filesystem ordinario, anch'esso ha un
A seguito di un evento del genere il check automa
mount point, che per default è la directory /proc. Il
tico può fallire, chiedendo all'utente di inserire la
sys filesystem, come il proc, è un filesystem virtua
password di root per poter accedere ad una modali
le che offre accesso ad informazioni riguardanti il
tà di emergenza chiamata maintenance mode.
sistema; è stato introdotto nella serie 2.6 del kernel
Una volta entrati in maintenance mode si deve con
ed offre una interfaccia unificata (al contrario di
trollare
quanto accade per proc) su tutte le architetture.
Supponendo che il fifesystem sia /dev/hda2, si
L'area di swap, alla quale deve essere riservata una
dovrà impartire il seguente comando:
partizione dell'hard disk del sistema, viene utilizzata
#
fsck
-y
il
filesystem
/dev/hda2
che
presenta
l'errore.
cosa di ancora più esotico; questo pone il problema L'opzione -y ci evita il fastidio dì dover rispondere
della condivisione dei dati: se, da una parte, abbia
con y (yes) a tutte le domande relative alfa ripara
mo sistemi "chiusi" che difficilmente possono sup
zione degli errori che ci verranno poste.
portare i filesystem di Linux (ext2, ext3 e ReiserFS),
Il controllo della partizione potrebbe fallire ancora
quindi gli sviluppatori dell'amato pinguino si sono
nel caso in cui il superblock del filesystem risulti
dati da fare per supportare la lettura {e la scrittura)
danneggiato. Il superblock è il primo blocco della
dei dati sui sistemi altrui.
partizione che contiene informazioni fondamentali
E' questo ii caso del supporto ai filesystem FAT32,
sul fìlesy5tem ext2 o ext3 in essa contenuto. Data
utilizzati principalmente su sistemi Win9x, di HFS di
la sua grande importanza viene replicato, di solito,
Apple, dei filesystem di Minix ed innumerevoli altri
ogni 8192 blocchi.
sistemi (Amiga, BSD, etc).
Per ripristinare una di queste copie di backup si può
Per quel che riguarda il filesystem di Windows NT,
utilizzare il seguente comando:
Windows 2000 e Windows XP, NTFS, ci sono sempre state alcune lacune nel supporto ufficiale, ma un
* fsck
-f
-b offset
progetto recente promette di eliminare queste man
/dev/hda2
canze, a patto di possedere i driver per Windows XP. dove offset è il numero di blocco che contiene la copia di backup. Ad esempio, per recuperare la
seconda copia di backup si può utilizzare come
Accedere a NTFS in lettura e scrittura
offset il numero 8193 {vedi riquadro). Nel caso sia il superblock ad essere danneggiato
Ricollegandoci a quanto detto prima, sicuramente
della root partition, il sistema fallirà il boot ancor
molti di voi avranno installato una delle varie distri
prima di effettuare il check dei filesystem, in quanto
buzioni Linux sulla propria macchina di casa, nella
la partizione principale è indispensabile poiché con
quale era già presente un altro sistema operativo.
tiene file e programmi necessari per l'avvio del
Nel caso particolare che questo sistema sia
kernel Linux. Una possibile soluzione è quella di uti
Windows NT, 2000 o XP con partizione di tipo NTFS,
lizzare il CD-Rom di installazione di una distro Linux,
normalmente non si ha la possibilità, da Linux, di
come ad esempio il primo ed di Mandrake. Al
scrivere file o creare directory all'interno di questa
prompt lilo: si può inserire linux
in quanto il kernel supporta in modo stabile sola
rescue e pre
mere Invio. Questa operazione avvierà una modali
mente la lettura dei dati.
tà simile a quella di maintenance nella quale è pos
Esiste un progetto molto interessante, chiamato
sibile utilizzare tutti i comandi per la manutenzione
Captive, che permette di utilizzare i driver nativi di
del fiiesystem.
Windows XP (e solo di quest'ultimo: quelli per
Montare altri filesystem
Windows 2000 non andranno bene) per accedere a questo tipo di partizioni sia in lettura che in scrittu
Linux, per sua natura, condivide spesso la "residen
ra senza alcun problema. Andiamo a vedere i passi
za" sull'hard-disk con un altro sistema operativo,
per installare tutto il necessario.
sia esso il classico Windows oppure MacOS o qual-
Come prima cosa è necessario montare la partizio ne che contiene Windows XP nel proprio virtual filesystem. Questa operazione non è indispensabile,
INFORMAZIONI
necessari al funzionamento di Captive.
Come trovare
-
ma semplificherà le operazioni di ricerca dei driver La partizione NTFS in questione può essere indivi duata con l'ausilio di fdisk. Ad esempio, se il nostro
il superblock
hard
Non è detto che il superblock sia ripetuto ogni 8192 blocchi.
disk
è
riconosciuto
dal
sistema
come
/dev/hda, è possibile digitare il seguente comando:
Ciò dipende infatti dai parametri del comando mkf s con cui
è stata formattata la partizione. I blocchi del disco che pos sono contenere dati sono raggruppati in block groups. All'inizio di ogni gruppo viene mantenuta una copia del superblock, quindi il valore di offset da utilizzare varia in proporzione alta dimensione del gruppo. Per conoscere la
#
fdisk
-l /dev/hda
/dev/hdal
*
1
|
grep
3648
-i ntfs 293Q2528.
7
HPFS/NTFS
II file speciale che identifica ia partizione NTFS è
grandezza in blocchi di ciascun gruppo del disco si può uti
quindi /dev/hdal. Possiamo montare il filesystem
lizzare la seguente linea di comando:
relativo con il comando:
# dumpe2fs dumpe2fs
/dev/hda2
1.35
Blocks per
|
grep "Blocks
per group"
(2B-Feb-29Bd)
group:
# mkdir
/mnt/WINDOWS
* mount
-t
nifs /dev/hdal
/mnt/WlNDOWS
32768
Nel caso dell'esempio la dimensione di un gruppo e pari a 32768 blocchi, quindi l'offset da impartire al comando fsck sarà 32769. Il comando dumpe2f s funziona soltanto con par
N.B.: se state utilizzando Mandrake il filesystem Windows potrebbe già essere stato montato nella directory /mnt/windows. L'operazione sopra indica
tizioni i! cui superblock NON è danneggiato, quindi vi consi
ta quindi non sarà necessaria.
glio di controllare questo valore prima che succeda qualcosa
Prima di procedere con l'installazione vera e propria
e di memorizzarlo da qualche parte.
manca ancora un altro prerequisito: la presenza dei
sorgenti del kernel. Per quanto riguarda Mandrake,
~ per installare i sorgenti è quindi possibile utilizzare il solito comando urpmi (badando di avere le neces-
e procediamo con l'installazione:
sarie sorgenti disponibili in /etc/urpmi/urpmi.cfg; si veda il sito http://urpmi.org/easyurpmi/ per la
# ed
captive-static-l.1.5
./instali
configurazione): Ok, ci siamo quasi, ma manca ancora un compo #
urpmi
nente fondamentale affinchè Captive funzioni cor
kernel-source
rettamente per fornire l'accesso alla partizione Per quanto riguarda Debian, invece, è sufficiente
NTFS: il driver Windows XP ntfs.sys. Questo è
digitare questo comando, badando bene ad utilizza
reperibile all'interno della partizione Windows XP
re i backtick ( '} e non gli apici ( ' ):
che abbiamo precedentemente montato oppure
sarà possibile scaricarlo dal sito Microsoft (serve #3pt-get instali kernel-headers-' uname -["'
una licenza per tale sistema!).
Scarichiamo il pacchetto precompilato di Captive
grafico per cercare questo driver ed installarlo nella
con il comando wget, in questo modo:
locazione corretta del filesystem Linux. Per lanciare
Il pacchetto Captive mette a disposizione un tool
il tool (che, se non viene lanciato da un terminale #
ed
per X, parte in modalità testo) si digiti il comando:
/usr/src
t wget
http://www.jankratochvil.net/projcct /captive/dist/captive-static-1.1.5. tor.gz
Decomprimiamo il pacchetto appena scaricato:
tt
captive-mstaU-acquire
La figura 3 mostra l'interfaccia offerta dal program ma. Si noti fa linea in alto che ci comunica che il file
#
tar
xvfz
ntfs.sys non è presente (NOT
captive-static-l.l.S.tar.gz
FOUND). Per avviare
la ricerca, si può cliccare sul pulsante forward. Se, per qualche motivo, la ricerca automatica dei driver dovesse fallire, si può procedere all'installa zione manuale: invece di premere forward si sele Ctiiitivo Microsoft Windows Drii/orsAcijuirP
nostro caso specifico, sarà:
CurenUy fm/id dftvers cfl(5 iys
zionerà il pulsante skip, dopodiché si potrà indicare manualmente il path del file ntfs.sys che, nel
Locai Disks Drivers Scan MS-\*AWow» XP |Nn Serice Putì ) Free Suld 5 1 2&C0 0 CD-ROMflio-9660
exi3«l$yi
ex2 Resy«emuO lOa ty Mp//jyi:<i loo.com C"e»ed Buld EntfiW
fastfcLiys
MSWnajT.vs.'FillBSev.ie Pa=l )FrGsEuid 5 1 :BGO0FastFATMal
rv.cskmiexe MSWndowsXP0317:77 WtP SPI FrseEuldliallanSI2600.31 Kemtì
/mnt/WIND0WS/WINOnws/system32/driver$/ntfs.sys
Al termine dell'installazione dei file ntfs.sys siamo pronti per poter utilizzare la partizione NTFS che contiene Windows sia in lettura che scrittura. Prima
di procedere, si deve, però, effettuare l'unmount We wlH scan yoir locai hard drivrs io toni any BxiiUng cfmrjri uitìte ici Ihls projeo.
della partizione con il comando
#
umount
/dev/hdal
Non ci resta che rimontare la partizione con l'ausilio di Captive. Si può creare per questo scopo un mount point apposito, ad esempio /mnt/winxp.
Quindi, con il comando: L'interfaccia di Captive per lo scan dei driver e la relativa installazione
# mount
-t captive-ntfs /dev/hdal
/(nnt/winxp
II filesystem NTFS sarà disponibile all'interno della
WEBOGRAFIA
Riferimenti web Recuperare partizioni ext2/3 rovinate: http://www.unixwiz.net/techtips/recovering-ext2.ritml
Ridimensionare partizioni e deframmentare filesystem; http://www.newsforge.COni/os/O3/lO/O7/2028234.shtnil7tid-Z3
Filesystems-HOWTO. multipiattaforma per Linux e Windows: http://www.tldp.org/HCWT0/Filesystems-HOWTO.html
Gestione avanzata dei filesystem (RAID, LVM): http://www.0penskill5.info/statics /gestioneavanzata dei_filesystem linux.htm
directory /mnt/winxp. Per rendere automatico il mount del filesystem al momento del boot possia
mo aggiungere la seguente linea al file /etc/fstab: /dev/hdal
/rr.nt/winxp
captive-ntfs
flefaiilts
S
6
In questo modo, trasferire file da Linux a Windows XP sarà più facile che mai: sarà sufficiente un sem
plice comando cp per la copia dei file. Una ultima nota: i permessi su altri filesystem non nativi (fat32, NTFS ad esempio) non saranno man tenuti, quindi fate attenzione ai documenti persona li che non devono essere pubblici!
I dati al sicuro con il filesystem criptato Talvolta alcuni file sono davvero preziosi, e non ci si può permettere
che, accedendo fìskamentc al computer, si riesca a leggerli in qualche modo. Ecco cosa può fare ìl kernel 2.6.x per garantirà sicurezza...
Francesco Sportotari <f.sportolari@linuxpratìco.com>
Nelle pagine che seguiranno andremo a fare la conoscenza di alcune delle novità intro dotte in questo ambito dai kernel della serie
2.6. Si vedrà innanzitutto come è possibile cifrare il
# apt-get
instali
kernel-image-2.6.7-1-386
contenuto delle partizioni per proteggere i nostri
f
instali
(Jmsetup
apt-get
dati da occhi indiscreti. Si proseguirà con altri esempi relativi ai dispositivi
Se avete già aggiornato il vostro kernel non è
di memorizzazione rimuovibili come chiavi USB o
necessario impartire il primo comando. Potete con
hard disk esterni: accedere ai vostri dati sarà più
trollare la versione del kernel attualmente in esecu
semplice e più versatile di quello che potreste
zione sulla vostra macchina con il comando:
pensare!
Le funzionalità di captazione del kernel:
5e la versione è superiore o uguale alla 2.6.4 non è
il modulo dm-crypt
necessario installare il nuovo kernel in quanto il
supporto per dm-crypt è già presente.
A partire dalla versione 2.6.4 del kernel Linux è
Per quanto riguarda la distribuzione Mandrake 10, è
stata introdotta una novità molto interessante: la
possibile utilizzare il comando urpmi per installare il
possibilità di cifrare il contenuto delle partizioni in
nuovo kernel è il comando dmsetup.
modo tale che solo chi è autorizzato, tramite una
Il sistema di gestione dei pacchetti urpmi deve
chiave, può montare la partizione in questione ed
essere preventivamente configurato per poter
accedere ai dati protetti.
avere accesso alla sorgente di pacchetti contrib di
Ad onor del vero, un primo tentativo era stato fatto
Mandrake {vedi riquadro EasyURPMI), in quanto le
tramite il modulo cryptoloop presente già dalla
risorse richieste risiedono all'interno di questa.
versione 2.6.0; purtroppo questa implementazione
I comandi necessari per l'installazione sono i
è risultata essere poco sicura e con vari bug di svi
seguenti:
luppo.
Con dm-crypt il sistema crittografico per i
dispositivi a blocchi ha visto nuova luce, essendo
# urpmi kernet-trrb-2.6.4
privo di bug. più sicuro e più performante.
# urpnii
dmsetup
Per poter creare ed utilizzare le partizioni crittografate è necessario installare un kernel in cui sia pre
Al termine dell'installazione, indipendentemente
sente il modulo dm-crypt.
daila distribuzione utilizzata, sarà necessario effet
Oltre ad un kernel apposito, è necessario avere a
tuare il reboot della macchina per partire con il
disposizione il comando din5etup che consente di
nuovo kernel appena installato.
manipolare le tabelle di mappatura tra le partizioni
Il modulo dtn-crypt utilizza per cifrare i dati che
vere e proprie, come ad esempio /dev/sdal, e le
vengono scritti nella partizione selezionata un algo
partizioni crittografate che troveranno posto nella
ritmo di tipo block cipher (vedi riquadro apposito in
directory /dev/mapper/.
queste pagine). Tale algoritmo necessita di una
Si andranno ora ad illustrare i passi necessari per
chiave che deve essere generata dall'utente che
installare il nuovo kernel e l'utility dmsetup relativa
desidera effettuare la cifratura della partizione.
mente alle nostre distribuzioni di riferimento, ovvero
Per assolvere a questo compito si utilizzerà l'utility
Debian testing e Mandrake 10.
hashalot, che consente di generare chiavi casuali
Aggiornamento
applicando uno degli algoritmi di hashing supportati
del sistema
partendo da una passphrase immessa dalt'utente, da questo programma. Per installare hashalot su Debian è sufficiente utiliz
Per quanto riguarda Debian, è sufficiente utilizzare
zare il solito comando apt-get:
il comando apt-get per scaricare ed installare le due componenti necessarie, in questo modo:
# apt-get
instali hashalot
21
Per quanto riguarda Mandrake IO è invece necessa
Creazione delle
rio compilare manualmente l'utility in quanto, pur
partizioni crittografate
troppo, il pacchetto presente è di una vecchia ver sione. Il processo è comunque piuttosto semplice:
L'utility dmsetup è lo strumento necessario per
occorre innanzitutto scaricare il sorgente del pro
creare i device cifrati, che corrisponderanno alle
gramma, ad esempio con wget:
partizioni del nostro hard disk o della nostra chiave
# wget
Questa utility è però molto complessa nel suo utiliz
USB che desideriamo proteggere da occhi indiscreti. http://www.paranoiacs.org/-sluskyb/hacks
zo. Fortunatamente Christophe Saout, l'autore dei
/hashalot/hashalot-8.3.tar.gz
modulo dm-crypt, ha realizzato un pratico script Una volta scaricato l'archivio non resta che decom
bash che semplifica notevolmente le cose, renden
primerlo, compilare i sorgenti ed installare l'utility,
do la configurazione delle partizioni cifrate abba
in questo modo:
stanza rapida e semplice.
Chi volesse comprendere l'utilizzo di dmsetup può #
tar
xzvf
#
ed
#
./configure && make && make instali
consultare l'indirizzo internet
hashalot'0.3.tar.gz
http://www.saout.de/misc/dm-crypt
hashalot-0.3/
Per scaricare ed installare lo script in questione, sia su Debian che su Mandrake, si può procedere in
Se invece si vuole lo stesso utilizzare il pacchetto
questo modo: per prima cosa si effettua il download
precompilato, anche se relativo alia versione 0.2, si
dello script
può procedere scaricando il pacchetto # wget http://ii.vft*.saout.de/fnisc/dm-crypt/cryptsetup.sfi # wget
http://ftp.metalab.unc.edu/pub/Linux
e lo si installa all'interno di una delle directory del
/distnbutions/altlinui/Sisyphus/files
nostro PATH, in questo modo:
A586/RPMS/ha5halot-G.2.B-aU3.i586.rpni
e provvedendo alla sua installazione con il comando
# instali
cryptsetup.sh /usr/local/Sbin
u rpmi oppure con il classico rpm: II programma instali provvedere a copiare il file # rpm
nella directory indicata e a impostare correttamente
-Uvh hashalot-G.2.0-alt3.Ì5S6.rpm
i permessi per l'esecuzione. Dopo l'installazione di Arrivati a questo punto abbiamo tutti gli strumenti
tutti questi strumenti siamo pronti per il nostro
necessari per creare ed utilizzare le nostre partizio
primo esperimento: la creazione e la formattazione
ni crittografate.
di una nuova partizione cifrata.
CONFIGURAZIONE
Configurare urpmi tramite EasylIRPMI Tramite il sito web Easy RPM. raggiungibile all'URL http://urpmi.org/ea5yurprni/
Per ogni voce, urpmi scaricherà il pacchetto l'indice e le descrizioni dei pacchetti presenti: una volta completato
l'aggiornamento delle sorgenti è possibile utilizzare il comando urpmi per scaricare i pacchetti software ed instal larli nel sistema come se fossero presenti nei CDRom della
distribuzione.
è possibile configurare il sistema di gestione dei pacchetti urpmi in maniera rapida, in modo da accedere ai
■*•«
repository presenti su Internet
-
Per prima cosa è necessario selezionare la versione della
QQ.
.OO
--.:..
distribuzione utilizzata (nel nostro caso "10.0 officiai"), dopo
■'
tM>
-». rt-JSO-KIIWto«k*
di che si procede oltre tramite l'apposito pulsante.
Il secondo passo prevede la scelta delle sorgenti dei pac
;ZJ StlfTI A HIH»T« FOR FAOI BdltfKZ VQUWWfl
chetti, ovvero delle locazioni dalle quali scaricare i vari rpm.
A (e* |ifl i-«j j^* w,t-rii curarli, trwfttifT ,«i u^»*! »n t i< pf r41 * , DU » '■ r H1
In Mandrake abbiamo tre diverse sorgenti:
B««Kt nu MHWn te »« w r«^ rtHd. «a »u rt m« r cervia - n 4 n «mi («ft.
1 ) Gore lustrini!»»:
mairi: contiene i pacchetti principali della distro;
»#. no ajppat. no i*> UUfcrK
contrib: in questa sorgente trovano posto pacchetti
aggiuntivi e novità dell'ultim'ora;
'-s*if miti Trt* tctt &Qimf&A • dm4v
updates: contiene tutti gli aggiornamenti inerenti proble mi di sicurezza.
La figura mostra come impostare i vari menu a tendina. Ricordatevi di selezionare il checkbox a fianco di ogni menu
per abilitare ciascuna delle sorgenti. Il terzo e ultimo passo consiste nel copiare i tre comandi che verranno visualizzati all'interno del box nero nella pagina web e digitarli in una shell con i privilegi di root (è sufficiente un copia incolla, se il vostro browserve lo permette).
22
/bHv/ftdUit.ci Ira- //bo.narrar njf r
tifm:.rro-ijn*r<i'a**;at 1 \.:it\./ !D tì/i5BS'H»ndrjhe'flP"i «t"
INFORMAZIONI
Per i nostri esempi si supporrà di avere a disposizio ne una chiave USB collegata al nostro sistema
Crittografìa a chiave
simmetrica
Linux, al cui interno è presente un'unica partizione Linux riconosciuta come /dev/sdal. Naturalmente,
gli esempi possono essere applicati a qualsiasi altro
dm-crypt per effettuare la cifratura dei dati utilizza dei
metodi crittografici messi a disposizione dal kernel che
dispositivo di memorizzazione di massa, come una partizione del nostro hard disk IDE (ad esempio
prendono il nome di block chiper.
/dev/hdb2).
Questi particolari algoritmi rientrano nella categoria dei
Se non avete a disposizione una chiave USB o una
metodi crittografici a chiave simmetrica, in cui cioè vi è
partizione libera sul vostro hard disk per provare gli
un'unica chiave che viene utilizzata sìa per la cifratura sia
esempi riportati nell'articolo potete utilizzare un
per la decodifica dei dati.
Ciphertext
1 La f'9ura illustra il metodo di funzionamento di un
Block Cipher
Chiave
Decryption
dispositivo che identifica il floppy, ovvero /dev/fd0.
cipher; il messaggio da
Procediamo con la creazione della nostra nuova
cifrare, identificato con il
partizione cifrata. Per prima cosa, dobbiamo creare
suddiviso in blocchi di lun ghezza fissa (da cui deriva iì nome di questa classe di "
degli esempi, la partizione /dev/sdal con il file di
generico algoritmo block
nome di plaintext, viene
Plaintext
floppy disk; sarà necessario sostituire, nei comandi
algoritmi), ad esempio di
la mappatura tra la partizione vera e propria, /dev/sdal nel nostro caso, e il device virtuale che rappresenta la partizione stessa, i cui dati però ven gono cifrati ad ogni operazione di scrittura e deco
64 byte ciascuno; a ciascun blocco viene in seguito appli
dificati ad ogni operazione di lettura.
cato l'algoritmo di cifratura, che utilizza la chiave simme
Lo script cryptsetup.sh si occupa di tutto ciò, oitre
trica per generare i blocchi cifrati che compongono il mes
ad assolvere ad un altro compito molto importante:
saggio risultante, ciphertext. La trasformazione da messaggio cifrato a messaggio in chiaro avviene utilizzando l'algoritmo inverso che fa uso
la generazione della chiave di cifratura a partire da una passphrase inserita dall'utente; per generare la
sempre della stessa chiave.
chiave cryptsetup.sh utilizza il comando hashalot,
E' chiaro come la segretezza della chiave (o della
che è stato precentemente installato. Introduciamo
passphrase utilizzata per generarla) utilizzata è di estrema
ora la linea di comando necessaria per !a creazione
importanza: se qualcuno infatti entra in possesso di que
della partizione cifrata, dopodiché ne analizzeremo
sta sarà in grado di decifrare tutti i nostri dati. Alcuni dei più diffusi algoritmi block cipher sono AES
le varie opzioni per comprenderne il significato:
(Advanced Encryption Standard), DES (Data Encryption Standard), e 3DE5, l'evoluzione del precedente che consi
# cryptsetup. sh
-h
ste nell'applicare in tre volte successive l'algoritmo DES.
npemdl60 -e
aes
create cryptvoll
/dev/sdal
Una volta eseguito il comando verrà chiesto di inse
INFORMAZIONI
Algoritmi di cifratura disponibili nel kernel
rire una passphrase a partire dalla quale verrà generata la chiave con la quale verranno codificati i
nostri dati. L'effetto del comando sopra elencato è quello di generare il file speciale cryptvoll all'in
terno della directory /6ev/mapper/, il quale è, a tutti gli effetti, un file di dispositivo che rappresenta
Per sapere quali algoritmi di cifratura sono disponibili all'interno del kernel Linux in esecuzione sì può utilizzare comando #
cat
la nostra partizione cifrata.
Prima di procedere oltre, però, prendiamo in consi derazione le varie opzioni e i vari argomenti dello script
/proc/crypto
-h
nane
cryptsetup.sh.
Il
primo
parametro,
ripemdl60, viene passato dallo script al coman
do hashalot per comunicare quale algoritmo di
nodule
kernel
type
digest
hashing utilizzare per generare la chiave utilizza
blocksize
64
ta in fase di cifratura dei dati;
digestsize
16
al comando hashalot di utilizzare l'algoritmo omo
nane
aes
passphrase che viene richiesta al momento della
TiodiAe
aes
creazione della partizione cifrata. La pagina di
type
cipher
)locksize
16
■nin
keysize
16
nax
keysìze
32
ripemdl6G indica
nimo per generare la chiave, partendo dalla
manuale del comando hashalot illustra tutti gli algoritmi disponibili per la generazione delle chiavi.
Il parametro -e
aes è utilizzato dallo script per
comunicare al kernel Linux il particolare tipo di algoritmo block cipher da utilizzare per cifrare i
L'output fornito mostra la lista dei moduli crittografici com
dati. Nell'esempio si è scelto di utilizzare l'algoritmo
pilati nel kernel, insieme a delle indicazioni sulla lunghezza
AES poiché, alla data attuale, risulta essere uno
minima e massima che una chiave di cifratura può avere
degli algoritmi crittografici più sicuri in circolazione.
per funzionare con l'algoritmo in questione. Se non lo trovate, provate a caricare il modulo con modprobe
aes e riprovare.
Concludiamo con la parte degli argomenti da fornire allo script, ovvero create cryptvoll /dev/sdal; come è facile intuire, questi tre argomenti indicano
23
^ a
cryptsetup.sh
di
creare
il
file
speciale
# mkdir /mntsecure
/dev/mapper/cryptvoll, il quale fa riferimento alla
U
partizione /dev/sdal.
# mount
L'esecuzione di
chmad 709 /mntsecure
-t
ext2
/dev/mapper/cryptvoll /mnt
secure
cryptset jp . sh, con l'argomento
create specificato, non comporta alcuna operazione fisica sulla partizione interessata.
Quando abbiamo finito di lavorare con la partizione
Avvengono, però, due operazioni dietro le
cifrata è necessario effettuare l'unmount con il
quinte:
seguente comando:
la creazione del file di
dispositivo
/dev/mapper/cryptvoll tramite il quale si può inte ragire con la partizione cifrata (formattaria, montar
# umount /dev/mapper/cryptvoll
la, smontarla) e il setup dell'associazione tra parti zione fisica e device criptografico virtuale, tramite
Oltre a smontarla, è necessario, però, cancel
l'opportuna chiave di codifica/decodifica.
lare anche la mappatura che esiste tra la parti
A questo punto possiamo formattare la nostra parti
zione
zione cifrata come se si trattasse di una normale
/dev/mapper/cryptvoll. Poiché la chiave di cifratu
partizione, utilizzando il comando:
ra viene memorizzata dal kernel per tutto il tempo
# mkfs
ciò comporta la possibilità da parte di un utente
reale
/dev/sdal
e
quella
cifrata
in cui esiste il suddetto mapping, risulta chiaro che -t
ext2
/dev/mapper/cryptvoll
malizioso di montare nuovamente la partizione ed Si faccia attenzione all'argomento del comando
accedere al suo contenuto. Per cancellare il
mkfs che deve essere /dev/mapper/cryptvoll.
mapping è sufficiente utilizzare nuovamente lo
La partizione ora è pronta all'uso; possiamo tran
script cryptsetup.sh in questo modo:
quillamente montarla su una qualsiasi directory del
filesystem ed utilizzarla normalmente:
# cryptsetup.sh
# mount
Anche in questo caso vale io stesso discorso fatto
#
cp
-t
ext2
/dev/mapper/cryptvoll
/etc/pssswd
/innt
remove
cryptvoll
per l'argomento create dello script: ia partizione
/mnt
fisica non viene modificata in alcun modo a seguito Una volta montata, la partizione cifrata si comporta
del remove; vengono rimossi solamente il file di
come una qualsiasi altra partizione: ciò significa che
dispositivo e il mapping presente all'interno del
valgono i permessi di accesso dei file in essa conte
kernel. Per verificare il fatto che la partizione
nuti. Per proteggerla dagli accessi da parte degli
/dev/sdal non contiene dati validi (a meno di non
utenti non privilegiati è possibile cambiare i per
disporre della chiave di cifratura) è sufficiente ten
messi del mount point con il comando chmod prima
tare di montare tale partizione:
di effettuare ii mount della partizione. Per evitare problemi con eventuali altri script esi
# mount
stenti, si creerà un mount point diverso
mount:
-t
ext2
wrong
fs
/dev/sdal
/mnt
type,
option,
bad
/dev/sdal,
SORGENTE
Lo script CHmatfnt
#!/bin/sh
#!/bin/sh
test ì#
!= 3
if
then
test
s*
!=
1
then
echo
"SO
exit
100
<fs-type>
<device> «mount-point»"
fi
echo
"SO <device>"
exit
100
fi
mappername='echo $2
|
sed
'
mappername='echo
false
while
SI
|
sed
':
false
[
$?
-ne
0
while
)
do
l
S?
-ne 0
J
do echo
"mounting
cryptsetup.sh mount done
-t
$1
S2 -h
on
£3 with
ripemdl60
-e
echo "unmounting SI"
filesystem SI" aes
create
/dev/mapper/Smappername
$3
superhlock on
mounted
Smappername
file
SORGENTE
La script cmount
if
bad
or too many
52
umount
/dev/mapper/Smappername
cryptsetup.sh
done
-h
remove
Smappername
systems
IN BREVE...
Convertire una partizione esistente
I passi fondamentali
Fino a qui si è visto come è possibile creare una
per la captazione
nuova partizione cifrata, ma come si può fare se si
Riassumiamo in questo riquadro, per comodità, le opera
desidera convertire un partizione già esistente in
zioni da eseguire per montare una partizione cifrata e per
una partizione cifrata?
smontarla in sicurezza.
Prima di procedere con questo nuovo esperimento
Per effettuare il mountìng è necessario:
vi consiglio caldamente di effettuare un backup dei
1. Utilizzare Io script cryptsetup.sh per creare il file di
dati contenuti nella partizione che desiderate cifra
dispositivo ed il mapping tra partizione reale e device
re, in quanto un errore nella procedura può causar
cifrato, ad esempio:
ne la cancellazione.
£ cryptsetup.sh
dati che si desiderano cifrare. Per prima cosa è
Si supponga che la partizione /dev/sdal contenga i -h ripercdl66 -e
aes
create cryptvoll
/dev/sdal
2. Inserire la passphrase scelta al momento della creazio ne della partizione
necessario creare iì file speciale che indentifica la partizione, utilizzando lo script cryptsetup.sh
come già si è visto in precedenza. Anche in questo caso, per evitare rischi, potete uti
3. Montare la partizione cifrata tramite il file di dispositivo
lizzare un dischetto floppy, formattandolo prima in
appena creato, a esempio
ext2, ad esempio, e copiandoci sopra dei dati.
# mount
/dev/mapper/cryptvoll
/mntsecure
Una volta creato il mapping, sarà sufficiente utiliz zare il comando dd per cifrare i dati contenuti neila
Per unmounting sarà necessario:
partizione:
1. Smontare la partizione cifrata, ad esempio
# dd
# umount
/dev/mapper/cryptvoll
if=/dev/sdal of=/dev/mapper/cryptvoll
II comando sopra riportato va utilizzato con estrema
2. Utilizzare lo script cryptsetup.sh per rimuovere iì
cautela, in quanto l'ordine sbagliato degli argomenti
mapping e il file di dispositivo, ad esempio:
o del numero di partizione può causare la perdita dei dati nella partizione.
# cryptsetup.sh remove cryptvoll
La seconda operazione sopra riportata è ASSOLUTAMEN
Il comando, inoltre, va eseguito quando entrambe le partizioni NON sono montate. Per essere sicuri di
TE necessaria, perché lasciando attivo il mapping è possi
questo è sufficiente utilizzare in sequenza questi
bile per chiunque abbia accesso all'account root di monta
due comandi:
re nuovamente la partizione senza la necessità di immettere la passphrase.
tt
umount
/dev/sdal
tt
umount
/dev/mapper/cryptvoll
L'utility dd effettua la copia a basso livello dei dati
Il messaggio di errore ci comunica che non è stato
dalla partizione /dev/sdal (identificata come
possibile leggere il superblock del filesystem (e di
"input
conseguenza non è stato possibile montare la parti
/dev/mapper/cryptvoll corrispondente (identificata
file",
lf)
alla
partizione
cifrata
zione), in quanto anche esso è stato cifrato. La par
come "output file", of).
tizione /dev/sdal non è quindi accessibile.
anche la cifratura dei dati.
Per semplificare anche il processo di mounting e di
Come si può notare non è stato necessario format-
unmounting delle partizioni cifrate potete utilizzare
tare preventivamente la partizione cifrata, anche
Durante la copia avviene
i due script riportati nel riquadro script dì mounting.
perché facendolo si sarebbero cancellati tutti i dati
Dopo aver creato i due file emount e cumount con ii
che avevamo intenzione di cifrare.
vostro editor preferito è sufficiente utilizzare il
Utilizzando il processo inverso, ovvero specificando
comando instali come è stato già fatto per lo script
if=cryptvoll e of=sdal è possibile ritornare alla
cryptsetup.sh. L'utilizzo dei due script è molto
situazione iniziale in cui i dati sono accessibili in
semplice:
chiaro.
# emount
con il comando dd è possibile montare la partizione
Non appena è terminata la copia della partizione
tt
ext2 /dev/mapper/cryptvoll /dev/sdal
cumount /dev/mapper/cryptvoll
cifrata: i dati contenuti in essa sono quelli che prima erano disponibili nella partizione /dev/sdal.
I tre argomenti di emount sono, rispettivamente, il tipo di partizione, il file di dispositivo che identifica
Utilizzo di partizioni
la partizione cifrata e il file di dispositivo che identi
criptate su dewice USB
fica la partizione vera e propria. II comando cumount accetta, invece, un unico para
In queste pagine e nelle precedenti si è fatto riferi
metro che è il file di dispositivo che rappresenta la
mento ai pen drive USB, oggi molto diffusi a
partizione cifrata di cui effettuare l'unmount.
causa della praticità e de! basso costo. Linux sup porta nativamente questo tipo di dispositivi di
25
~ memorizzazione rimovibili, che agli occhi dell'uten
quale avvia l'emulazione SCSI.
te vengono visti come comuni hard disk con una o
I dispositivi di memorizzazione USB, infatti, vengo
più partizioni.
no riconoscuti dal sistema come dischi SCSI, identi
Per fare in modo che questi dispositivi vengano
ficati da un file di dispositivo del tipo /dev/sdX,
riconosciuti dal kernel è necessario però caricare
dove X è una lettera minuscola (ad esempio,
tutti i moduli inerenti al supporto USB, tra i quali
/dev/sda).
figura usb-storage che consente di accedere a
viene identificato il dispositivo sia sempre la stessa:
Non è detto che la lettera con la quale
questi dispositivi come se si trattasse di normali
ciò può accadere ad esempio quando abbiamo più
hard disk. Questa operazione può rivelarsi piuttosto
di un dispositivo di memorizzazione USB collegato
lunga e tediosa.
al sistema.
Per evitare ogni volta di dover inserire i moduli nel
Per conoscere con quale lettera è stato riconosciuto
kernel utilizzando il comando modprobe si può ricor
il nostro drive USB si
rere al pacchetto software haipUig, il quale provve
/var/log/messages, il quale, nel caso in cui il modu
può consultare il file
de a caricare tutti i moduli necessari non appena
lo usb-storage sia stato caricato correttamente,
che un nuovo dispositivo USB viene collegato ad
conterrà delle linee simili alle seguenti:
una delle porte disponibili.
Per installare hotplug su un sistema Debian è suffi
Jun
1
12:53:59
ciente digitare il seguente comando: Jun
# api-get
instali
powerdebian
SCSI
hotplug
1 12:53:59 Vendor:
errulation
powerdebian
Jun
1
powerdebian
Jun
1 12:53:59
powerdebian
kernel:
Jun
1 12:53:59
powerdebian
kernel:
Jun
1
powerdebian
sda:
stato aggiunto un nuovo dispositivo USB, carica
ANSI
kernel:
Jun
Rev:
1 12:54:00 powerdebian removable disk
sda at
kernel:
kernel: scsiO,
1.96
SCSI
SCSI
revision:
B;
devìce
(33 HB)
assuming Write Enabled
sda:<7»usb-Storage: 1Z:54:GQ
2
Type:
64686 512-byte hdwr sectors
kernel Linux riconosce questo evento ed esegue il
tutti i moduli necessari, compreso usb-storage il
kernel:
Direct-Access
sda:
programma hotplug. Quest'ultimo, rilevando che è
:
Picodisk Tech
1 12:53:59
non è necessario installarlo. Quando si connette un pen drive USB al sistema, il
Hodel:
Jun
12:53:59
sesia
(or USB Hass Storage devices
powerdebian kernel:
Eutron
Per quanto riguarda Mandrake. invece, il pacchetto
hotplug è già fornito con il sistema base, quindi
kernel:
queuecommand
calied
sdal
Attached scsi
channel 8,
id 8,
lun B
INFORMAZIONI Si noti che oltre a riconoscere il dispositivo (sda),
II filesystem virtuale
sysfs [kernel 2.G]
vengono anche identificate le partizioni in esso con
tenute (sdal). Nel caso specifico si ha un'unica par tizione, che può essere montata con il comando
A partire dalla serie 2.6 del kernel Ltnux, al proc
seguente:
filesystem è stato affiancato il cosiddetto sys filesystem {brevemente sysfs), il quale contiene informazioni detta
* mount
/dev/sdal
/mnt
gliate sull'hardware connesso al sistema. Il sysfs. alla stregua del procfs, è un filesystem virtuale, che non risiede fisicamente su disco, ma che viene gene rato dal kernel Linux in base ai dispositivi presenti nel
hotplug, oltre a caricare i moduli del kernel neces
sari al corretto funzionamento di un dispositivo di
nostro sistema.
memorizzazione USB, può eseguire dei comandi per
A partire dalla versione 10 della distribuzione Mandrake il
effettuare delle operazioni aggiuntive, come ad
supporto per il sys f s è già presente. Per quanto riguarda
esempio il mount automatico della partizione di un
Debian, invece, se l'aggiornamento del kernel è stato
pen drive.
effettuato manualmente, il sysfs potrebbe non essere montato di default.
Per controllare se il sysis è presente, si deve cercare nel file /etc/f stab una riga simile alla seguente:
Infatti, quando la chiave USB viene collegata al sistema, hotplug tenta l'esecuzione dello script /etc/hotplug/usb/usb-storage, il quale viene invocato subito dopo il caricamento del modulo
sysfs
/sys
sysfs
defaults
Q
G
Se non c'è, va aggiunta insieme alle altre. Oltre ad aggiungere la riga è necessario creare il mount point /sys, con I! comando mkdir:
omonimo. Nelle pagine seguenti si mostreranno esempi reali di automount di un dispositivo usb-storage, con la possibilità in automatico di decifrare eventuali parti zioni criptate, utile per sincronizzare i dati device
ff mkdir /sys
Per montare immediatamente il filesystem virtuale non resta che utilizzare il comando
mobile, ad esempio, con quelli di una cartella sul desktop di backup, magari anch'essa criptata.
Si supporrà di avere a disposizione una chiave USB con una unica partizione al suo interno. Inoltre, per poter utilizzare gli script forniti è necessario utilizza re un kernel delia serie 2.6 con il supporto per il
il quale rilegge il file /etc/f stab e si adegua ai cambia menti in esso contenuti.
sysfs abilitato (vedi riquadro).
~
Hotplug di dispositivi La diffusione dei dispositivi di memorizzazione che si collegano tra mite porta USB al computer pone intereressanti problemi: vi mostria
mo come riconoscerli, sincronizzarli, montarli in automatico...
Francesco Sportolari
<f.sportolari@linuxpratico.coni>
Con queste pagine si conclude la serie relati
va ai filesystem ed alle novità introdotte dal kernel 2.6 che riguardano questo aspetto.
Riprendiamo il discorso interrotto nelle pagine pre
USB è identificato univocamente da un insieme di 3
cedenti relativo ai pen drive USB e, più in generale.
valori esadecimali che rappresentano, rispettiva
a tutti i dispositivi di memorizzazione rimovibili
mente, il codice del Vendor del dispositivo (nel
USB. hotplug gioca un ruolo fondamentale per
nostro caso 5e3), il codice del Prodotto (702) ed il
quanto riguarda il riconoscimento e la configurazio
codice del Dispositivo (2). hotplug passa questi tre
ne di questa classe di dispositivi.
valori, separati dal carattere /, a tutti gli script che
Quando una chiave USB viene collegata al sistema,
manda in esecuzione tramite la variabile di shell
hotplug tenta l'esecuzione dello script usb-storage
PRODUCT. Grazie a questa variabile è possibile per
(solitamente localizzato in /etc/hotplug/usb/), il
sonalizzare gli script in modo tale che eseguano
quale viene invocato subito dopo il caricamento
delle operazioni specifiche in base a quale dispositi
del modulo omonimo. Gli esempi presentati utiliz
vo viene collegato al sistema.
zano questo script per effettuare le operazioni
Dopo aver individuato quale è il contenuto della
necessarie.
variabile PRODUCT per la vostra chiave USB non
Lo scopo che si vuole raggiungere con il primo
resta altro che modificare lo script: individuate le
esempio è quello di montare automaticamente la
due righe seguenti
partizione contenuta nella nostra chiave USB al momento della sua connessione.
case
Lo script riportato nel riquadro Listato 1
assolve a
^PRODUCT"
in
oeo/ooQ/oeoi
questo scopo. Per poterlo utilizzare, sarà necessario
creare, come utente root, il file usb-storage in
sarà sufficiente sostituire 000/000/000 con il valore
/etc/hotplug/usb/ e poi copiare il contenuto dello
specifico della variabile PRODUCT individuato ne! file
script all'interno del file appena creato, salvarlo ed
/tmp/usb-storage-vars. A questo punto, scolle
impostare per esso il permesso di esecuzione con il
gando e ricollegando nuovamente la chiave USB il
comando:
suo contenuto sarà disponibile automaticamente all'interno della directory /mnt/pendrivel.
« chmod *x /etc/hctplug/usb/usb-storage
Lo script basa il suo funzionamento sull'utilizzo del
Su Mandrake il file usb-storage è già presente:
stato riconosciuto il drive USB.
sarà sufficiente copiare lo script (tranne la prima
La variabile DEVPATH, che viene passata da hotplug
sysfs per determinare con quale dispositivo SCSI è
riga) in coda ai comandi già presenti.
allo script, contiene il percorso de! sysfs in cui sono
Si può ora connettere al sistema la chiave USB. Alla
contenute le informazioni relative al dispositivo USB
prima esecuzione dello script la partizione non
appena collegato, tra cui è presente anche il device
viene immediatamente montata, ma viene creato il
SCSI utilizzato dal modulo usb-storage. L'altra cosa
file /tmp/usb-storage-vars, il quale contiene tutte
da notare è l'utilizzo dell'opzione -o
le variabili di shell che vengono passate dal pro
comando mount, che garantisce che al termine di
sync del
gramma hotplug al nostro script. Tra queste varia
ogni operazione di scrittura i dati siano stati effetti
bili possiamo individuarne una molto importante,
vamente salvati sul dispositivo di memorizzazione.
PRODUCT. Con la linea di comando
Ciò è importante in quanto l'unmount della partizio ne della chiave USB avviene soltanto in seguito alla
0
cat
/tmp/usbstorage-vars
|
grep
PRODUCT
sua disconnessione dal sistema.
Si andrà ora a presentare un esempio leggermente
è possibile visualizzare il valore a cui è impostata
più complesso: si supponga di voler creare una par
questa variable. L'output sarà simile al seguente:
tizione cifrata all'interno della nostra chiave USB, e di voler montare tale partizione in modo automatico
PR0DUCT=5e3/782/2
(quindi senza immettere ogni volta la passphrase)
Cosa rappresenta questo valore? Ogni dispositivo
sistema. Per prima cosa, dato che non si vuole
non appena che questa venga connessa al nostro
LISTATO 1
Hotpiug 1
((
HIIIOR
ff# Se il [ *tt Salva *«
le
variabili
hotpiug
set
nel
file
di
shell
passate
=
HINOR
*
1
))
file speciale è già -e
/dev/pendrivel
]
indicato
##
Crea
tttt
permessi
il
file
speciale
e
gli
PRODUCT
tttt
hotplug
allo script.
##
causato
l'invocazione dello
tttt
contiene
un
sono due La
variabili
prima
passate
indica
script,
l'evento la
indentificatore univoco
da
chmod 669 che
attribuisce ì
corretti
mknod /dev/pendrivel 0 ACTION e
rai /dev/pendrivel
da
> /tmp/usb-storage-vars
##
presente viene cancellalo
&&
SHAJOR SHINOR
/dev/pendrivel
ha
seconda
tttt Crea
per il
uno speciale
script
il
cui path è definito
ttit dalla variabile
## dispositivo connesso,
tttt REMOVER,
case
tttt momento della disconnessione del dispositivo.
"SACTION"
in
add)
che verrà utilizzato da hotpiug al
tttt specifico
case
"SPRODUCT"
in
## II valore sottostante va ##
specifico
per
il
sostituito con quello
dispositivo
USB
(vedi
l'articolo)
009/003/QOGI
lo
script
in questione effettua
echo
"#!/bin/sh"
echo
"umount /dev/pendrivel" » SREMOVER
echo
"rm
echo
Tmdir /mnt/pendrivel" >= SREMQVER
chmod
>
SREMOVER
/dev/pendrivel"
755
Nello
l'unmount.
»
SREMOVER
SREHOVER
—
sleep 2
## Crea tttt Determina
il major e il minor number necessari
mount poitit ed effettua
il
mount
#* del dispositivo
tta per la »#
il
mkdir /mnt/pendrivel 2> /dev/null
creazione del
file
speciale
di
dispositivo con
mount
-t
auto
-o
sync /dev/pendrivel
/mnt/pendrivel
tttt l'ausilio del sysfs set
--
'cat /sysS{DEVPATH}/hostV\:B/block/dev
|
tr
"i
MAJOR^si MINOR=S2
LISTATO 2
Hotpiug 2
ne Crea
il
file speciale per il
mknod /dev/pdcryptl #!/bin/sh
set
chmod
=■ /tmp/usb-storage-vars
tttt
Crea
il
ttH cifrato, case
"SACTION"
in
##
add)
dispositivo non
"SPRODUCT"
/dev/pdcryptl
mapping
tra
device non
il quale sarà
cifrato e device
identificato dal
specifico
per il
-d /etc/cryptkey create
(vedi
l'articolo)
tttt Crea
lo script
tt» momento della
## Tale script, sleep 2
Hit per
la
il
major e
Uff dispositivo con set
cat
di
del
il
minor numGer necessari
file
speciale di
l'ausilio del
rimozione da
aes
invocare al
disconnessione del
dispositivo.
oltre ad effettuare l'unmojnt,
ett provvede anche ad
creazione
-e
cryptkeyl /dev/pdcryptl
sostituito con quello
dispositivo USB
BOQ/OO0/GO9I
u» Determina
file speciale
/dev/mapper/cryptkeyl
in
## II valore sottostante va
cifrato
SHAJOR SMINOR
/usr/local/sbin/cryptsetup.sh
case
##
660
b
eliminare il
mapping
echo
-#!/bin/sh"
echo
"umount
echo
Vusr/local/sbin/cryptsetup.sh
echo
"rm /dev/pdcryptl"
echo
"rmdir
>
SREHOVER
/dev/tnapper/cryptkeyl"
sysfs
»
remove cryptkeyl"
■-
/sysS(DEVPATH}/host'/"\:0/block/dev
]
tr
":
'
Chmod
755
»
/mnt/pdcryptl"
SREMOVER
»
SREMOVER
SREMOVER »
SREMOVER
SREMOVER
MAJOR=S1 MIN0R=S2 ((
## Crea
MINOR - MINOR +
1
))
il
mount
point
ed
mkdir /mnt/pdcryptl
Hit Rimuove,
se esistenti,
## non cifrato
[ [
file di
dispositivo
e quello cifrato
-e /dev/pdcryptl -e
il
J
effettua
il
mount
#« della partizione cifrata in modo automatico
mount
-t
auto
-o
2>
sync
/dev/null /dev/mapper/cryptkeyl /mnt/pdcryptl
&& rm /dev/pdcryptl
/dev/mapper/cryptkeyl
]
W. /usr/local/Sbin/cryptsetup.sh
remove
cryptkeyl
^ 28
INFORMAZIONI
Glossario
hardware in Linux è rappresentato da un file speciale tramite il quale avviene l'interazione (mount e unmount di filesystem,
/dev/mapper: è la directory di sistema nella quale vengono
stampa di un documento, etc...). Tutti questi file risiedono
creati i file di dispositivo che identificano le partizioni cifrate
nella directory /dev.
dallo script cryptsetup.sh.
HAL (Hardware Abstraction Layer): è un software svilup
AES (Advanced Encryption Standard): è un algoritmo di
pato dal progetto freedesktop.org che è in grado di generare
cifratura di tipo block cipher molto sicuro, che utilizza chiavi di lunghezza variabile tra i 128 e i 256 bit. Block cipher: è un classe di algoritmi di cifratura dei dati che fanno uso di un'unica chiave utilizzata sia per le operazioni di codifica sia per quelle di decodifica. Cryptoìoop: è stato il primo tentativo, nei kernel della serie 2.6, per realizzare la cifratura delle partizioni che risiedono nei dispositivi di memorizzazione di massa. Questa implementazione. che funziona utilizzando il modulo omonimo è, però,
la iista dinamica dei dispositivi connessi al sistema e di notifi care gli eventuali cambiamenti alle applicazioni user-space tramite un apposito protocollo di comunicazione. hashalot: è un'utility che serve per generare chiavi di lun
ghezza prefissata partendo da una passphrase immessa dal l'utente. La lunghezza della chiave prodotta dipende dall'algo ritmo utilizzato per generarla. Negli esempi riportati nell'artìcolo si è utilizzato l'algoritmo ripemdl60 che produce una chiave lunga 160 bit.
risultata affetta da numerosi bug che hanno portato ad abban
Hotplug: è un meccanismo implementato dal kernel Linux
donare il progetto. A partire dalia versione 2.6.9, con molta
che consente di caricare automaticamente i driver necessari
probabilità, cryptoìoop sarà rimosso dal kernel. dd: è un comando che permette la copia di blocchi di dati tra due file, uno di input ed uno di output. I due file in questione possono anche essere file di dispositivo che identificano un'in tera partizione.
Device-Mapper: è un'ìnfrastruttura introdotta nei kernel della serie 2.6 che fornisce un modo generico per realizzare device di memorizzazione di massa virtuali che svolgono ope
razioni aggiuntive rispetto ai dispositivi fisici sui quali si appoggiano, dm-crypt è un esempio di modulo che sfrutta questa infrastruttura.
DM-Crypt: è la nuova implementazione che permette la cifra
tura delle partizioni, molto più sicura e permformante. Si appoggia sull'infrastruttura device-mapper. Per funzionare ha
bisogno di un comando che è dmsetup. dmsetup: è il comando che permette la creazione delia mappatura tra dispositivi virtuali e dispositivi fisici tramite l'infrastruttura messa a disposizione dal device-mapper.
al corretto funzionamento dei dispositivi collegati a caldo al sistema. L'aggiunta di un nuovo dispositivo causa l'esecuzione del comando hotplug che, tramite una serie di script, effettua tutte le operazioni necessarie a predisporre il sistema per il corretto funzionamento dell'hardware. sysfs: è un filesystem virtuale implementato all'interno del
kernel Linux (a partire dalla serie 2.6) che fornisce un'astrazio ne dei dispositivi hardware connessi al sistema tramite un albero di directory che trova posto all'interno della directory /sysfs. Ciascun dispositivo è rappresentato da numerosi file che ne descrivono la maggior parte delle caratteristiche.
Sysfsutils: è un insieme di comandi per la consultazione del sysfs. Tra le utility troviamo systool il quale ci permette di interrogare il sysfs basandoci, ad esempio, sul particolare bus
al quale il dispositivo che ci interessa è connesso (U5B, SCSi, ecc). udev: è un particolare sistema di gestione dei file di dispositi vo, che si appoggia su hotplug. Quando un nuovo dispositivo
viene connesso al sistema, hotplug notifica l'evento a udev, il
cryptsetup.sh: è uno script di shell realizzato dall'autore del
quale crea dinamicamente i file di dispositivo in base a delle
modulo dm-crypt che consente di configurare le partizioni
regole presenti nel file /etc/udev/udev. rules.
cifrate in maniera più semplice rispetto all'utilizzo diretto del comando dmsetup.
Usb-Storage: è il driver del kernel Linux che controlla i dispo sitivi di memorizzazione di massa US8, siano essi pen drive o
File di dispositivo (node): sono dei file speciali che rappre
hard disk esterni. I dispositivi controllati da questo driver ven
sentano i dispositivi connessi al sistema. Ciascun dispositivo
gono riconosciuti come dispositivi SCSI dal sistema.
immettere ogni volta la passphrase, è necessario
cryptsetup.sh: a differenza di quanto è stato visto
creare un chiave crittografica che sarà memorizzata
precedentemente, non è presente l'opzione -h,
nel file /etc/cryptkey. Per fare ciò si può utilizzare
necessaria per la creazione di una chiave; al suo posto viene utilizzata l'opzione -d
il comando hashalot:
/etc/cryptkey
tramite la quale si comunica allo script che la chia # hashalot
-h
ripemdl6Q
>
ve non va generata, ma va utilizzata quella memo
/etc/cryptkey
rizzata all'interno del file /etc/cryptkey. 11 file che contiene la chiave, per ragioni di sicurez
Non resta a questo punto che copiare lo script ripor
za, va protetto in modo da permettere la lettura per
tato ne! box Listato 2 nel file usb-storage
il solo utente root:
/etc/hotplug/usb/, con le stesse accortezze viste
in
per l'esempio precedente (ricordatevi di cambiare il #
ctimod
460
valore 000/000/000 con quello corretto per la
/etc/cryptkey
vostra chiave). Dopo aver impostato correttamente Dopo aver creato la chiave, possiamo ad esempio
lo script, il contenuto cifrato della vostra chiave
USB sarà disponibile all'interno della directory
creare e formattare la partizione cifrata:
/mnt/pdcryptl. #
cryptsetup.sh
-e
aes
-d /etc/cryptkey create
# mkfs #
-t
ext2
cryptsetup.sh
cryptvoll
/dev/sdal
/dev/mapper/cryptvoll remove
cryptvoll
Udew I due script di esempio per hotplug presentati pre cedentemente utilizzano il sysfs per determinare in modo automatico il device SCSI corrispondente al
Si faccia attenzione ai parametri dello script
drive USB appena collegato. Anche se funzionali, i
INFORMAZIONI
due esempi non rappresentano lo stato dell'arte. Infatti, ci potremmo trovare nella situazione in cui si
Chiavi uguali?
hanno più dispositivi di memorizzazione USB da col legare al sistema, alcuni dei quali (come gli hard
disk USB) possono avere più di una partizione al loro interno.
Sicuramente è possibile modificare gli script per
E chi ha due chiavi USB identiche? C'è una soluzione anche
per questo, ma è leggermente più complessa rispetto a quan to visto in precedenza per due chiavi USB diverse. Il problema consiste nell'individuare un attributo presente nel sysfs che
adattarli a questo scenario, ma una soluzione più
identifichi univocamente ciascuna delle due chiavi.
elegante ci viene offerta dall'utilizzo di udev.
Fortunatamente, molti produttori di hardware aggiungono un
Questo software, lavorando in congiunzione con
hotplug, è in grado di gestire dinamicamente la creazione e la rimozione dei file speciali che per mettono l'accesso ai dispositivi di memorizzazione
particolare attributo ai propri dispositivi USB che è il numero di
serie (serial), diverso per ogni dispositivo prodotto. Questo numero viene letto dal kernel ed inserito all'interno del sysfs.
Per poterlo individuare, si può fare ricorso ancora una volta al comando systool:
di massa. Per poter funzionare, udev ha bisogno di un kernel 2.6 con il sysfs abilitato, un'installazione
8 systool
-vb U5b
di hotplug funzionante ed alcune utility per la gestione del sysfs.
La linea di comando riportata restituisce in output la lista dei
L'abilitazione del sysfs e l'installazione di hotplug
dispositivi USB presenti nel sistema; sta a voi localizzare il
sono già state trattate in queste pagine. Per instal lare udev e le utility di supporto su Debian saranno sufficienti questi due comandi:
blocco corrispondente alla vostra chiave USB (dovrebbe essere facile individuarlo in base all'attributo product che riporta una stringa abbastanza esplicativa sulla natura dell'hardware, ad esempio USB DRIVE) ed estrapolare il valore riportato al campo serial. Ad esempio, si potrebbe avere una riga tipo:
tt apt-get
instali sysfsutits
# apt-get
instali
serial
udev
Mentre su Mandrake 10, i comandi equivalenti sono questi:
=
"073C351212D7"
Inserite le due chiavi USB una alla volta e ripetete il procedi mento illustrato per trovare il numera di serie di ciascuna. Una volta che si hanno a disposizione i due numeri di serie è possibile realizzare le regole per udev relative alle due chiavi.
# urpni sysfsutils #
urpni
Eccone un esempio:
udev
BUS="usb",
KERNEL="sd7",
SY5FS{serial}="073CB51212D7"
BUS="usb",
KERNEL="sd?",
SYSFS{serial}="066A012117BC"
Al termine dell'installazione dei pacchetti può esse re necessario effettuare il reboot del sistema.
NAME="sote%riM
Si può ora procedere con un esempio concreto.
NAME="luna%rT
Supponiamo di avere due diverse chiavi USB. Come si è visto precedentemente, ciascuna chiave viene mappata come un dispositivo SCSi al momento del
suo collegamento al sistema. L'ordine con cui le chiavi vengono
mappate.
ad
esempio come
In questo modo la chiave USB con seriale 073C051212D7 farà sempre riferimento ai file di dispositivo /udev/soleX, mentre
l'altra ai file di dispositivo /udev/lunaX (dove X dipende dal numero di partizioni presenti nel dispositivo). NOTA: non tutti i dispositivi di memorizzazione USB sono
/dev/sdal e /dev/sdbl, dipende dall'ordine con cui
dotati di numero di serie, quindi il procedimento descritto non
i due dispositivi vengono connessi. Inoltre, se le
è utilizzabile in tutti i casi.
chiavi sono già inserite al momento dei boot, l'ordi ne è imprevedibile, udev ci può venire in aiuto per
INFORMAZIONI
ovviare a questi inconvenienti, creando dei file di dispositivo con nomi diversi e univocamente definiti
e udev
in base a quale delle due chiavi viene collegata al sistema, in modo indipentente dall'ordine. L'elemento discriminante che aiuta udev a distin guere le due chiavi USB può essere uno degli attri
udev, in Debian, è configurato in modo tale da creare i file di dispositivo direttamente nella directory /dev, che contiene già i file statici creati al momento dell'installazione. Per evitare
buti definiti nel sysfs, come ad esempio il produtto
confusione, si procederà con lo stesso approccio utilizzato
re [Vendor) dei dispositivo.
dalia Mandrake 10, ovvero si creerà un nuova directory chia
Prima di tutto, quindi, dobbiamo determinare il pro duttore
di
ciascuna
delle
due
chiavi
USB.
Colleghiamo la prima al sistema, dopodiché digitia
mata /udev che sarà quella in cui saranno creati tutti i file spe ciali in modo dinamico. Oltre a fare questo sarò necessario
apportare due piccole modifiche al file di configurazione /etc/udev/udev.conf. Le due righe seguenti:
mo il seguente comando: udev
#
systcol
-vii
SCSi
|
grep
root="/dev/"
vendor
udev db="/dev/.utìev.tdb"
L'output ottenuto sarà simile al seguente: Andranno modificate in questo modo: uendor
=
"Genesys
" udev
root="/udev/"
Genesys è il produttore della nostra prima chiave USB. Scolleghiamo il dispositivo ed inseriamo il
udev db="/tidev/.udev. tdb"
secondo, per determinare allo stesso modo il
Per chiunque desiderasse approfondire la conoscen
Vendor, che potrebbe essere, ad esempio, Sony.
za di udev e delle regole sintattiche che guidano la
Una volta ottenute le due stringe di identificazione
stesura del file di configurazione, non possiamo che
dei produttori delle due chiavi, possiamo passare
segnalare il sito:
alla configurazione di udev. Si deve a questo punto
http://vMW.reactivated.net/udevrules.php
editare il file /etc/udev/udev. rules ed aggiungere
Inoltre, un How-To riguardante le chiavi USB (e, più
in coda due righe come le seguenti:
in generale, la classe di dispositivi USB-Storage), è disponibile su:
BUS=*scsi',
SY5FS{vendor}="Genesys\
BUS="scsi",
SYSFS{vendor}="Sony",
http://ww*r. linux.com/howtos/Plash-Hemory-HOV/TO/
NAHE='sole%rT
NAHE="luna%n"
Volume manager
II file /etc/udev/udev. rules contiene le regole uti
Gli ambienti desktop Gnome e KDE si stanno muo
lizzate dal demone udev per generare i file di dispo
vendo verso l'integrazione delle funzionalità intro
sitivo all'interno della directory /udev. Nello specifi
dotte dai kernel della serie 2.6 quali il sysf s e udev.
co, con le due righe sopra riportate, si indica ad
In particolar modo, Gnome, a partire dalia versione
udev
2.6, mette a disposizione un servizio molto interes
di
creare
i
file
speciali
/udev/solel,
/udev/sole2, ecc, quando viene connessa la prima
sante chiamato gnome-volume-Tianager (in breve
chiave USB al sistema (le estensioni 1, 2, 3, ecc,
gvm). mentre, per quanto riguarda KDE, è in fase di
dipendono dal numero di partizioni presenti all'in
sviluppo KDE volume manager, l'equivalente di
terno del dispositivo), mentre i file /udev/lunal,
gvm per il desktop del drago. Attualmente è dispo
/udev/luna2, ecc, verranno creati conseguente-
nibile soltanto tramite CVS, ma a breve dovrebbero
mente al collegamento della seconda chiave.
essere rilasciate le versioni dei pacchetti di kvm per
Naturalmente, per il vostro caso specifico dovete
le
impostare correttamente i parametri SYSFS{vendor}.
Mandrake.
maggiori
distribuzioni,
tra
cui
Debian
e
L'utilità di avere nomi distinti e univoci per i file di
gvm è in grado di effettuare il mount automatico dei
dispositivo delle due chiavi risulta immediatamente
dispositivi di memorizzazione rimuovibili, fornendo
chiara: innanzitutto non dovrete più preoccuparvi
all'utente un feedback di quanto accade tramite la
dell'ordine di inserimento; inoltre, potrete utilizzare
comparsa sul desktop delle icone relative ai disposi
i file speciali in vari file di configurazione, come ad
tivi appena connessi. Oltre al semplice mount, gvm
esempio nel file /etc/f stab:
può eseguire applicazioni differenti in base al tipo di media. Ad esempio, se si inserisce un CD musicale,
/udev/solel
/mnl/sole
auto
user.noauto,rw
9 G
il volume manager lancerà il player selezionato per
/udev/lunal
/rrait/luna
auto
user.noauto.rw
Q 0
la riproduzione delle tracce audio; allo stesso modo, inserendo un DVD si può mandare in esecuzione il
Con queste due righe, sarà sufficiente digitare
player video per la riproduzione del disco. Un'ultima
mount
/mnt/luna per montare
feature interessante è la possibilità di eseguire
ciascuna delle due chiavi U5B, anche quando esse
automaticamente dei comandi al momento della
sono connesse contemporaneamente al sistema.
connessione di un dispositivo USB rimuovibile o
/mnt/sole o mount
all'inserimento di un disco dati nel lettore CD-Rom. Procediamo con ordine: innanzitutto è necessario installare gvm e tutte le componenti aggiuntive necessarie al suo funzionamento. Prima di procede re con l'installazione è, però, necessario controllare Removable Storage
di aver abilitato il sysfs. Per installare gvm su Debian
unstable è necessario utilizzare il comando:
-1 Mount removable driv.?s when hot-pljgged w Mount removable media when jnserted Browse removable media when mserted
# apt-get
instali
gnome-voluirte-manager
•> Auto-run programs on new drives and media
Per quanto riguarda Mandrake il comando equiva
Audio CDs
lente è questo:
v Play aydio CDs when mserted Corrimano:
gnome-cd -unique --play --dev ▼
Browse...
Blank CDs
•*
nautilus -no-desktop bum:
sulla presenza di varie componenti, tra cui hotplug, w
growse...
udev e HAL (Hardware Abstraction Layer).
Quest'ultimo, in particolare, è un software che si
DVD Videos
occupa di creare la lista di tutti i dispositivi connessi
Play DVD Videos when mserted Command:
gnome-volume-manager
gnorre-volume-manager basa il suo funzionamento
Perform action on bjank CDs when mserted Command:
* urpmi
xine dvd://
al sistema corredata da proprietà ben definite per T
Browse...
ogni tipo di dispositivo. Quando un nuovo media USB viene connesso al sistema, hald, il demone
La finestra di configurazione del Gnome Volume Manager
che si occupa della gestione dinamica di questa lista, comunica l'avvenuta modifica dello stato dei dispositivi connessi al sistema a tutte le applicazio-
31
~ ni user-space che hanno bisogno di essere informa
directory Documenti che risiede nelfa nostra home
te dell'evento. Maggiori informazioni su HALsono
{-/Documenti).
reperibili sul sito:
gvm, successivamente alla connessione di un nuovo
http://hal.freedesktop.org
media, effettua il mount automatico della partizione
gvm è una delle applicazioni che ricevono la notifica
(o delie partizioni) in esso contenuta, purché questa
dail'HAL, e reagisce effettuando le operazioni prima
sia definita nel file /etc/fstab. In seguito all'opera
descritte (mount del dispositivo, esecuzione di un
zione di mount, se l'opzione Auto-run programs on
particolare comando, ecc).
new drives and media del pannello di configurazio
Il comportamento di gvm è modificabile tramite un
ne è selezionata, gvm tenta l'esecuzione dello script
pannello di configurazione, mostrato nella figura 1.
di autorun presente nella partizione, il cui nome
al quale si può accedere eseguendo il comando
può essere;
S gnome-uolume-properties
>
.autorun;
> autorun;
nella finestra di un terminale o selezionando la voce
> autorun.sh.
Memoria dì massa rimovibile dal menu di configura zione di Gnome.
Se il file è presente ed i permessi di esecuzione
5ubito dopo l'installazione, gvm è già pronto per
sono corretti i comandi presenti nello script saranno
gestire automaticamente l'inserimento di un disco
eseguiti. Per raggiungere lo scopo prefissato {la sin
nel lettore CD-Rom e di eseguire l'operazione
cronizzazione delle due directory} sarà quindi
opportuna in base al tipo di disco inserito. Per fargli
necessario creare il file .autorun all'interno della
riconoscere automaticamente anche la nostra chia
directory /usbkey. Prima di procedere controllate
ve USB è necessario effettuare qualche semplice
che la vostra chiave USB sia stata riconosciuta e
operazione aggiuntiva.
correttamente montata. Il contenuto del file dovrà
Innanzitutto, è necessario creare una nuova regola
essere il seguente:
nel file /etc/udev/udev. rules in modo tale che al momento delia connessione del dispositivo USB
#!/bin/sh
venga creato automaticamente un file di dispositivo
rsync
-a\tz
/usbkey/
-/Documenti/
univoco, come è stato già spiegato precedentemen te. Ad esempio, supponendo che il vendor del
Questo semplice script non fa nient'aitro che sincro
nostro dispositivo sia "Genesys", è sufficiente
nizzare il contenuto del pen drive con la directory
aggiungere una riga come questa:
specificata come secondo argomento tramite i! comando rsync.
",
Bl)S="scsi",
NAME="mykeyW
Naturalmente potete sostituire le directory da sin cronizzare con altre due diverse, in base al mount
Dopo la modifica è necessario riavviare udev con il
point e alla directory che dovrà contenere i dati
comando
aggiornati.
Se rsync non è presente nel vostra sistema potete #
/ete/init.d/udev
installarlo, su Debìan, con il seguente comando:
restart
In questo modo udev creerà automaticamente il file
# apt-get
instali
rsync
di dispositivo /udev/mykeyl, che identifica la parti zione presente nella nostra chiave USB. in seguito
Su Mandrake il comando è questo:
alla connessione del dispositivo. A questo punto non resta altro che aggiungere una riga nel file
#
urpmi
rsync
/etc/fstab che identifica la partizione in questione: A questo punto è necessario attribuire il permesso /udev/mykeyl
/usbkey auto
defaults.noauto.user
6 0
II mount point /usbkey deve, ovviamente, essere
di esecuzione allo script con il comando:
# ctimod
*x
/usbkey/.autorun
una directory esistente. Per crearla utilizzare il comando mkdir /usbkey.
e modificare la riga di /etc/fstab relativa alla chia
gvm a questo punto è in grado di effettuare il mount
ve USB in questo modo:
automatico della vostra chiave USB. Provate a collegarìa al computer e vedrete comparire sul desktop
/udev/mykeyl
/usbkey
auto
defaults.noauto.user.exec0 8
un'icona chiamata usbkey (come il mount point definito) tramite la quale potrete accedere ai vostri
Provate ora a scollegare e ricollegare al sistema il
dati.
pen drive: noterete una piccola finestra di dialogo
Concludiamo il discorso su gnome-volume-manager
che vi chiederà la conferma per l'esecuzione dello
parlando della possibilità di eseguire uno script in
script di autorun. Rispondendo affermativamente lo
maniera automatica in seguito alla connessione e al
script verrà eseguito e il contenuto della chiave
riconoscimento di una chiave USB. Si supponga di
USB verrà sincronizzato con quello della cartella da
voler sincronizzare il contenuto del pen drive (quin
voi selezionata.
di della directory /usbkey) con il contenuto della
~
Compilazione del kernel Linux Installare un nuovo kernel è sempre stata un'operazione delicata per
un utente alle prime armi. Cerchiamo di avere le idee un po' più chiare esaminando insieme le varie fasi della compilazione
Siila Rizzolì <5.rizzoli@Unuxpratico.com>
Cimentarsi con Linux significa, prima o poi, aver a che fare con il kernel. La maggior
parte delle volte capita perché la vostra di stribuzione preferita ancora non funziona con il
I nomi dei kernel citati prima, quindi, possono esse
componente nuovo fiammante che avete comprato
re scomposti così:
dal vostro negoziante di fiducia, oppure perché il vostro amico esperto di informatica vi ha detto che
Major version:
la versione del kernel che state usando risale al cre
> Minor version:
4 oppure 6
taceo inferiore ed è costellata da spaventosi proble
> PatchLevel:
25 oppure 3
mi di sicurezza, oppure perché siete soltanto curiosi
•
.13mdk oppure .25mdk
ExtraVersion:
di sapere se compilare il vostro kernel è veramente così complicato come dicono.
II punto iniziale fa parte della ExtraVersion, poiché per separare l'ExtraVersion dal PatchLevel si può
I sorgenti dei Kernel
usare qualunque carattere.
Anzitutto, vi servono i sorgenti: resistete alla tentazio
Per scoprire che versione dei kernel state usando,
ne di dirigervi su http://wts<.kernel.org/ e fate una
scrivete in console uname -r e scaricate l'rpm per la
visita alla home page della vostra distribuzione.
versione 2.4 o 2.6 più aggiornato disponibile, oppu
Spesso le varie distribuzioni apportano modifiche e
re installatelo dal CD come esposto in precedenza,
aggiungono componenti particolari ai kernel forniti che
gli rpm si trovano sul terzo; è senz'altro possibile pas
possono non essere presenti nel kernel "ufficiale".
sare da un kernel 2.4 a uno 2.6 o viceversa, ma per
Per Mandrake 10 gli ultimi kernel disponibili sono
cominciare è meglio rimanere con la stessa minor
kernel-source-2.4.25.13mdk.i586.rpm per la ver
version, per minimizzare la possibilità di problemi.
sione 2.4 e kernel-source-2.6.3.25mdk. i.586. rpm
Con debian lanciamo il comando:
per ia versione 2.6; è fondamentale che scarichiate
gli rpm con i sorgenti (kernel-source), perché gli
apt-get
instali
kernel-source
altri contengono solo il kernel precompilato, pronto per essere installato e utilizzato. I sorgenti possono
fornirà una lista di sorgenti disponibili, da cui si
essere decine di megabyte (170 MB una volta
potrà selezionarne uno in particolare (ad esempio
decompressi, per la precisione), quindi tenete pre
apt-get
sente che potrebbe volerci diverso tempo se usate
Troverete i sorgenti appena installati nella cartella
un modem.
/usr/src/linux-<versione
Se non vi va di scaricare i sorgenti, Mandrake 10.1
la cartella /usr/src è presente un link simbolico
instali
kernel-source-2.4.27}.
del
kernel>; dentro
ne ha comunque una copia su CD: lanciate il Centro di Controllo, cliccate su Installa ed eseguite una ricerca per kernel-source, selezionando una delle due versioni che vi si presentano. Ma qual è la versione giusta? Per saperlo, bisogna
Thè Linux Kernel Archives
saper interpretare il numero di versione de! kernel; esso è composto da tre cifre, separate da un punto:
nri a inibir
la prima cifra è la major version. che cambia molto di rado; Linux ha più di 10 anni, eppure siamo solo alla versione 2. La seconda è la minor version, che cambia ogni paio d'anni circa: se questo numero è pari il kernel è da considerarsi stabile, se invece è dispari si tratta di una versione di sviluppo, non adatta
all'utente
finale.
La
terza
cifra
è
il
PatchLevel, e cambia abbastanza spesso, anche due o tre volte in un mese. Alla fine si può opzional
mente aggiungere una ExtraVersion, che può conte
La home page di www.kernel.org da cui è possibile scaricare i sorgenti del kernel
nere sia numeri che lettere.
33
RIQUADRO 2
Cosa contengono i vari kernel tree?
kernel in base alle impostazioni desiderate. Fino alla versione 2.4 di Linux non era possibile risa
lire al file .config che aveva generato il kernel. La
nuova serie 2.6 ci offre questa opportunità, qualora venga abilitata l'opportuna opzione. Il file in que
-ac
stione è /proc/config.gz: è compresso, quindi per
Maìntainer: Alan Cox. Kernel della serie 2.6 ottimizzato per la
visualizzarlo sarebbe opportuno utilizzare z/ess.
stabilita con fix su sicurezza e funzionalità per l'ultima versio ne stabile. Molti di questi fix probabilmente sono già inclusi nell'albero ufficiale di Torvalds e altri lo saranno. -mm
Maintainer: Andrew Morton. Qui potremmo trovare le feature un po' più sperimentali che faranno parte del prossimo kernel
Come possiamo vedere ha una struttura identica ai .config e può essere riutilizzato direttamente in questo formato (ovviamente se decompresso con
gunzip). E' opportuno notare come i file .config possano
ufficiale con particolare attenzione rivolta all'ottimizzazione
cambiare, e quasi sempre lo fanno, da una versione
della VM.
all'altra: l'aggiunta di nuovi supporti e funzionalità
-aa
all'interno del kernel deve necessariamente tradursi
Maintainer: Andrea Arcangeli. Aggiornamenti sulla VM. è il
nell'aggiunta di una nuova voce in questo file con
kernel di sviluppo di Andrea con i suoi migliamenti e le sue
l'assegnamento di una nuova variabile.
correzioni.
-ck
Patch
Maintainer: Con Kolìvas, Albero basato sul 2.6 con un set di
Uno
patch particolarmente orientate all'ottimizzazione dello sche-
OpenSource è la possibilità di personalizzarlo in
duler e della VM, particolarmente indicato per i desktop per
base alle proprie necessità. Linux non è da meno:
migliorarne la reattività del sistema.
dei
vantaggi
dello
sviluppo
di
codice
infatti nel corso degli anni sempre più persone oltre
-osdl
a contribuire nello sviluppo hanno provveduto a for
Per i data center e i carrier che hanno scelto Linux. e quindi
nire versioni alternative del kernel.
estremamente ottimizzato per sistemi e database ad elevate prestazioni. -rmap
Maintainer: Rik van Rie/. Qui Rik van Risi ha sviluppato la pro
pria versione della VM per il kernel Linux già dalla versione 2.4. Rmap ha introdotto il cosidetto "reverse mapping" in modo da avere una VM più efficiente. Il reverse mapping è
Non si tratta di veri e propri "fork", cioè di ramifica zioni che portano a uno sviluppo del kernel che
segue direzioni diverse. Piuttosto l'obbiettivo è quello di distribuire una propria versione personaliz zata, che migliora o articola in maniera differente alcuni aspetti del cosiddetto vantila, il kernel origi
strutturato in modo da dare tutto quello che è necessario per
nale il cui sviluppo è sotto la gestione di Linus
avere una VM il più possibile flessibile. Questa è una delle
Torvalds.
cause per cui gli algoritmi della VM inseriti in questo tree cambiano spesso.
E così abbiamo la possibilità di sperimentare una versione di Linux personalizzata ad esempio da Alan Cox, o da Andrea Arcangeli o da Rik Van Riel.
La differenza che intercorre per ognuna di esse può le architetture supportate da Linux.
essere di varia natura: alcune si occupano di miglio
Un'altra di estrema importanza è certamente
rare solo alcune caratteristiche del sistema (come
include/ : contiene infatti gli header del kernel, fon
ad esempio la VM, o lo scheduler dei processi o i
damentali per compilare qualunque programma che
protocolli di rete) altre invece sono rilasciate con
richiede l'accesso ad alcune informazioni del siste
molta frequenza per consentire la correzione di
ma operativo. Quasi tutte le altre directory, e in
bug, che altrimenti costringerebbero l'utente ad
particolare drivers/ e net/, conservano i sorgenti
aspettare l'uscita della nuova versione stabile, con
del kernel veri e propri.
tempi di attesa decisamente superiori {riquadro 2).
Divisi per tipologia è da qui che verranno generati i
Le patch relative al kernel però non sono soltanto
moduli e gli oggetti che contribuiranno alla costru
queste. Spesso vi si possono trovare delle semplici
zione di Linux.
.config Ma come possiamo accorgersi delle differenze dei
vari kernel? Durante la compilazione del kernel vi è
patch che correggono bug più o meno gravi (come
ad esempio quelli che coinvolgono la sicurezza) o abilitano un supporto mancante o carente.
Conclusione
proprio una fase nella quale l'utente può scegliere
Questo è solo uno degli articoli dedicati al kernel,
cosa includere oppure no.
che hanno l'obbiettivo di guidare l'utente nei passi
Questo processo genera un file .config presente
necessari per la compilazione e spiegare cosa c'è
all'interno nella directory dei sorgenti. La struttura
dietro il suo sviluppo.
di questo file è molto semplice: si tratta di un nor
Il kernel è il cuore del vostro sistema operativo, e
male file di testo contenente delle definizioni di
Linux offre decisamente enormi potenzialità. E' pos
variabili, corrispondenti a un supporto da abilitare.
sibile personalizzarlo a piacimento, aggiungere o
Il formato del file consente anche !a presenza di
aggiornare il supporto a periferiche hardware o sup
commenti, preceduti da #.
porti di rete, filesystem, etc.
Per ogni riga troviamo una variabile alla quale è
L'unica raccomandazione è quella di fare attenzione
stato assegnato un valore. Questi valori verranno
in fase di installazione per evitare spiacevoli sorprese
interpretati in fase di compilazione per creare il
al boot successivo.
Compilazione del kernel Linox Dopo aver scoperto la teoria e aver installato tutti gli strumenti necessari alla compilazione, vediamo in dettaglio quali sono le opzioni da selezionare per un kernel ottimizzato e prestante.
Siila Rizzoli <s.rizzoli@linuxpratico.com>
Prima di addentrarci nella configurazione vera
e propria, è importante sapere, a livello generale, quale ruolo svolge il kernel (o nucleo) nel funzionamento del vostro sistema
byte, che vengono poi interpretate come movi
Linux: esso si occupa di assegnare, secondo neces
menti del mouse o pressioni di tasti da appositi
sità, le risorse hardware del vostro sistema (CPU,
programmi utente, per poi essere scartati dopo
memoria, spazio su disco...) tra tutti i programmi
l'uso. Anche i char device sono accessibili da
che ne fanno richiesta; l'intero sistema viene pre
/dev, identificati da "e" come primo carattere
sentato ai programmi utente con un livello di astra
(char}: anche in questo caso per averne un elen
zione dall'hardware fisico molto elevato.
co digitate:
Un qualunque software, quindi, non dovrà conosce re il modello di CPU, mouse o chipset sia installata
# ls
-La /dev
|
grep "e
sul sistema, perché il kernel crea l'illusione di un ambiente omogeneo: ecco che un programma può
0 Gestione della rete: i dispositivi di rete vengo
essere adattato per essere eseguito su piattaforme
no gestiti in modo diverso dagli altri, ma lo scopo
anche molto diverse tra loro con poco o nessuno
è sempre quello di nascondere ì dettagli imple
sforzo. Le funzionalità del nucleo possono essere
mentativi per fornire funzionalità generiche; il
suddivise in macro-categorie, tra le quali possiamo
programma ping, non ha nessun bisogno di cono
sicuramente evidenziare:
scere l'hardware installato sul pc, il tipo di scheda
o la velocità della stessa. Anzi, non ha nemmeno o La gestione dei processi, assicura che tutti i
bisogno che ci sia una rete per funzionare, utiliz
programmi possano accedere alle risorse hard
zando dispositivi virtuali e/o simulati: per render
ware, facendo in modo che nessun programma
sene conto è sufficiente eseguire
possa farne un uso esclusivo. # ping
localtiost
o La gestione della memoria, fa in modo di uti
lizzare al meglio tutta la ram del vostro sistema
per verificare il funzionamento dell'interfaccia di
e, nel caso questa scarseggi, di ricorrere al disco
loopback, che rappresenta, come dice il nome, la
per salvare le parti della memoria che vengono
macchina locale.
utilizzate meno frequentemente.
Durante la configurazione del vostro nuovo kernel o La gestione dei dispositivi a blocchi e dei
questi aspetti dovranno essere opportunamente
fìlesystem: le unità a disco, siano esse hard-
configurati, indicando esplicitamente se volete che
disk, nastri, edrom o floppy, vengono tutte rico
una certa periferica o una certa funzionalità sia
nosciute da Linux come delle lunghissime
inclusa o meno nel kernel personalizzato che andre
sequenze di byte, accessibili in qualunque punto
te ad ottenere. La grande maggioranza del codice
a piacere, che vengono interpretate dai
del nucleo, infatti, è composta da driver per i singoli
filesystem per dare l'illusione di un albero di car
dispositivi che, nella maggioranza dei casi, non vi
telle contenente dei file. I dispositivi a blocchi
troverete mai a dover utilizzare: includere il codice
sono solitamente accessibili tramite file particola
che permette la gestione di tali dispositivi aumenta
ri contenuti in /dev e identificati dal tipo "b"
1 tempi di compilazione senza alcun beneficio per il
come primo carattere (block): se siete curiosi di
vostro computer.
vedere quali siano, digitate:
Un kernel più piccolo occupa meno memoria e parte
più in fretta, rendendo la macchina più performan« ls
-la /dev
|
grep "b
te, soprattutto se l'hardware è un po' datato; que sta, in effetti, è forse la migliore ragione per confi
o La gestione dei dispositivi a carattere: tutti
gurarlo manualmente.
gli altri dispositivi sono solitamente accessibili un
Le distribuzioni Linux offrono sistemi preconfigurati
byte alla volta: il mouse e Sa tastiera, per esem
per funzionare su una varietà di macchine molto
pio, restituiscono entrambi brevi sequenze di
ampia, quindi tendono a comprendere quasi tutti i
37
oppure, per gli amanti dì Gnome:
driver disponibili risultando per forza di cose ingom branti e poco adatti a computer con risorse limitate.
# make
Primi passi
geonfig
Una volta installati tutti gli strumenti che vi servono
che sono comunque i corrispondenti grafici della
(vedete le pagine precedenti), si può cominciare la
interfaccia su ncurses. 1 due tool sono pressoché
configurazione del kernel: vedremo la versione più
identici e permettono di selezionare le varie voci
recente, ia 2.6 e useremo il metodo più comune,
utilizzando il mouse: offrono una visione d'insieme
cioè menuconfìg, una interfaccia di configurazione
sicuramente migliore e, vantaggio non da poco,
basata sulla libreria ncurses, che presenta dei
permettono di avere le spiegazioni dei vari comandi
menu testuali con una navigazione tra gli stessi
direttamente nella finestra principale, senza dover
abbastanza intuitiva:
selezionare un altro tasto. Le varie voci dei menu sono contrassegnate da sim
boli grafici precisi:
1 aprite una console di root; 2 cambiate cartella in /usr/src/linux;
■ -->
3 come root, digitate make mrproper; questo
comando cancella tutti i file temporanei ed è
questa freccia segnala la presenza di un sottomenu;
i'i
molto comodo per ricominciare da zero nel
questo è un semplice checkbox Sì/No: se è presente l'asterisco l'opzione relativa è
caso qualcosa vada storto;
attivata, in caso contrario è disattivata;
4 potete personalizzare il vostro kernel aggiun -=■;-
gendo alia versione un nome a vostra scelta;
le parentesi "angolate" funzionano come
per far questo è necessario modificare il file
quelle quadre, ma hanno un'opzione
Makefile; le prime tre righe contengono i para
aggiuntiva, ia "M", che significa che quella
metri che ne compongono la versione:
particolare funzione può essere compilata
VERSION
come Modulo;
= 2
[x]
PATCHLEVEL = 6
la parentesi rotonde identificano una scelta multipla, come in Processor type and
SUBLEVEL = 11
Nella quarta, invece, potete scrivere un identi-
features, dove si può scegliere una CPU tra
ficativo qualunque che vi permetterà di distin
tutte le famiglie di processori supportate
guere il vostro kernel dagli altri già installati
(386, 486, Pentium, ecc);
nel sistema e, soprattutto, farà in modo che i
0
le parentesi rotonde (senza spazi in mezzo)
moduli vengano salvati in una cartella separa
significano che è possibile specificare una
ta, eliminando possibilità di sovrascriverli acci
serie di caratteri, solitamente parametri per il
dentalmente.
kernel.
EXTRAVERSION = ■ Imuxpratico;
5 solitamente le distribuzioni copiano in /boot i
Analizziamo, adesso, le differenze presenti nel caso
file usati per generare i kernel precompilati; i
in cui si decide di attivare una opzione, di compilar
file si chiamano config-<versione del
la come modulo, o di non includerla affatto.
nucleo> e possono essere usati come punto di partenza per creare la vostra configurazione
personalizzata; tutto quel che dovete fare è copiare uno di questi file in /usr/src/linux e rinominarlo in . conf ig. Nel caso voleste pren dere la configurazione corrente del kernel, se
li-li l-ì
elcct onìy driuers expecied to condì le cleanly
disponibile, potete utilizzare il comando: # zcat
Le opzioni di "code maturity level options"
/proc/config.gz > /usr/src/linux/.config
6 Digitate make menuconfig.
vslp« V IPC
OSiK Hi».s,i«fi Queucs
SU Process flccomitinu SD Process Rccounting version 3 file foraat
Se tutto è andato bene, la vostra console dovrebbe diventare grigia con un bordo azzurro e in centro dovreste trovare un menu con numerose voci: pote te spostarvi tra le opzioni con le frecce Su e Giù;
con le frecce sinistra e destra potete invece selezio
(17) Ì-! i )
1-1
nare uno dei tre pulsanti in basso, cioè <Select>,
vsetl siipport udì I iii'i support njblo systea-Ciill auditing support
ernel log buffer sì?c (16 => 6ÌKB, 1? ■>> 128K8Ì
upport for hot-pJuogabte deuices crncl .config support
onfisurc standard kernel fenitires {for snall svstos)
—>
Le opzioni di "generai setup"
<Exit> e <Help>, attivabili premendo Invio. Help, in
particolare, è una miniera di informazioni, non atti vate o disattivate mai una opzione senza prima aver letto la voce di aiuto corrispondente.
Se siete amanti delle shell grafiche, al posto di make menuconfig è possibile usare anche: #
make
xconfig
["1 i -1 1•!
H dulc u orcetl «odiile unloading
H dille yersioning wpóoH (EHPERIMEHTflU nloudtìc kernel Radiile loadina
Le opzioni di "loadable module supporr
RIQUADRO 1
i driver in fase di sviluppo e quelli poco stabili. Consigliamo
L'output dei comandi di
sulla
Ispci e Isusb
incomplete
Intel
Corp.
82855PM Processor to
I/O Controller
lutei Corp.
Controller:
UICH4-M) USB
Intel
USB UHCI
82855PM Processor to AGP Controller
Controller:
Corp.
828B1DB/DBL/D8H
Controller Mi
Intel
Corp.
(ICH4/ICH4-
(rev 01}
82801DB/DBM
(ICH4/ICH4-M)
USB
2.6 EHCI Controller (rev DI} IDE interface: Intel Corp. Controller
82881D8M (ICH4)
Intel
Corp.
VGA compatitile
Intel Corp.
(ICH4/ICH4-L/ICH4-M)
(rev 31)
controller:
ATI Technologìes Ine Radeon R25Q
li IRadeon Mobxlity 98BB H9I CardBjs bridge:
82801DB/DBL/DBM
AC'97 Audio Controller (rev 01)
828Q1DB/DBUDBM
AC'97 Motìem Controller
FireWire
(rev 02)
Texas Instruments PCI4528 PC card Caróbus
(rev 81)
(IEEE
1394):
Texas Instruments:
Unknown device 8B2a
casella and/or
caso: se, in ogni caso, voleste attivarla, selezionate only
drivers
expected
to compile cleanly, che permetterà di escludere il codice troppo sperimentale dall'albero dei sorgenti. In Generai
setup attivate tutte le opzioni: di parti
colare interesse sono Support
anonymous
for
paging
of
memory che, in caso di necessità, lascia
che il kernel usi parte del disco come ram aggiunti hot-pluggable
for
devices che attiva il supporto per
PC Card, USB e tutte le tecnologie che vi permetto no di collegare dispositivi al PC dopo l'accensione e Kernel
.config
support, una nuovissima feature,
già citata, che memorizza nel kernel stesso la confi gurazione usata per crearlo. In Loadable
module
support attivate tutte e tre le
opzioni per poter creare un kernel modulare, che permetterà quindi l'aggiunta, successivo al boot, di
(rev Bl) Ethernet controller: Controller Network
la
va (la cosiddetta memoria virtuale), Support
(ICH4/ICH4-L/ICH4-H)
Controller
Ultra ATA Storage
(rev 81)
Multimedia audio controller:
Modelli:
vuota
development
code/drivers; cambiare lo stato di
anche la casella Select
bridge:
(rev 03) USB
lasciare for
altre automaticamente, come succede in questo
bridge:
(rev 03)
PCI
di
Prompt
certe opzioni ne può attivarne alcune o disattivarne
# Ispci Host
quindi
destra
(Mobile)
controller:
Intel Corp.
B2540EP Gigabit Ethernet
funzionalità aggiuntive. Da questo punto in avanti, sarà spesso necessario
(rev 03) Intel Corp.
PRO/Wireless LAN 2186 3B
Mini PCI Adapter (rev 64)
sapere con esattezza l'hardware disponibile sul vostro pc. I comandi Ispci e Isusb vi elencheranno rispettivamente i dispositivi collegati al bus PCI e
# Isusb IO
alle porte USB; per sapere marca e modello del pro
1668:B441 Actiontec Electronics,
Ine.
cessore potete usare uname
Ihexl
-p. Un'altra preziosa
IO Q8ec:9811 H-Systems Flash Disk Pioneers
fonte di informazioni è il comando dmesg, che visua
ID
lizza i log del kernel memorizzati fin dalle prìmissi-
B46d:c591 Logitech,
Ine.
Cordless Molise Receiver
me fasi del boot.
# uname
Nel primo caso (opzione attivata) il codice prescelto
InteUR)
-p Pentium(R)
H processor
1509NHz
diverrà parte dell'unico, grosso file che si ottiene a
compilazione terminata e le funzionalità offerte
In Processor
saranno sempre disponibili subito dopo il boot del
quindi PC-Compatible e, nel nostro caso, Pentium M
kernel. Nel secondo caso (modulo) viene creato un
(cioè processori Centrino). Altre opzioni interessanti
file separato, con estensione .ko, che può essere
sono Symmetric
caricato in caso di necessità. Disporre di un kernel
macchine con più processori: i possessori di un
modulare presenta diversi vantaggi, primo tra tutti
nuovo Pentium 4 con tecnologia HT possono attiva
l'utilizzo ottimale delle risorse del pc: se disponete
re
di periferiche che usate raramente è possibile cari
(HyperThreading)
care il supporto per le stesse solo quando servono
simo dell'efficienza.
senza appesantire tutto l'ambiente con funzionalità
Preemptible kernel è una feature introdotta con la
non sempre utilizzate-
versione 2.6 che migliora la responsività di Linux
questa
type
and
features sceglieremo
multi-processing
opzione
e
la
scheduler
support, per
successiva,
SMT
support per il mas
Anche lo sviluppo viene avvantaggiato dall'utilizzo
nell'uso come desktop, in particolare durante i gio
di moduli: è molto più semplice testare del codice
chi. Attivate anche HPET
che può essere caricato e rimosso dinamicamente,
support e Enable
kernel
Timer
irq
Support, MTRR
balancing. Le altre
piuttosto che dover riavviare il computer ogni volta
opzioni possono essere disattivate.
che si effettua una modifica.
Le opzioni che abbiamo preso in considerazione
La quantità di opzioni disponibili nella fase di perso-
finora non possono essere compilate come moduli,
nalizzazione del kernel può indubbiamente spaven
poiché esse modificano le funzionalità di base del
tare: come consolazione, sappiate che gli script di
sistema, cioè la gestione dei processi e della
configurazione hanno già escluso in automatico
memoria, che devono essere sempre disponibili.
tutte le opzioni che non riguardano la vostra archi
La macchina di test, un portatile IBM, riporta le informazioni contenute nel riquadra 1.
tettura.
Questi due comandi sono in grado di darvi una
Le opzioni nel dettaglio
panoramica abbastanza completa dell'hardware
level
presente sul vostro pc; alcuni si spiegano da soli
options vi permette di escludere automaticamente
(Audio controller, il Modem) per altri potrebbe
II primo gruppo di opzioni, Code
maturity
essere necessario farsi aiutare da Google (il device
Possiamo compilare il nostro kernel con il supporto
U5B della Actiontec, per esempio, è un chip blue-
per tutte o solo alcune delle periferiche elencate in
tooth, anche se non è chiaro dalla descrizione).
precedenza, ma ce n'è una che è generalmente
Tutte le opzioni relative all'hardware elencato pos
fondamentale, senza la quale nulla può funzionare,
sono essere trovate nel menu Device
->
cioè il controller IDE, che pilota il disco rigido del
(ciò non è sempre vero, ad esempio la scheda wire-
PC: le opzioni del kernel corrispondenti le trovate in:
Drivers
less dei portatili centrino ancora non fa parte del
Device Drivers
kernel ufficiale}; le prime volte è un lavoro lungo,
Attivate (utilizzando l'asterisco!)
-> ATA/ATAPI/HFM/RLL support.
perché i dispositivi supportati sono numerosissimi,
ATA/ATAPI/HFM/RLL
ma una volta che avrete affinato la vostra configu
DISK
support, PCI PlIXn
le opzioni
support, Include
IDE
chipset
chipsets
IDE/ATA-2
support e infine
razione essa tenderà a rimanere abbastanza stabile
Intel
nel tempo.
sono presenti anche i controller di molti altri
support; in questa pagina
RIQUADRO 2
II file initrd: cosa c'è dentro. Alcune distribuzioni, per la verità ormai quasi tutte, utilizzano
Si tratta di un filesystem di tipo ext2. Proviamo a montarlo per
un kernel estremamente modulare, con quasi tutte le caratte
visionare il contenuto, ovviamente utilizzando il device di
ristiche già incluse sotto forma di moduli, anche quelle relative
loopback:
ai vari filesystem come ext3 o reiserfs e ad alcuni device come SCSI.
Fino a quando il supporto per un certo filesystem non è carica to non è possibile leggere dati da partizioni che lo utilizzano: ecco allora che sembra impossibile poter avviare un sistema Linux che abbia, ad esempio, la partizione root con ext3, se
# mkdir /imit/loop
# mount
# Is
initrd.decompress /mnt/loop
-o
loop
-la /mnt/loop/
ext3 è supportato come modulo.
totale 13
Il problema sembra ricorsivo e per evitare che il tutto si chiuda
drwx
9
root
root
1624
mag
27
23:67
in un tremendo dilemma, gli sviluppatori del kernel hanno
drwxr-xr-x
9
root
root 4696
apr
11
2B:49
../
ideato una tecnica che vede la presenza di un nuovo file.
drwxr-xr-x
2
root
root
1924
mag
27
23:67
bin/
drwxr-xr-x
4
root
root
1624
mag
27
23:67
dev/
drwxr-xr-x
3
root
root
1624
mag
27 23:67 etc/
1624
mag
27
detto nutrd, un disco virtuale in memoria (ramdisk) che viene decompresso subito dopo l'avvio del kernel e che, al suo inter no, contiene i comandi essenziali da eseguire prima del boot
23:67
./
lib/
drwxr-xr-x
2
root
root
Tra i compiti essenziali di initrd, quindi, vi è proprio quello di
-rwxr-xr-x
1
root
root
caricare in memoria i moduli necessari perché la continuazio
drwxr-xr-x
2
root
root
ne del boot avvenga senza problemi.
Irwxrwxrwx
1
root
root
drwxr-xr-x
2
root
root 1G24 mag 27 23:67 sys/
drwxr-xr-x
2
root
root
del sistema vero e proprio.
Vediamo di verificare il contenuto di initrd: l'indicazione del file utilizzato (ve ne possono essere diversi) la troviamo diret tamente nel boot manager in uso. L'utility file ci darà qualche informazione in più:
«
1024
27
23:07
proc/
3 mag 27
23:G7
sbin
1624
mag
23:67 Unuxrc*
mag
27 23:07
-> bin/
sysroot/
All'interno di tale file vi è un vero e proprio filesystem, con una alberatura piuttosto standard: compito di questo file è caricare
file /boot/initrd.img
/boot/initrd.img:
786 mag 27
symbolic
Link to
'inìtrd-2.6.8.1-19mdk.ìmg1
Quel file altro non è che un link simbolico. Andiamo a verificare il tipo di file al quale punta:
dei moduli aggiuntivi per il kernel, quindi andiamo alla ricerca di tali file:
# finti /mnt/loop
-name *.ko
/mnt/loop/lìb/scsi mod.ko # file /boot/iRitrd-2.6.8.1-iemdk.img ìnitrd-2.6.8.1-19ndk.inig:
gzip
/mnt/loop/lib/aic7xxx.ko
compressed
data,
from Unix,
max
compressici
11 file cosi ottenuto è compresso con gzip, e viene scompattato automaticamente dopo il boot del kernel. Proviamo a decomprimerlo nella nostra home per verificare quello che si ottiene: #
zcat
#
Is
initrd.decompress
-rw-r--r--
1
root
root
initrd.decompress
1 root
root
ecco che, nella directory /lib si trovano proprio i file che dovranno essere caricati al boot.
particolare filesystem, che indica i comandi da eseguire
/boot/initrd-2.6.8.1-lQmdk.img
296Q49 mag
27
23:07
/boot/initrd-2.6.8.1-lBmdk.img
-rw-r--r--
/mnt/loop/lib/jbd.ko /mnt/loop/lib/ext3.ko
Ed è proprio lo script linuxrc, presente nella root di questo
/boot/initrd-2.6.8.1-18mdk.img >
-la
/rant/loop/lib/sd mod.ko
» file /mnt/loap/linuxrc /mnt/loop/lìnuxrc:
a /bin/nash script
text executable
888832 mag 23 18:29 initrd.decompress
tale file non è altro che uno script, che utilizza un particolare la dimensione del nuovo initrd è vistosamente più grande
interprete, nash, ridottissimo, visto che deve soltanto eseguire
dopo la decompressione. A questo punto c'è da capire che
basilari comandi.
cosa è rimasto:
All'interno di linuxrc si trovano tutte le operazioni che vengo no eseguite: oltre al caricamento dei moduli, vi sono altre ope razioni, come la modifica della root di sistema utilizzando il
# file initrd.decompress Initrd.decompress:
Linux
rev
1.6 ext2
filesystem data
comando pivot root, necessarie affinchè il boot continui sul filesystem reale e non sul ramdisk.
u produttori, tra cui dovreste trovare anche quello per
vengono salvati i moduli, generalmente nella direc-
il
tory/lib/modules/<versione del
vostro
PC:
in
generic/default
caso IDE
contrario,
chipset
abilitate
kernel>).
support, che
La seconda tecnica è utilizzare un ramdisk iniziale,
dovrebbe fornire un set minimo di funzionalità, a
una sorta di aggiunta al kernel: si tratta di un
scapito delle performance. E' importante seleziona
filesystem che viene montato subito dopo il boot
re il driver corretto per il vostro chipset/scheda
del kernel e che, al suo interno, permette l'esecu
madre, poiché le prestazioni dei dischi fissi influi
zione di comandi aggiuntivi, come ad esempio il
scono moltissimo sulla velocità dell'intero sistema;
caricamento di moduli come quelli per ext3 o rei-
per un rapido test potete usare il comando:
serfs, che sono contenuti all'interno del ramdisk stesso (vedi riquadro 2).
# hdparm
-t
Nel caso optiate per la prima soluzione includete
/dev/hda
con<*> il filesystem della vostra partizione "/" (soli Ovviamente sostituite ad hda il device corrispon
tamente ext2, ext3 o reiserfs).
dente: confrontate i dati ottenuti con il kernel "origi
Passiamo ora alla seiezione degli pseudo-filesystem
nale" e con il vostro e, se avete selezionato il driver
necessari per i! funzionamento del sistema: essi
giusto, le prestazioni saranno simili, o forse addirit
non servono per immagazzinare dei file, ma espon
tura migliori!
gono e permettono la modifica di informazioni rela
Se il vostro pc monta dischi SCSI, dovrete attivare il
tive a diversi aspetti del sistema, rappresentate - in
supporto per il controller corretto, al sottomenu
puro stile UNIX - come file raggnippati in cartelle;
SCSI
ad esempio /proc vi permette di influenzare il fun
device
support
->
SCSI
low-level
drivers.
zionamento di Linux semplicemente scrivendo o
Fatto questo, dobbiamo selezionare i filesystem che
leggendo i suoi numerosi "file" ed è utilizzato da
abbiamo intenzione di utilizzare: per avere un'idea
innumerevoli programmi.
di cosa includere potete sia guardare il file
Date un'occhiata, per esempio, a come l'output di
/etc/fstab, sia eseguire semplicemente mount.
cat
Tutti i filesystem possono essere compilati come
oppure come /proc/meminfo sia molto simile al
moduli, ma bisogna fare attenzione: i moduli, in
comando free: anzi, spesso molti comandi vanno
quanto file, devono risiedere su un filesystem dal
proprio a leggere i valori in /proc prima di restititui-
/proc/mounts sia simile a quello di mount,
quale vengono caricati, quindi potremmo trovarci di
re l'output.
fronte al classico problema dell'uovo e della gallina;
Altro FS di sicura importanza è devfs anche se,
non è possibile infatti usare un filesystem modulare
dalla versione 2.6 del kernel ne viene sconsigliato
fin quando non è stato caricato il modulo e non si
l'uso, per verificare che sia attivo o meno eseguite
può caricare il modulo fino a quando non si può leg
il comando;
gere il filesystem.
Per superare questo impasse ci sono due tecniche:
# p5
-aef
|
grep devfsd
la prima consiste semplicemente nell'includere nel kernel il filesystem che vi permette di leggere le
se devfsd, il demone che si occupa di popolare la
partizioni necessarie al boot (la root, quella dove
directory /dev, è in esecuzione, attivate il FS dev nel kernel.
Un altro Pseudo-FS che potrebbe esservi utiie è il Virtual Memory FS, conosciuto anche come tmpfs o shmfs, che permette di utilizzare la memoria come se fosse una porzione di disco (ovviamente con i
331
xt2 extentlei) atlributes xt2 P0S1K Ikcess Contro! l.isls
xt2 Securily Label*:
<H>
13 jour-Fitil I iii'j file wsU-n M»porl xt3 --.-il !.■!• iì attributes Kt3 POSDt (Iccess Conlrol Lisi* x!3 Securilv,Labels D (ext31 debuggins support siserfs suoport
nable reiserfs debug aode lats in /proc/fs/reiserrs
eiserfS cxtendpd rillributes
<H> ■1 I ■I
eiserFS POSIH ficcess Contro! Lists eiserFS Security Labels FS filesvste» suppori FS POSIX Sccess Contro] Lisis FS debugging FS stntistics
Le opzioni in "Filesystems"
limiti di dimensione della stessa): in alcuni casi può essere utile se alcuni programmi utilizzano file tem
poranei di piccola dimensione, al fine di garantire prestazioni di tutto rispetto. Una volta che avrete terminato la configurazione,
potrete salvarla usando l'opzione del menu princi pale Save Configuration
to an Alternate File;
uscendo, vi verrà chiesto nuovamente se volete sal
vare la configurazione: rispondete sì, in questo modo il vostro lavoro verrà salvato nel file .config,
che verrà usato da make per compilare il vostro kernel.
.config è un semplice file di testo; contiene un'op
040!
ysfs File sysle» support
[-! / eu file syste» support (OBSOLETE) [
)
llloMtlI icijHv Donili fi! l)D0t
ebug deufs / eu/pts [«tende»! fltlributes
iriuaì «eKiry fi!e syste» support (forucr sh« fs)
K geTLB file syste» support <H> uperwiimi reaoirìible «edia support
1
I
nable superanunt debug code
zione per ogni riga, che può essere commentata (cioè disattivata, in questo caso la riga comincia con
il
carattere
#),
compilata
kernel
chi conosce il linguaggio C, può essere interessante sapere che le opzioni definite in
Le opzioni in "Pseudo Filesystems"
nel
(0P2l0NE=y) oppure modulare (OPZIONE=m). Per .config sono
(semplificando un poco) dei #define, che vengono
usati dai programmatori per abilitare/disabilitare
certe parti del codice in modo da ottenere il risulta
image-/boot/vralinuz-2.6.11-linuxpratico
to desiderato dall'utente. E' possibile modificare manualmente questo file, ma si corre il rischio di
# Nome del
non rispettare le complicate dipendenze del kernel, non riuscendo poi a compilarlo; usare menuconf ig vi
# Nome del
nostro nuovo kernel
:)
# Non modificatelo root=/de«/hda3
variare, a seconda dell'hardware utilizzato e delle
opzioni che si sceglie di includere, da diverse ore a
kernel
read-only
mette al riparo da questo inconveniente. La durata della compilazione vera e propria può
file del
label-NewKernel
# Partizione che contiene il
filesystem di
root
initrd=/boot/initrd-test
pochi minuti; per cominciare, usate semplicemente
# Nel
caso doveste utilizzare un initrd
il comando: Non modificate il resto del file, se volete essere sicuri di poter ancora usare il vecchio kernel nel
/usr/src/linux# make
caso quello nuovo non funzioni! Una volta salvato il quando tutto sarà finito, usate il comando
file eseguite li lo e riavviate il sistema; al boot sce
gliete la nuova label e, se tutto è andato bene, /usr/src/linux* make modules
dovreste avere nuovamente il vostro sistema linux
instali
funzionante.
per installare i moduli.
Nel caso utilizzaste GRUB, invece, aggiungete in
Il kernel vero e proprio lo troverete invece nel file
fondo al file di configurazione, generalmente in
bzlmage nella sottodirectory arch/i386/boot/;
/boot/grub/menu. Ist le righe
copiatelo nella vostra partizione di boot, assegnan doli un nome significativo (tipo vmlinuz-2.6.11); per
title NewKernel
finire, anche se non è strettamente necessario per il funzionamento del sistema, cambiate il nome al file
# Etichetta del
kernel
nuovo
kernel
(hdB,2)/boot/vmli.nuz-2.6.11-liniJxprat:ico
System.map (es. System.map-2.6.11) e copiatelo
root-/dew/hda3
dalla cartella /usr/src/linux a /boot, quindi crea
te un link simbolico con il comando:
# Parametri
initrd
In
-sf
/boot/System.tnap-2.6.11
kernel
(JidB,2)/boot/initrd
» Nel tt
del
caso
si
debba
usare un
initrd
/boot/System.map
Salvate il file modificato e riavviate {con grub non Abbiamo quasi finito: dobbiamo solo modificare il
c'è bisogno di eseguire il boot loader).
file di configurazione del bootloader in modo che
Realisticamente, azzeccare tutte !e opzioni giuste al
riesca a caricare il nuovo kernel.
primo colpo è praticamente impossibile, ma analiz
Nel caso il vostro bootloader sia LiLO, aprite
zare i problemi e risolverli è un'ottima strada per
/etc/lilo.conf con un editor di testo e copiate la
impare e assicurarsi che la volta successiva vada
sezione relativa al vostro kernel in fondo al file, poi
meglio, I due strumenti migliori per capire cosa è
modificatelo in modo che sia simile all'esempio qua
successo sono il comando dmesg e ovviamente t log
di seguito.
di sistema, che solitamente si trova nel file
RIQUADRO 3
\ Rendere più carini i messaggi dì bnot Se i messaggi del kernel durante il boot vi sembrano particolar mente noiosi (e onestamente un po' lo sono}, perché non abbellire il tutto con una grafica carina?
/var/log/messages.
Se invece il boot non va a buon fine, può darsi che vi si presenti un messaggio simile a questo:
kernel
panie
:
VFS
:unable to mount
root
fs on GB:83
Le cause di questo messaggio possono essere diverse, ma la più comune è, come citato in prece
Il progetto bootsplash http://www.bootsplash.org
denza, compilare il supporto al filesystem di root
permette di visualizzare, durante il boot, una immagine JPEG, e
come modulo. Per lo stesso motivo abbiamo incluso
addirittura mostrare animazioni e barre di avanzamento: sono
nel kernel il controller IDE; se fosse stato compilato
gli effetti che le maggiori distribuzioni orientate al desktop
come modulo non avremmo potuto caricarlo dal
hanno già incluso. L'opzione da attivare, se presente (non è ancora stato incluso nei kernel vanilla) si trova in Device Driver -> Graphics support -> BooSplash configuration.
disco e il kernel non avrebbe saputo cosa fare, se non andare in panico. Siete incoraggiati a provare
di persona cosa succede, ma prestate sempre
I file relativi alla configurazione potete trovarli generalmente in
molta attenzione a non sovrascrivere il vecchio ker
/etc/bootspash/theme5 dove
nel o la configurazione del bootloader, se volete
alcuni file .cfg indicheranno dove dovranno essere reperite
le immagini per ie varie risolu zioni del desktop. Se non
continuare a usare il vostro sistema Linux: in caso di problemi, comunque, potrete utilizzare la proce
dura già descritta nelle pagine precedenti che utiliz
riuscite da soli a personalizza
za una distribuzione live per effettuare il ripristino
re il vostro boot, non dispera
del sistema. Non resta che da lasciarvi alla compila
te: all'interno della raccolta vi
zione e ai vostri kernel: ricordate, questa possibilità
sarà una sezione su come
è prerogativa solo dei sistemi veramente liberi!
effettuare queste modifiche.