Rechteloser Perl Nameserver =========================== 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`__. __ http://www.net-dns.org/ __ http://www.net-dns.org/docs/Net/DNS/Nameserver.html 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: .. code-block:: perl # 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: .. code-block:: perl # 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.