Bind działający w chroocie

Własny dns to czasami niezbędna usługa. Jednak sporo mówi się o tym, że jest to usługa często atakowana i niebezpieczna, przez to administrator zwykle się nieco obawia, jaki wpływ może mieć uruchomienie binda na bezpieczeństwo serwera i innych usług. Jest jednak sposób, aby uruchomić serwer dns w wyizolowanym środowisku, żeby nawet wprzypadku włamania nie miało ono wpływu na bezpieczeństwo systemu. Poniżej trochę skomplikowana, ale skuteczna procedura, która polega na przeniesieniu części plików do specjalnie utworzonego katalogu.

Najpierw zainstalujemy pakiet bind (pacman -S bind), następnie utworzymy katalog /etc/bind przydzielając go użytkownikami named z prawami 700. Wewnątrz tego katalogu należy utworzyć następne:

ls -l /etc/bind
drwxr-xr-x 2 root root 1024 2007-08-28 13:15 dev
drwxr-xr-x 3 root root 1024 2008-04-28 17:21 etc
drwxr-xr-x 4 root root 1024 2007-08-28 13:10 usr
drwxr-xr-x 3 root root 1024 2007-08-28 13:52 var


Do katalogu /etc/bind/dev skopiować należy dwa pliki urządzeń z /dev – null i random.
Do /etc/bind/etc kopiujemy plik /etc/group oraz dowiązanie symboliczne @localtime oraz named.conf i rndc.key oraz tworzymy katalog bind, prawa powyższych plików powinny wyglądać tak:

ls -l /etc/bind/etc
drwxr-xr-x 2 named named 1024 2008-06-26 21:48 bind
-rw-r–r– 1 root root 426 2007-08-28 12:59 group
lrwxrwxrwx 1 root root 33 2007-08-28 13:14 localtime -> /usr/share/zoneinfo/Europe/Warsaw
-rw-r–r– 1 named named 1450 2008-04-28 17:21 named.conf
-rw-r–r– 1 named named 0 2007-08-28 13:19 rndc.key


Do katalogu /etc/bind/usr kopiujemy kilka plików, tworząc dla nich podkatalogi podobnie, jak w oryginalnej ścieżce. A więc musimy mieć:
../usr/share/zoineinfo/Europe/Warsaw
i w podkatalogu ../usr/sbin następujące pliki z oryginalnego ich położenia.

/etc/bind/usr/sbin
*named
*named-checkconf
*named-checkzone
*rndc
*rndc-confgen


Nie ma potrzeby zmieniać właściciela plików, ani ich uprawnień.
Pozostaje nam jeszcze do wypełnienia katalog /etc/bind/etc/bind. Do niego skopiujemy plik root.hint oraz 127.0.0.zone, w nim też będą nasze pliki stref dla własnych domen. Jeśli nasz serwer będzie pełnił funkcje master dobrze by było, aby pliki stref należały do roota i miały prawo do odczytu dla pozostałych. W przypadku serwera slave pliki stref zostaną zapisane samoczynnie po synchronizacji serwerów.
Aby nasz serwer dns pracował w chroocie musimy jeszcze przerobić skrypt startowy /etc/rc.d/named, powinien mieć taka postać:

/etc/rc.d/named
#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

PID=`pidof -o %PPID /usr/sbin/named`
OPTS=”-u named -t /etc/bind”
case „$1” in
start)
stat_busy „Uruchamiam DNS”
[ -z „$PID” ] && /usr/sbin/named $OPTS
if [ $? -gt 0 ]; then
stat_fail
else
add_daemon named
stat_done
fi
;;
stop)
stat_busy „Zatrzymuję DNS”
[ ! -z „$PID” ] && kill $PID &> /dev/null
if [ $? -gt 0 ]; then
stat_fail
else
rm_daemon named
stat_done
fi
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo „Użycie: $0 {start|stop|restart}”
esac
exit 0


Teraz już tylko odpowiednio skonfigurujemy named.conf i utworzymy plik strefy, a wtedy możemy uruchomić swój serwer. W pliku named.conf trzeba zmienić sekcję options podając prawidłowe dla naszej konfiguracji ścieżki:
options {
directory „/etc/bind”;
pid-file „/var/run/named.pid”;
datasize default;
version „Microsoft DNS Server v1.5 (WinME)”;
recursion no;
};

Dodatkową „zmyłką” może być sposób przedstawiania się naszego serwera DNS. 🙂

autor: W. Trąmpczyński (Maciek)


Dodaj komentarz