LinuxPratico - Sistema

Page 1

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.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.