<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>2. Préparation de l'environnement restreint</title><link href="style.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.68.1" name="generator"><link rel="start" href="index.html" title=" Guide pratique d'utilisation de BIND en environnement restreint "><link rel="up" href="index.html" title=" Guide pratique d'utilisation de BIND en environnement restreint "><link rel="prev" href="ar01s01.html" title="1. Introduction"><link rel="next" href="ar01s03.html" title="3. Compiler et installer votre beau BIND tout neuf"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">2. Préparation de l'environnement restreint</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s01.html">Précédent</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s03.html">Suivant</a></td></tr></table><hr></div><div class="section" lang="fr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N100D7"></a>2. Préparation de l'environnement restreint</h2></div></div></div><div class="section" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N100DA"></a>2.1. Création d'un utilisateur</h3></div></div></div><p> Comme cela est mentionné dans l'introduction, il n'est pas conseillé de faire fonctionner BIND sous le compte root. Ainsi, avant de commencer, créons un utilisateur spécifique pour BIND. Notez que vous ne devez jamais employer un utilisateur générique comme <code class="literal">nobody</code> pour cela. Ainsi, quelques distributions, comme SuSE et Mandrake Linux ont commencé à fournir un utilisateur spécifique (généralement appelé <code class="literal">named</code>) ; si vous le souhaitez, vous pouvez tout simplement adapter cet utilisateur à nos desseins. Ceci exige l'ajout d'une ligne comme celle qui suit dans <code class="filename">/etc/passwd</code> : </p><pre class="screen"> named:x:200:200:Serveur de noms:/chroot/named:/bin/false </pre><p> Et d'une ligne de ce type dans <code class="filename">/etc/group</code> : </p><pre class="screen"> named:x:200: </pre><p> Ceci crée pour BIND un utilisateur et un groupe appelés <code class="literal">named</code>. Assurez-vous que l'UID et le GID (tous deux valant 200 dans cet exemple) sont uniques sur votre système. L'interpréteur de commande est mis à <code class="literal">/bin/false</code> car cet utilisateur n'aura jamais besoin de se connecter. </p></div><div class="section" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10101"></a>2.2. Arborescence de répertoires</h3></div></div></div><p> Nous devons maintenant mettre en place l'arborescence de répertoires que nous allons utiliser pour l'environnement restreint d'exécution de BIND. Elle peut se situer n'importe où dans votre système de fichiers ; si vous êtes vraiment paranoïaque, vous pourrez même la placer dans un volume séparé. Je supposerai que vous allez employer <code class="filename">/chroot/named</code>. Commençons en créant l'arborescence de répertoires suivante : </p><pre class="screen"> /chroot +-- named +-- dev +-- etc | +-- namedb | +-- slave +-- var +-- run </pre><p> Si vous utilisez la commande GNU <span><strong class="command">mkdir</strong></span> (tel que présente sur les systèmes Linux), vous pourrez créer l'arborescence de répertoires ainsi : </p><pre class="screen"> # mkdir -p /chroot/named # cd /chroot/named # mkdir -p dev etc/namedb/slave var/run </pre></div><div class="section" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10117"></a>2.3. Mise en place des données de BIND</h3></div></div></div><p> Si vous avez déjà fait une installation conventionnelle de BIND et si vous l'utilisez, votre fichier <code class="filename">named.conf</code> et vos fichiers de zones existent déjà. Ces fichiers doivent être déplacés (ou copiés pour plus de sûreté) dans l'environnement restreint, de sorte que BIND puisse les atteindre. <code class="filename">named.conf</code> ira dans <code class="filename">/chroot/named/etc</code>, et les fichiers de zone pourront aller dans <code class="filename">/chroot/named/etc/namedb</code>. Par exemple : </p><pre class="screen"> # cp -p /etc/named.conf /chroot/named/etc/ # cp -a /var/named/* /chroot/named/etc/namedb/ </pre><p> BIND a normalement besoin d'écrire dans le répertoire <code class="filename">namedb</code>, mais pour renforcer la sécurité, nous ne l'autoriserons pas à le faire. Si votre serveur de nom est esclave pour une zone quelconque, il aura besoin de mettre à jour ces fichiers de zones, ce qui veut dire nous devrons les enregistrer dans un répertoire séparé, auquel BIND aura accès. </p><pre class="screen"> # chown -R named:named /chroot/named/etc/namedb/slave </pre><p> Gardez à l'esprit que vous devrez déplacer toutes vos zones esclaves dans ce répertoire et que vous devez mettre à jour votre <code class="filename">named.conf</code> en conséquence. </p><p> BIND aura aussi besoin d'écrire dans le répertoire <code class="filename">/var/run</code>, pour y mettre ses fichiers pid et ses fichiers de statistiques, donc permettons-lui de le faire : </p><pre class="screen"> # chown named:named /chroot/named/var/run </pre></div><div class="section" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10147"></a>2.4. Fichiers de support système</h3></div></div></div><p> Lorsque BIND s'exécute dans l'environnement restreint, il ne peut plus <span class="emphasis"><em>du tout</em></span> accéder aux fichiers situés hors de celui-ci. Cependant, il a besoin d'accéder à quelques fichiers clefs, bien que leur nombre soit bien moindre que ce dont BIND 8 avait besoin. </p><p> Un fichier dont BIND aura besoin à l'intérieur de sa prison est le bon vieux <code class="filename">/dev/null</code>. Notez que la commande exacte nécessaire pour créer ce fichier spécial peut varier de système à système ; vérifiez le script <code class="filename">/dev/MAKEDEV</code> pour vous en assurer. Quelques systèmes peuvent également exiger <code class="filename">/dev/zero</code>, que nous pourrons créer de la même façon. Il a été mentionné que les version préliminaires de BIND 9.2.0 ont maintenant également besoin de <code class="filename">/dev/random</code>. Pour la plupart des systèmes Linux, nous pourrons employer les commandes suivantes : </p><pre class="screen"> # mknod /chroot/named/dev/null c 1 3 # mknod /chroot/named/dev/random c 1 8 # chmod 666 /chroot/named/dev/{null,random} </pre><p> Pour FreeBSD 4.3, ce sera : </p><pre class="screen"> # mknod /chroot/named/dev/null c 2 2 # mknod /chroot/named/dev/random c 2 3 # chmod 666 /chroot/named/dev/{null,random} </pre><p> Vous aurez besoin de disposer d'un autre fichier dans le répertoire <code class="filename">/etc</code> de l'environnement restreint. Vous devrez copier <code class="filename">/etc/localtime</code> (nommé <code class="filename">/usr/lib/zoneinfo/localtime</code> sur certains systèmes), afin que BIND puisse enregistrer les évènements avec un horodatage correct. La commande suivante s'en chargera : </p><pre class="screen"> # cp /etc/localtime /chroot/named/etc/ </pre></div><div class="section" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="logging"></a>2.5. Journalisation des évènements</h3></div></div></div><p> BIND a beau être prisonnier de son environnement restreint, contrairement à un prisonnier ordinaire, il ne peut écrire son journal sur les murs de sa cellule <code class="literal">:-)</code> Normalement, BIND enregistre un journal des évènements grâce à <span class="application">syslogd</span>, le démon de journalisation système. Cependant, ce type de journalisation est effectué en envoyant les enregistrements d'évènements vers le connecteur (<span class="foreignphrase" lang="en"><em class="foreignphrase">socket</em></span>) spécial <code class="filename">/dev/log</code>. Puisqu'elle se trouve désormais à l'extérieur de l'environnement restreint, BIND ne peut plus l'employer. Heureusement, il existe quelques solutions pour contourner le problème. </p><div class="section" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N10191"></a>2.5.1. La solution idéale</h4></div></div></div><p> La solution idéale de ce dilemme exige une version raisonnablement récente de <span class="application">syslogd</span> qui prenne en charge le paramètre <code class="option">-a</code> introduit par OpenBSD. Reportez-vous à la page de manuel de votre <span class="citerefentry"><span class="refentrytitle">syslogd</span>(8)</span> pour vérifier si elle offre cette option. Si c'est la cas, la seule chose que vous ayez à faire est d'ajouter le paramètre « <span class="quote"><code class="literal">-a /chroot/named/dev/log</code></span> » à la ligne de commande utilisée pour lancer <span class="application">syslogd</span>. Sur les systèmes qui utilisent un init SysV complet (ce qui inclut la plupart des distributions Linux), vous pouvez faire cela en modifiant le fichier <code class="filename">/etc/rc.d/init.d/syslog</code>. Par exemple, sur mon système Linux Red Hat, j'ai changé la ligne </p><pre class="screen"> daemon syslogd -m 0 </pre><p> en </p><pre class="screen"> daemon syslogd -m 0 -a /chroot/named/dev/log </pre><p> Il est intéressant de noter qu'à partir de la Red Hat 7.2, Red Hat a apparemment rendu ce processus plus facile. Il y a maintenant un fichier appelé <code class="filename">/etc/sysconfig/syslog</code> dans lequel on peut définit des paramètres supplémentaires pour syslogd. Les systèmes OpenLinux de Caldera utilisent un démon de lancement appelé <span class="application">ssd</span>, qui lit la configuration depuis <code class="filename">/etc/sysconfig/daemons/syslog</code>. Il vous suffit de modifier la ligne d'options pour qu'elle ressemble à ceci : </p><pre class="screen"> OPTIONS_SYSLOGD="-m 0 -a /chroot/named/dev/log" </pre><p> De la même façon sur les systèmes SuSE, il m'a été indiqué que le meilleur endroit pour ajouter ce paramètre est le fichier <code class="filename">/etc/rc.config</code>. Changez la ligne </p><pre class="screen"> SYSLOGD_paraMS="" </pre><p> en </p><pre class="screen"> SYSLOGD_paraMS="-a /chroot/named/dev/log" </pre><p> devrait faire l'affaire. Enfin, le dernier mais non le moindre, pour FreeBSD 4.3, il suffit apparemment de modifier le fichier <code class="filename">rc.conf</code> et d'y ajouter : </p><pre class="screen"> syslogd_flags="-s -l /chroot/named/dev/log" </pre><p> Le <code class="option">-s</code> est là pour des raisons de sécurité, et fait partie des paramètres par défaut. Le <code class="option">-l</code> doit être suivi d'un chemin local, dans lequel on souhaite placer une autre interface de journalisation. Une fois que vous avez compris comment faire cette modification sur votre système, il vous suffira de redémarrer <span class="application">syslogd</span>, que cela soit en le tuant (avec un <span><strong class="command">kill</strong></span>) et en le relançant (avec les paramètres supplémentaires) ou en employant le script d'init SysV qui le fera pour vous : </p><pre class="screen"> # /etc/rc.d/init.d/syslog stop # /etc/rc.d/init.d/syslog start </pre><p> Une fois redémarré, vous devriez voir dans <code class="filename">/chroot/named/dev</code> une entrée appelée <code class="filename">log</code> qui ressemble à ceci : </p><pre class="screen"> srw-rw-rw- 1 root root 0 Mar 13 20:58 log </pre></div><div class="section" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N10200"></a>2.5.2. L'autre solution</h4></div></div></div><p> Si vous avez un ancien <span class="application">syslogd</span>, vous devrez trouver une autre façon d'écrire dans le journal des évènements. Il existe quelques programmes pour cela, comme <span class="application">holelogd</span>, qui est conçu pour agir comme un serveur mandataire en acceptant les entrées d'évènements du BIND en environnement restreint pour les passer au véritable connecteur <code class="filename">/dev/log</code>. Vous pouvez aussi tout simplement configurer BIND pour journaliser les évènements dans un fichier au lieu de les passer à syslog. Reportez-vous à la documentation de BIND pour plus d'informations si vous choisissez d'utiliser cette méthode. </p></div></div><div class="section" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="perm"></a>2.6. Resserrer les permissions</h3></div></div></div><p> Tout d'abord, n'hésitez à restreindre à l'utilisateur <code class="literal">root</code> l'accès à la totalité du répertoire <code class="filename">/chroot</code>. Bien sur, tout le monde ne voudra pas faire cela, particulièrement si cela indisposait d'autres logiciels installés dans la même arborescence. </p><pre class="screen"> # chown root /chroot # chmod 700 /chroot </pre><p> Vous pouvez aussi sans danger restreindre l'accès de <code class="filename">/chroot/named</code> à l'utilisateur <code class="literal">named</code>. </p><pre class="screen"> # chown named:named /chroot/named # chmod 700 /chroot/named </pre><p> Pour renforcer un peu plus la sécurité, sur les systèmes Linux utilisant le système de fichier ext2, nous pouvons rendre certains fichiers et répertoires immuables, en utilisant l'utilitaire <code class="literal">chattr</code>. </p><pre class="screen"> # cd /chroot/named # chattr +i etc etc/localtime var </pre><p> De même, sur FreeBSD 4.3, <span><strong class="command">chflags</strong></span> est l'outil à examiner pour rendre certains fichiers immuables. À titre d'exemple, ce qui suit devrait rendre immuable le contenu du répertoire <code class="filename">/chroot/named/etc</code> : </p><pre class="screen"> # chflags schg /chroot/named/etc/*(*). </pre><p> Il serait pratique de pouvoir faire la même chose sur le répertoire <code class="filename">dev</code>, mais malheureusement cela empêcherait <span class="application">syslogd</span> de créer son connecteur <code class="filename">dev/log</code>. Vous pourrez aussi choisir de positionner le bit immuable sur d'autres fichiers de votre prison, comme par exemple vos fichiers de zone primaire, à condition qu'ils ne soient pas supposés changer. </p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s01.html">Précédent</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ar01s03.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">1. Introduction </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> 3. Compiler et installer votre beau BIND tout neuf</td></tr></table></div></body></html>