4. Installer votre beau BIND tout neuf

Je dois signaler que si vous avez une installation existante de BIND, par exemple en provenance d'un RPM, vous devrez probablement la désinstaller avant d'installer la nouvelle. Sur un système Red Hat, cela implique probablement de désinstaller les paquetages bind et bind-utils, et peut-être bind-devel et caching-nameserver, si vous les avez.

Vous voudrez sans doute sauvegarder une copie du script d'init (par exemple /etc/rc.d/init.d/named), s'il y a en un, avant de faire ceci ; ce sera utile plus tard.

4.1.  Installer les outils en dehors de l'environnement restreint

C'est la partie facile :-). Il vous suffit d'exécuter make install et laissez faire le tout pour vous. Vous pouvez vouloir faire un chmod 000 /usr/local/sbin/named par la suite, pour être sûr que vous n'exécutez pas accidentellement une copie de BIND hors environnement restreint (il s'agit de /usr/sbin/named si vous ne lui avez pas dit d'aller dans /usr/local/sbin comme je l'ai suggéré).

4.2.  Installer les binaires dans l'environnement restreint

Seuls deux parties du paquetage doivent s'exécuter à l'intérieur de l'environnement restreint : le démon principal named lui-même, et named-xfer, qui est utilisé pour les transferts de zone. Vous pouvez simplement les copier depuis l'arborescence source :

# cp src/bin/named/named /chroot/named/bin

# cp src/bin/named-xfer/named-xfer /chroot/named/bin

4.3. Mise en place du script d'init

Si vous avez un script d'init provenant de votre distribution, le mieux serait probablement de simplement le modifier pour exécuter /chroot/named/bin/named, avec les paramètres appropriés. Les paramètres sont… (roulement de tambour s'il vous plaît…)

  • -u named, qui demande à BIND de s'exécuter en tant qu'utilisateur named, plutôt que root.

  • -g named, pour exécuter BIND avec le groupe named également, plutôt que root ou wheel.

  • -t /chroot/named, qui demande à BIND de s'exécuter dans l'environnement restreint que nous avons construit.

Ce qui suit est le script d'init que j'utilise avec mon système Red Hat 6.0. Comme vous pouvez voir, il est presque identique à celui livré par Red Hat. J'ai aussi modifié la commande ndc restart de façon à ce qu'elle redémarre le serveur correctement, et le garde à l'intérieur de l'environnement restreint. Vous pouvez probablement faire la même chose dans votre script d'init, sans avoir à copier celui-ci.

#!/bin/sh
#
# named           Le rôle de ce script "shell" est de démarrer et d'arrêter
#                 named (serveur DNS BIND)
#
# chkconfig: 345 55 45
# description: named (BIND) est le serveur de nom de domain (DNS)
# qui est utilisé pour résoudre les noms de domaines en adresses IP.
# probe: true

# Bibliothèque basique de fonctions.
. /etc/rc.d/init.d/functions

# Configuration basique du réseau.
. /etc/sysconfig/network

# Vérifie que la gestion du réseau est assurée
[ ${NETWORKING} = "no" ] && exit 0

[ -f /chroot/named/bin/named ] || exit 0

[ -f /chroot/named/etc/named.conf ] || exit 0

# En fonction de ce qui est appelé
case "$1" in
  start)
        # Démarrer le démon.
        echo -n "Démarrage de named : "
        daemon /chroot/named/bin/named -u named -g named -t /chroot/named
        echo
        touch /var/lock/subsys/named
        ;;
  stop)
        # Arrêter le démon.
        echo -n "Arrêt de named : "
        killproc named
        rm -f /var/lock/subsys/named
        echo
        ;;
  status)
        /usr/local/sbin/ndc status
        exit $?
        ;;
  restart)
        /usr/local/sbin/ndc -n /chroot/named/bin/named "restart -u named -g named -t /chroot/named"
        exit $?
        ;;
  reload)
        /usr/local/sbin/ndc reload
        exit $?
        ;;
  probe)
        # named sait comment redémarrer intelligemment ; nous ne voulons pas 
        # que linuxconf nous propose de le redémarrer à chaque fois
        /usr/local/sbin/ndc reload >/dev/null 2>&1 || echo start
        exit 0
        ;;

  *)
        echo "Utilisation: named {start|stop|status|restart}"
        exit 1
esac

exit 0

Sur les systèmes Caldera OpenLinux, vous avez juste besoin de modifier les variables définies au début et le système va s'occuper du reste pour vous :

NAME=named
DAEMON=/chroot/named/bin/$NAME
OPTIONS="-t /chroot/named -u named -g named"

4.4. Changement de configuration

Vous devez aussi ajouter ou modifier quelques options dans votre named.conf pour avoir vos différents répertoires en ordre. En particulier, vous devez ajouter (ou changer, si vous les avez déjà) les directives suivantes dans la section options :

directory "/etc/namedb";
pid-file "/var/run/named.pid";
named-xfer "/bin/named-xfer";

Puisque ce fichier est lu par le démon named, tous les chemins sont naturellement relatifs à l'environnement restreint.

Quelques personnes ont aussi rapporté devoir ajouter quelques lignes supplémentaires à leur named.conf pour obtenir un fonctionnement correct de ndc :

controls {
    unix "/var/run/ndc" perm 0600 owner 0 group 0;
};