Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > media > main-release > by-pkgid > e05c4514608e650af9b28d9be1d35a18 > files > 232

howto-html-it-10.1-4mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
 <TITLE>Chroot-BIND HOWTO: Preparazione della gabbia</TITLE>
 <LINK HREF="Chroot-BIND-HOWTO-3.html" REL=next>
 <LINK HREF="Chroot-BIND-HOWTO-1.html" REL=previous>
 <LINK HREF="Chroot-BIND-HOWTO.html#toc2" REL=contents>
</HEAD>
<BODY>
<A HREF="Chroot-BIND-HOWTO-3.html">Avanti</A>
<A HREF="Chroot-BIND-HOWTO-1.html">Indietro</A>
<A HREF="Chroot-BIND-HOWTO.html#toc2">Indice</A>
<HR>
<H2><A NAME="s2">2.</A> <A HREF="Chroot-BIND-HOWTO.html#toc2">Preparazione della gabbia</A></H2>

<H2><A NAME="ss2.1">2.1</A> <A HREF="Chroot-BIND-HOWTO.html#toc2.1">Creazione di un utente</A>
</H2>

<P>Come detto nell'introduzione, &egrave; una pessima idea eseguire BIND con i
privilegi di root. Quindi, prima di cominciare, creiamo un utente a parte
per BIND. Non dovete mai usare a questo scopo un generico utente gi&agrave;
presente, come <CODE>nobody</CODE>. Comunque, alcune distribuzioni come SuSE e
Mandrake hanno iniziato a fornire un utente specifico per BIND (di solito
chiamato <CODE>named</CODE>) che potete modificare invece di crearne uno da zero.</P>
<P>Per creare l'utente dovete aggiungere in <CODE>/etc/passwd</CODE> una riga come
questa:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
named:x:200:200:Nameserver:/chroot/named:/bin/false
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>E per il gruppo un'altra come questa in <CODE>/etc/group</CODE>:
<BLOCKQUOTE><CODE>
<PRE>
named:x:200:
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Questo crea un utente e un gruppo per BIND chiamati <CODE>named</CODE>.
Accertatevi che l'UID e il GID (nel nostro esempio entrambi 200) siano unici
sul vostro sistema. La shell &egrave; impostata a <CODE>/bin/false</CODE> perch&eacute; questo
utente non avr&agrave; mai bisogno di fare il login.</P>


<H2><A NAME="ss2.2">2.2</A> <A HREF="Chroot-BIND-HOWTO.html#toc2.2">Struttura delle directory</A>
</H2>

<P>Ora dobbiamo impostare la struttura delle directory che useremo per la
gabbia chroot in cui BIND verr&agrave; eseguito. Pu&ograve; essere ovunque nel vostro
filesystem, i pi&ugrave; paranoici potrebbero anche metterla in una partizione
separata. In seguito assumeremo di usare <CODE>/chroot/named</CODE>. Iniziamo
creando questo albero di directory:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/chroot
  +-- named
       +-- dev
       +-- etc
       |    +-- namedb
       |         +-- slave
       +-- var
            +-- run
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Se usate l'utilit&agrave; GNU <CODE>mkdir</CODE> (come sui sistemi Linux), potete crearlo
con questi comandi:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# mkdir -p /chroot/named
# cd /chroot/named
# mkdir -p dev etc/namedb/slave var/run
</PRE>
</CODE></BLOCKQUOTE>
</P>

<H2><A NAME="ss2.3">2.3</A> <A HREF="Chroot-BIND-HOWTO.html#toc2.3">Sistemare i dati di BIND</A>
</H2>

<P>Supponendo che abbiate gi&agrave; installato BIND in modo convenzionale e che lo
stiate gi&agrave; utilizzando, avrete gi&agrave; un file <CODE>named.conf</CODE> e i file di
zona. Questi file devono essere spostati (o solo copiati, per sicurezza)
nella gabbia chroot, in modo che BIND possa accedervi: <CODE>named.conf</CODE> va
in <CODE>/chroot/named/etc</CODE> e i file di zona possono andare in
<CODE>/chroot/named/etc/namedb</CODE>. Per esempio:
<BLOCKQUOTE><CODE>
<PRE>
# cp -p /etc/named.conf /chroot/named/etc/

# cp -a /var/named/* /chroot/named/etc/namedb/
</PRE>
</CODE></BLOCKQUOTE>

Normalmente BIND necessiterebbe di poter scrivere nella directory
<CODE>namedb</CODE>, ma nell'interesse della sicurezza non glielo permetteremo. Se
il vostro nameserver fa da slave per qualche zona dovr&agrave; aggiornare quei file
di zona, il che significa che dovremo metterli in un'altra directory a cui
BIND potr&agrave; accedere.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# chown -R named:named /chroot/named/etc/namedb/slave
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Ricordate che dovrete spostare tutti i file delle zone per cui fate da
slave in questa directory ed aggiornare il vostro <CODE>named.conf</CODE>.</P>
<P>BIND avr&agrave; anche bisogno di scrivere i suoi pidfile e le informazioni
sulle statistiche di uso nella directory <CODE>/var/run</CODE>, perci&ograve;
permettiamogli di farlo:
<BLOCKQUOTE><CODE>
<PRE>
# chown named:named /chroot/named/var/run
</PRE>
</CODE></BLOCKQUOTE>
</P>

