Mithilfe des Net::DNS-Moduls für Perl ist es recht einfach einen eigenen Nameserver zu betreiben. Alles, was man dafür braucht wird schon mitgeliefert – auch ein entsprechendes Skript.
Das Problem dabei ist nur folgendes: Um den Port 53 zum Lauschen zu öffnen braucht man unter Unix-artigen Systemen, wie bei allen Ports unter 1024, normalerweise root-Rechte. Also muss man den DNS-Server als root starten und gefährdet sein System, durch einen weiteren Dämon, der – eigentlich unnötigerweise – als root läuft.
Aber auch mit Perl ist es kein Problem die Rechte des eigenen Prozesses zu beschränken, und so, nach dem Öffnen des entsprechenden Ports, als unprivilegierter Prozess weiterzuarbeiten. Dazu müssen vor der main_loop-Anweisung folgende Zeilen eingefügt werden, die sowohl die „effective“, als auch die „real“ User-, sowie Group-ID setzen:
# gid/egid
$( = $) = 109;
# uid/euid
$< = $> = 109;
109 ist hierbei die ID des unprivilegierten Benutzers. Am Besten erstellt man für diesen Zweck einen neuen Unix-Benutzer oder nimmt User-ID und Group-ID des Benutzers „nobody“.
Wer wirklich ganz auf Nummer sicher gehen möchte, der kann den Nameserver außerdem „chrooten“, ihm also den Zugriff auf weite Teile des Dateisystems entziehen. Dazu müssen die folgenden zwei Zeilen vor die obigen kopiert werden, denn der chroot-Befehl benötigt aus Sicherheitsgründen root-Rechte:
# in das Verzeichnis wechseln
chdir '/var/empty/';
# und es zur Wurzel machen
chroot '/var/empty/';
/var/empty/ ist bei den meisten Linux-Distributionen für solche Zwecke vorgesehen, kann aber beliebig ersetzt werden.
#0012,
erstellt: 2009-03-17, aktualisiert: 2009-03-17,
src,
meta
Start,
Impressum,
zurück: Ocean Girl, vor: PHP: Dynamisches open_basedir