Update zu Debian 10 siehe unten.
Update zu Debian 11 siehe unten.
Installation von bind9
Zuerst einmal bind9 installieren:
apt-get install bind9 Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden zusätzlichen Pakete werden installiert: bind9utils Vorgeschlagene Pakete: bind9-doc resolvconf ufw Die folgenden NEUEN Pakete werden installiert: bind9 bind9utils 0 aktualisiert, 2 neu installiert, 0 zu entfernen und 3 nicht aktualisiert. Es müssen 482 kB an Archiven heruntergeladen werden. Nach dieser Operation werden 1.654 kB Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren? [J/n] J Holen: 1 http://security.debian.org/ jessie/updates/main bind9utils amd64 1:9.9.5.dfsg-9+deb8u3 [168 kB] Holen: 2 http://security.debian.org/ jessie/updates/main bind9 amd64 1:9.9.5.dfsg-9+deb8u3 [314 kB] Es wurden 482 kB in 0 s geholt (1.571 kB/s). Vorkonfiguration der Pakete ... Vormals nicht ausgewähltes Paket bind9utils wird gewählt. (Lese Datenbank ... 49778 Dateien und Verzeichnisse sind derzeit installiert.) Vorbereitung zum Entpacken von .../bind9utils_1%3a9.9.5.dfsg-9+deb8u3_amd64.deb ... Entpacken von bind9utils (1:9.9.5.dfsg-9+deb8u3) ... Vormals nicht ausgewähltes Paket bind9 wird gewählt. Vorbereitung zum Entpacken von .../bind9_1%3a9.9.5.dfsg-9+deb8u3_amd64.deb ... Entpacken von bind9 (1:9.9.5.dfsg-9+deb8u3) ... Trigger für man-db (2.7.0.2-5) werden verarbeitet ... Trigger für systemd (215-17+deb8u2) werden verarbeitet ... bind9utils (1:9.9.5.dfsg-9+deb8u3) wird eingerichtet ... bind9 (1:9.9.5.dfsg-9+deb8u3) wird eingerichtet ... Lege Gruppe »bind« (GID 124) an ... Fertig. Lege Systembenutzer »bind« (UID 120) an ... Lege neuen Benutzer »bind« (UID 120) mit Gruppe »bind« an ... Erstelle Home-Verzeichnis »/var/cache/bind« nicht. wrote key file "/etc/bind/rndc.key" # Trigger für systemd (215-17+deb8u2) werden verarbeitet ...
Da der bind9-daemon nach der Installation sofort gestartet wird, wird er sofort gestoppt:
systemctl stop bind9.service
In der systemd-Konfigurationsdatei für den bind9 muss der Containerpfad für den chroot angegeben werden (Option -t).
vim /etc/systemd/system/multi-user.target.wants/bind9.service
[Unit] Description=BIND Domain Name Server Documentation=man:named(8) After=network.target [Service] ExecStart=/usr/sbin/named -f -u bind -t /var/bind9/chroot ExecReload=/usr/sbin/rndc reload ExecStop=/usr/sbin/rndc stop [Install] WantedBy=multi-user.target
Um im systemd dem bind9 mitzuteilen, dass er in einem chroot arbeiten soll, muss folgendes Verzeichnis und Konfigurationsdatei angelegt werden:
mkdir /etc/systemd/system/bind9.service.d vim /etc/systemd/system/bind9.service.d/chroot.conf
[Service] ExecStart= ExecStart=/usr/sbin/named -f -u bind -t /var/bind9/chroot
Die Angabe der Änderung in der Datei /etc/systemd/system/bind9.service.d/chroot.conf hat den Vorteil, dass die Konfigurationsdatei des Maintainers /etc/systemd/system/multi-user.target.wants/bind9.service weiterhin eingelesen wird (es könnten ja Änderungen und Verbesserungen auch dort erfolgen!), diese aber punktuell angepasst werden kann. Alternativ könnte man die Datei /etc/systemd/system/multi-user.target.wants/bind9.service auch nach /etc/systemd/system kopieren und dort anpassen. Dann wird /etc/systemd/system/multi-user.target.wants/bind9.service nicht mehr eingelesen, d.h. dass dort vom Maintainer durchgeführte Änderungen bzw. Verbesserungen später keine Relevanz mehr haben werden. Weitere Details dazu in der Manpage von systemd.unit(5)
Die Änderung muss dem systemd durch einen Neustart mitgeteilt werden:
systemctl daemon-reload
Jetzt die Pfadstruktur für den chroot-Käfig erzeugen:
mkdir -p /var/bind9/chroot/{etc,dev,var/cache/bind,var/run/named}
Jetzt die speziellen Zugriffsrechte für bestimmte Pfade zuweisen:
mknod /var/bind9/chroot/dev/null c 1 3 mknod /var/bind9/chroot/dev/random c 1 8 chmod 660 /var/bind9/chroot/dev/{null,random}
Einschub für Debian 9: für random müssen die Zugriffsrechte mit folgendem Befehl korrekt gesetzt werden (ungetestet/danke Katharina für den Hinweis)
mknod /var/bind9/chroot/dev/urandom c 1 9
Jetzt die Konfigurationsdateien verschieben und Kompatibilität zum alten Platz gewährleisten:
mv /etc/bind /var/bind9/chroot/etc ln -s /var/bind9/chroot/etc/bind /etc/bind
Weitere Anpassungen an den Zugriffsrechten:
chown -R bind:bind /etc/bind/* chmod 775 /var/bind9/chroot/var/{cache/bind,run/named} chgrp bind /var/bind9/chroot/var/{cache/bind,run/named}
In der Konfigurationsdatei /etc/init.d/bind9 den Pfad zur PID-Datei ändern:
PIDFILE=/var/bind9/chroot/var/run/named/named.pid
Dem syslog-daemon beibringen, dass er auf einem zusätzlichen Socket hören soll:
echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf
Jetzt kann der syslog-daemon neu gestartet und der bind9-daemon gestartet werden:
/etc/init.d/rsyslog restart; /etc/init.d/bind9 start
Update zu Debian 10 buster
Debian 10 buster aktiviert im Kernel automatisch apparmor. Damit läuft bind9 nicht mehr korrekt, da es über apparmor die Zugriffsrechte auf die Konfigurationsdateien verloren hat. Im Log sieht man folgende Meldungen:
… open: /etc/bind/named.conf: permission denied …
Entweder deinstalliert man apparmor (Reboot nicht vergessen, da sich apparmor im Kernel verewigt!), oder man passt die Konfigurationsdatei /etc/apparmor.d/local/usr.sbin.named:
/var/bind9/chroot/etc/bind/** r, /var/bind9/chroot/var/** rw, /var/bind9/chroot/dev/** rw, /var/bind9/chroot/run/** rw,
Infos dazu gibt es auch im bind9 wiki von Debian.
Update zu Debian 11 bullseye
Nach dem Update von Debian 11 muss die unter Debian 8 erstellte systemd-Unit-Datei gelöscht werden:
rm -rf /etc/systemd/system/bind9.service.d
Ludwig
Hallo und vielen Dank,
das ist kurz und schmerzlos gehalten.
Viele Grüße
Ludwig
Marc
Cooles Howto. Vielen Dank Rana!
Aber kleine Ergänzung. Bis auf nachfolgenden Punkt funktioniert alles, aber bei 1:1 adoption under Jessie 8.9 sowie Stretch (9.x) schlägt es fehl. Ursache ist folgende Config:
“vim /etc/systemd/system/bind9.service.d/chroot.conf
[Service]
ExecStart=
ExecStart=/usr/sbin/named -f -u bind -t /var/chroot/named”
Da sollte die Expression “ExecStart=/usr/sbin/named -f -u bind -t /var/bind9/chroot” lauten. Ansonsten zeigt die Bind9 Config auf “var/chroot/named” welche im Toturial nicht wirklich verwendet wird.
Mit der kleinen Anpassung, läuft der chrooted Bind auch Debian Stretch (9.x). Das einfach für Leuts, die auf das Toturial stossen.
Beste Grüsse
Marc
Rana
Danke schön für die Fehlermeldung!
Bei einigen meiner Server hatte ich es unter /var/chroot/named laufen. Da hatte ich in der Beschreibung die Konfigurationen vermischt.
Katharina Eichler
Unter Debian 9 muss anstatt mknod /var/bind9/chroot/dev/random 1 8
mknod /var/bind9/chroot/dev/urandom c 1 9
verwendet werden.
Beste Grüße und Danke für die ansonsten sehr gute Anleitung
Katharina
Rana
Vielen Dank Katharina.
Ich habe den Artikel mit Deiner Info entsprechend ergänzt.
Katharina Eichler
Ich habe da noch eine Kleinigkeit herausgefunden,
unter Debian 9 liegt das Verzeichnis run/named nicht mehr unter /var
sondern muss im chroot dann unter /var/bind9/chroot/run/named.
Die Berechtigungen müssen natürlich ebenfalls wie in Deiner Anleitung gesetzt werden.
Nochmals Dank,
Katharina