<H2><A NAME="ss2.4">2.4</A> <A HREF="Chroot-BIND-HOWTO.html#toc2.4">File per il supporto al sistema</A>
</H2>

<P>Una volta che BIND &egrave; nella sua gabbia chroot non potr&agrave; pi&ugrave; accedere a
<B>nessun</B> file fuori da essa. Per&ograve; avr&agrave; bisogno di accedere ad alcuni
file fondamentali, anche se non a tanti quanti ne servivano a BIND 8.</P>
<P>Uno dei file che gli serviranno nella sua gabbia &egrave; il buon vecchio
<CODE>/dev/null</CODE>. Attenzione che il comando esatto per creare questo device
node pu&ograve; variare da sistema a sistema; controllate il vostro script
<CODE>/dev/MAKEDEV</CODE> per sicurezza. Alcuni sistemi potrebbero richiedere
anche <CODE>/dev/zero</CODE>, che pu&ograve; essere creato in modo simile. Si dice che la
release candidata BIND 9.2.0 richieda anche <CODE>/dev/random</CODE>. Per la
maggior parte dei sistemi Linux potete usare i seguenti comandi:
<BLOCKQUOTE><CODE>
<PRE>
# mknod /chroot/named/dev/null c 1 3
# mknod /chroot/named/dev/random c 1 8
# chmod 666 /chroot/named/dev/{null,random}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Per FreeBSD 4.3 invece:
<BLOCKQUOTE><CODE>
<PRE>
# mknod /chroot/named/dev/null c 2 2
# mknod /chroot/named/dev/random c 2 3
# chmod 666 /chroot/named/dev/{null,random}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Vi servir&agrave; anche un altro file nella directory <CODE>/etc</CODE> all'interno della
gabbia. Dovete copiare <CODE>/etc/localtime</CODE> (su alcuni sistemi noto come
<CODE>/usr/lib/zoneinfo/localtime</CODE>) in modo che i log di BIND riportino
l'ora esatta degli eventi registrati. Lo potete fare con il seguente
comando:
<BLOCKQUOTE><CODE>
<PRE>
# cp /etc/localtime /chroot/named/etc/
</PRE>
</CODE></BLOCKQUOTE>
</P>

<H2><A NAME="logging"></A> <A NAME="ss2.5">2.5</A> <A HREF="Chroot-BIND-HOWTO.html#toc2.5">Logging</A>
</H2>

<P>A differenza di un normale avanzo di galera, BIND non pu&ograve; scrivere le sue
registrazioni di log sui muri :-). In genere a questo scopo BIND usa
<CODE>syslogd</CODE>, il demone dei log di sistema. Comunque questo tipo di
logging &egrave; effettuato scrivendo le voci di registrazione nello speciale
socket <CODE>/dev/log</CODE>, che per&ograve; ora non pu&ograve; usare perch&eacute; si trova fuori
dalla sua gabbia. Per fortuna ci sono un paio di soluzioni a questo
problema.</P>

<H3>La soluzione ideale</H3>

<P>Il modo ideale per risolvere il problema richiede una versione
ragionevolmente recente di <CODE>syslogd</CODE>, che supporti lo switch <CODE>-a</CODE>
introdotto da OpenBSD. Controllate la pagina di manuale <CODE>syslogd(8)</CODE>
per sapere se la versione di syslogd che avete lo supporta o no.</P>
<P>Se s&igrave;, tutto quello che dovete fare &egrave; aggiungere lo switch "<CODE>-a
/chroot/named/dev/log</CODE>" alla linea di comando che lancia <CODE>syslogd</CODE>.
Sui sistemi che usano il SysV-init completo (ovvero la maggior parte delle
distribuzioni Linux) tale riga si trova solitamente nel file
<CODE>/etc/rc.d/init.d/syslog</CODE>. Per esempio, sul mio sistema Linux Red Hat
ho cambiato la riga</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
daemon syslogd -m 0
</PRE>
</CODE></BLOCKQUOTE>

in
<BLOCKQUOTE><CODE>
<PRE>
daemon syslogd -m 0 -a /chroot/named/dev/log
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>&Egrave; interessante notare come dalla Red Hat 7.2 questo processo sia anche pi&ugrave;
facile. Ora c'&egrave; un file <CODE>/etc/sysconfig/syslog</CODE> in cui definire
parametri supplementari per syslogd.</P>
<P>I sistemi Caldera OpenLinux usano un esecutore di demoni, <CODE>ssd</CODE>, che
legge la configurazione dal file <CODE>/etc/sysconfig/daemons/syslog</CODE>. In
questo caso dovrete soltanto modificare la riga delle opzioni in questo
modo:
<BLOCKQUOTE><CODE>
<PRE>
OPTIONS_SYSLOGD="-m 0 -a /chroot/named/dev/log"
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>In modo simile, mi &egrave; stato detto che sui sistemi SuSE il posto migliore per
aggiungere questa opzione &egrave; il file <CODE>/etc/rc.config</CODE>. Cambiare la riga
<BLOCKQUOTE><CODE>
<PRE>
SYSLOGD_PARAMS=""
</PRE>
</CODE></BLOCKQUOTE>

