Preparazione struttura directory
Si presume che bind9 sia già installato e configurato nel sistema, ora non facciamo altro che creare un ambiete chiuso in cui eseguire il servizio. Nel caso qualche malintenzionato scoprisse e sfruttasse una falla in bind per accedere al sistema si ritroverebbe comunque rinchiuso in questa "prigione" senza avere accesso ai dati presenti in tutto il sistema, limitando così i danni.
Ho iniziato innanzitutto pianificando la struttura delle directory cercando di non deviare dalla struttura già impostata da ubuntu. La struttura risulta la seguente
/chroot/bind |-dev |-etc |-bind |-run |-named |-usr |-lib |-var |-cache |-bind |
Potete creare la suddetta struttura con i seguenti comandi:
mkdir -p /chroot/bind
cd /chroot/bind
mkdir
-p dev etc/bind run/named usr/lib var/cache/bind
2 - Copiamo i file
copiamo ora i file di configurazione e i database nella nuova posizione
cp -R /etc/bind /chroot/bind/etc/
cp -R /var/cache/bind /chroot/bind/var/cache/
aggiustiamo i permessi
chown bind:bind /chroot/bind/etc/bind/named*
chown bind:bind /chroot/bind/etc/bind/pri*
chown bind:bind /chroot/bind/etc/bind/rndc.key
Bind ha necessita di scrivere anche nella cartella /chroot/bind/run/named dove piazza il pid e in /chroot/bind/var/cache/bind quindi aggiustiamo di conseguenza
chown bind:bind /chroot/bind/run/named
chown bind:bind /chroot/bind/var/cache/bind
3 - File di sistema
Una volta che bind saà avviato all'interno di questo spazio non avrà accesso a nulla al di fuori di esso, sarà quindi necessario creare i file speciali di cui ha bisogno
mknod /chroot/bind/dev/null c 1 3
mknod /chroot/bind/dev/random c 1 8
chmod 666 /chroot/bind/dev/{null,random}
un altro file da copiare e' localtime in modo che named possa creare i log con il giusto orario
cp /etc/localtime /chroot/bind/etc/
Alcune librerie sono necessarie per il corretto funzionamento e la soluzione che ho trovato è quella di montare /usr/lib nella nuova zona protetta con il seguente comando
mount --bind /usr/lib /chroot/bind/usr/lib
tuttavia per fare in modo che al riavvio del sistema questa impostazione venga mantenuta è necessario aggiungerla a /etc/fstab
echo /usr/lib /chroot/bind/usr/lib none bind,ro 0 0 >> /etc/fstab
4 - Configurazione servizi
Con l'introduzione di Systemd i parametri in /etc/default/bind vengono completamente ignorati in quanto gestiti interamente dagli script di systemd quindi per modificare i parametri di avvio dobbiamo utilizzare il comando systemctl che ci permetterà di creare un avvio personalizzato del servizio
systemctl edit bind9
Questo comando ci apre un editor all'interno del quale imposteremo i nostri parametri, copiamo dunque all'interno quanto segue
[Service]
ExecStart=
ExecStart=/usr/sbin/named -f -t /chroot/bind -u bind -c /etc/bind/named.conf
con questo indichiamo che stiamo modificando un servizio, col primo execstart svuotiamo quanto ha in memoria systemd e con il secondo impostiamo i parametri che vogliamo noi, più precisamente in questo caso ci interessava aggiungere il parametro -t con cui indichiamo che vogliamo lanciare named in chroot
Non ci resta che avviare il servizio e vedere se tutto funziona esaminando /var/log/syslog
service bind9 restart