e metterci
<BLOCKQUOTE><CODE>
<PRE>
SYSLOGD_PARAMS="-a /chroot/named/dev/log"
</PRE>
</CODE></BLOCKQUOTE>

dovrebbe funzionare.</P>
<P>E per ultimo ma non per importanza, con FreeBSD 4.3 sembra che dobbiate
soltanto modificare il file <CODE>rc.conf</CODE> e scrivere:
<BLOCKQUOTE><CODE>
<PRE>
syslogd_flags="-s -l /chroot/named/dev/log"
</PRE>
</CODE></BLOCKQUOTE>

Il <CODE>-s</CODE> &egrave; per motivi di sicurezza e fa parte delle impostazioni
predefinite. Il <CODE>-l</CODE> &egrave; una directory locale in cui mettere un altro
nodo di log.</P>
<P>Una volta capito come intervenire sul vostro syslogd e scritta la sua nuova
configurazione riavviate <CODE>syslogd</CODE>, o con kill e riavviandolo (con i
parametri supplementari), oppure usando gli script SysV-init che lo fanno
per voi:
<BLOCKQUOTE><CODE>
<PRE>
# /etc/rc.d/init.d/syslog stop
# /etc/rc.d/init.d/syslog start
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Appena ripartito syslogd, dovreste vedere un "file" in
<CODE>/chroot/named/dev</CODE> di nome <CODE>log</CODE>, che dovrebbe apparire cos&igrave;:</P>
<P>
<PRE>
srw-rw-rw-   1 root     root            0 Mar 13 20:58 log
</PRE>
</P>

<H3>Le altre soluzioni</H3>

<P>Se avete un <CODE>syslogd</CODE> troppo vecchio dovrete trovare un altro sistema
per scrivere i vostri log. Ci sono un paio di programmi in giro, come
<CODE>holelogd</CODE>, che aiutano agendo come "proxy" ed accettando le voci di
log dal BIND in chroot e passandole al vero socket <CODE>/dev/log</CODE>.</P>
<P>In alternativa potete configurare BIND per fargli scrivere i log su normali
file invece di farli passare attraverso syslog. Leggete la documentazione di
BIND per scoprire i dettagli su come farlo se scegliete questa strada.</P>

<H2><A NAME="perm"></A> <A NAME="ss2.6">2.6</A> <A HREF="Chroot-BIND-HOWTO.html#toc2.6">Restrizione dei permessi</A>
</H2>

<P>Prima di tutto sentitevi autorizzati a restringere l'accesso all'intera
directory <CODE>/chroot</CODE> al solo utente <CODE>root</CODE>. Chiaramente non tutti
potrebbero volerlo fare, soprattutto se avete altri software installati in
quella directory che non apprezzano la cosa.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# chown root /chroot
# chmod 700 /chroot
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Potete anche tranquillamente limitare l'accesso a <CODE>/chroot/named</CODE>
all'utente <CODE>named</CODE>:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# chown named:named /chroot/named
# chmod 700 /chroot/named
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Per un accesso ancora pi&ugrave; ristretto, sui sistemi Linux possiamo rendere
alcuni file e directory immutabili, usando l'utilit&agrave; <CODE>chattr</CODE> sui
filesystem ext2:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# cd /chroot/named
# chattr +i etc etc/localtime var
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>In modo equivalente, su FreeBSD 4.3 potreste voler dare un'occhiata a
<CODE>chflags</CODE> se volete rendere file e directory immutabili. Per esempio il
comando che segue dovrebbe rendere immutabile tutto il contenuto della
directory <CODE>/chroot/named/etc</CODE>:
<BLOCKQUOTE><CODE>
<PRE>
# chflags schg /chroot/named/etc/*(*).
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Sarebbe una bella cosa farlo anche per la directory <CODE>dev</CODE> ma purtroppo
questo impedirebbe a <CODE>syslogd</CODE> di creare il suo socket <CODE>dev/log</CODE>.
Potete impostare il bit immutabile anche per altri file o directory della
gabbia chroot, come i file di zona primaria, se sapete che non non
cambieranno mai.</P>

<HR>
<A HREF="Chroot-BIND-HOWTO-3.html">Avanti</A>
<A HREF="Chroot-BIND-HOWTO-1.html">Indietro</A>
<A HREF="Chroot-BIND-HOWTO.html#toc2">Indice</A>
</BODY>
</HTML>