diff --git a/fr_FR.ISO8859-1/books/handbook/network-servers/Makefile b/fr_FR.ISO8859-1/books/handbook/network-servers/Makefile new file mode 100644 index 0000000000..150dbe3121 --- /dev/null +++ b/fr_FR.ISO8859-1/books/handbook/network-servers/Makefile @@ -0,0 +1,15 @@ +# +# Build the Handbook with just the content from this chapter. +# +# $FreeBSD$ +# + +CHAPTERS= network-servers/chapter.sgml + +VPATH= .. + +MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX} + +DOC_PREFIX?= ${.CURDIR}/../../../.. + +.include "../Makefile" diff --git a/fr_FR.ISO8859-1/books/handbook/network-servers/chapter.sgml b/fr_FR.ISO8859-1/books/handbook/network-servers/chapter.sgml new file mode 100644 index 0000000000..afddeb80f7 --- /dev/null +++ b/fr_FR.ISO8859-1/books/handbook/network-servers/chapter.sgml @@ -0,0 +1,4881 @@ +<!-- + The FreeBSD Documentation Project + The FreeBSD French Documentation Project + + $FreeBSD$ + Original revision: 1.5 +--> + +<chapter id="network-servers"> + <chapterinfo> + <authorgroup> + <author> + <firstname>Murray</firstname> + <surname>Stokely</surname> + <contrib>Réorganisé par </contrib> + </author> + </authorgroup> + <!-- 23 Juillet 2004 --> + </chapterinfo> + + <title>Serveurs réseau</title> + &trans.a.fonvieille; + + <sect1 id="network-servers-synopsis"> + <title>Synopsis</title> + + <para>Ce chapitre abordera certains des services réseaux + les plus fréquemment utilisés sur les + systèmes &unix;. Nous verrons comment installer, + configurer, tester et maintenir plusieurs types + différents de services réseaux. De plus, des + exemples de fichier de configuration ont été + inclus tout au long de ce chapitre pour que vous puissiez en + bénéficier.</para> + + <para>Après la lecture de ce chapitre, vous + connaîtrez:</para> + + <itemizedlist> + <listitem> + <para>Comment gérer le “daemon” + <application>inetd</application>.</para> + </listitem> + + <listitem> + <para>Comment configurer un système de fichiers + réseau.</para> + </listitem> + + <listitem> + <para>Comment mettre en place un serveur d'information sur le + réseau pour partager les comptes utilisateurs.</para> + </listitem> + + <listitem> + <para>Comment configurer le paramétrage réseau + automatique en utilisant DHCP.</para> + </listitem> + + <listitem> + <para>Comment configurer un serveur de noms de domaine.</para> + </listitem> + + <listitem> + <para>Comment configurer le serveur HTTP + <application>Apache</application>.</para> + </listitem> + + <listitem> + <para>Comment configurer un serveur de transfert de fichier + (FTP).</para> + </listitem> + + <listitem> + <para>Comment configurer un serveur de fichiers et + d'impression pour des clients &windows; en utilisant + <application>Samba</application>.</para> + </listitem> + + <listitem> + <para>Comment synchroniser l'heure et la date, et mettre en + place en serveur de temps, avec le protocole NTP.</para> + </listitem> + </itemizedlist> + + <para>Avant de lire ce chapitre, vous devrez:</para> + + <itemizedlist> + <listitem> + <para>Comprendre les bases des procédures + <filename>/etc/rc</filename>.</para> + </listitem> + + <listitem> + <para>Etre familier avec la terminologie réseau de + base.</para> + </listitem> + + <listitem> + <para>Savoir comment installer des applications tierce-partie + (<xref linkend="ports">).</para> + </listitem> + </itemizedlist> + </sect1> + + <sect1 id="network-inetd"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Contribution de </contrib> + </author> + </authorgroup> + </sect1info> + + <title>Le “super-serveur” + <application>inetd</application></title> + + <sect2 id="network-inetd-overview"> + <title>Généralités</title> + + <para>On fait souvent référence à + &man.inetd.8; comme étant le “super-serveur + Internet” parce qu'il gére les connexions pour + plusieurs “daemons”. Les programmes assurant des + services réseau sont généralement connus + sous le nom de “daemon”. + <application>inetd</application> joue le rôle de serveur + de régulateur pour les autres “daemon”s. + Quand une connexion est reçue par + <application>inetd</application>, ce dernier détermine + à quel “daemon” la connexion est + destinée, invoque le “daemon” en question + et lui délègue la “socket”. + Exécuter une instance + d'<application>inetd</application> réduit la charge + système globale par rapport à l'exécution + de chaque “daemon” individuellement en mode + autonome.</para> + + <para><application>inetd</application> est utilisé pour + invoquer d'autres “daemon”s, mais plusieurs + protocoles triviaux sont gérés directement, + comme <application>chargen</application>, + <application>auth</application>, et + <application>daytime</application>.</para> + + <para>Cette section abordera la configuration de base + d'<application>inetd</application> à travers ses + options en ligne de commande et son fichier de configuration + <filename>/etc/inetd.conf</filename>.</para> + </sect2> + + <sect2 id="network-inetd-settings"> + <title>Configuration</title> + + <para><application>inetd</application> est initialisé par + l'intermédiaire du système + <filename>/etc/rc.conf</filename>. L'option + <literal>inetd_enable</literal> est positionnée + à la valeur <literal>NO</literal> par défaut, + mais est activée par + <application>sysinstall</application> avec le profil de + sécurité modéré. Placer + <programlisting>inetd_enable="YES"</programlisting> ou + <programlisting>inetd_enable="NO"</programlisting> dans + <filename>/etc/rc.conf</filename> peut activer ou + désactiver le démarrage + d'<application>inetd</application> à la mise en route + du système.</para> + + <para>De plus, différentes options de ligne de commande + peuvent être passées à + <application>inetd</application> par l'intermédiaire de + l'option <literal>inetd_flags</literal>.</para> + </sect2> + + <sect2 id="network-inetd-cmdline"> + <title>Options en ligne de commande</title> + + <para>Synopsis d'<application>inetd</application>:</para> + + <para><option> inetd [-d] [-l] [-w] [-W] [-c maximum] [-C taux] [-a adresse | nom de machine] + [-p fichier] [-R taux] [fichier de configuration]</option></para> + + <variablelist> + <varlistentry> + <term>-d</term> + + <listitem> + <para>Active le débogage.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-l</term> + + <listitem> + <para>Active le journal des connexions + réussies.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-w</term> + + <listitem> + <para>Active le “TCP Wrapping” pour les + services externes (actif par défaut).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-W</term> + + <listitem> + <para>Active le “TCP Wrapping” pour les + services internes qui font partie + d'<application>inetd</application> (actif par + défaut).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-c maximum</term> + + <listitem> + <para>Spécifie le nombre maximal par défaut + d'invocations simultanées pour chaque service; il + n'y a pas de limite par défaut. Cette option peut + être surchargée pour chaque service à + l'aide du paramètre + <option>nb-max-enfants</option>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-C taux</term> + + <listitem> + <para>Précise le nombre maximal de fois qu'un + service peut être invoqué à partir + d'une unique adresse IP et cela sur une minute. Ce + paramètre peut être configuré + différemment pour chaque service avec le + paramètre + <option>nb-max-connexions-par-ip-par-minute</option>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-R taux</term> + + <listitem> + <para>Précise le nombre maximal de fois qu'un + service peut être invoqué par minute; la + valeur par défaut est 256. Un taux de 0 autorise + un nombre illimité d'invocations.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-a</term> + + <listitem> + <para>Indique l'adresse IP sur laquelle le trafic sera + attendu. Alternativement, un nom de machine peut + être utilisé, dans ce cas l'adresse IPv4 ou + IPv6 correspondant à la machine sera + utilisée. Généralement, un nom de + machine est précisé quand + <application>inetd</application> est exécuté + à l'intérieur d'un environnement + &man.jail.8;, dans quel cas le nom de machine correspond + à l'environnement &man.jail.8;.</para> + + <para>Quand un nom de machine est utilisé et que + l'on doit être à l'écoute sur une + adresse IPv4 et IPv6, une entrée avec le + protocole adapté pour chaque type d'adresse est + nécessaire pour chaque service dans + <filename>/etc/inetd.conf</filename>. Par exemple, un + service de type TCP nécessitera deux + entrées, une utilisant <literal>tcp4</literal> + pour le protocole et une autre utilisant + <literal>tcp6</literal>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-p</term> + + <listitem> + <para>Spécifie un fichier différent dans + lequel stocker l'indentifiant du processus.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Ces options peuvent être passées à + <application>inetd</application> en utilisant l'option + <literal>inetd_flags</literal> de + <filename>/etc/rc.conf</filename>. Par défaut, + <literal>inetd_flags</literal> est positionné à + <literal>-wW</literal>, ce qui active le “TCP + wrapping” pour les services internes et externes + d'<application>inetd</application>. Pour un utilisateur de + base ces paramètres ne doivent + généralement pas être modifiés ou + même ajoutés au fichier + <filename>/etc/rc.conf</filename>.</para> + + <note> + <para>Un service externe est un “daemon” + indépendant d'<application>inetd</application>, qui est + invoqué quand une connexion lui étant + destinée est reçue. D'autre part, un service + interne est un service qu'<application>inetd</application> + peut offrir directement.</para> + </note> + + </sect2> + + <sect2 id="network-inetd-conf"> + <title><filename>inetd.conf</filename></title> + + <para>La configuration d'<application>inetd</application> se + fait par l'intermédiaire du fichier + <filename>/etc/inetd.conf</filename>.</para> + + <para>Quand le fichier <filename>/etc/inetd.conf</filename> est + modifié, <application>inetd</application> peut + être forcé de relire son fichier de configuration + en envoyant un signal “HangUP” au processus + <application>inetd</application> comme suit:</para> + + <example id="network-inetd-hangup"> + <title>Envoyer un signal “HangUP” à + <application>inetd</application></title> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen> + </example> + + <para>Chaque ligne du fichier de configuration ne mentionne + qu'un seul “daemon”. Les commentaires dans le + fichier sont précédés par un + “#”. Le format du fichier + <filename>/etc/inetd.conf</filename> est le suivant:</para> + + <programlisting>nom-du-service +type-de-socket +protocole +{wait|nowait}[/nb-max-enfants[/nb-connexions-max-par-minute]] +utilisateur[:groupe][/classe-session] +programme-serveur +arguments-du-programme-serveur</programlisting> + + <para>Un exemple d'entrée pour le “daemon” + <application>ftpd</application> utilisant l'IPv4:</para> + + <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting> + + <variablelist> + <varlistentry> + <term>nom-du-service</term> + + <listitem> + <para>C'est le nom de service du “daemon” en + question. Il doit correspondre à un des services + listés dans le fichier + <filename>/etc/services</filename>. Cela détermine + quel port <application>inetd</application> doit + écouter. Si un nouveau service est + créé, il doit être ajouté en + premier lieu dans + <filename>/etc/services</filename>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>type-de-socket</term> + + <listitem> + <para>Soit <literal>stream</literal>, soit + <literal>dgram</literal>, soit <literal>raw</literal>, ou + <literal>seqpacket</literal>. <literal>stream</literal> + doit être utilisé pour les + “daemon”s TCP, alors que + <literal>dgram</literal> est utilisé pour les + “daemon”s utilisant le protocole UDP.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>protocole</term> + + <listitem> + <para>Un des suivants:</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Protocole</entry> + <entry>Explication</entry> + </row> + </thead> + <tbody> + <row> + <entry>tcp, tcp4</entry> + <entry>TCP IPv4</entry> + </row> + <row> + <entry>udp, udp4</entry> + <entry>UDP IPv4</entry> + </row> + <row> + <entry>tcp6</entry> + <entry>TCP IPv6</entry> + </row> + <row> + <entry>udp6</entry> + <entry>UDP IPv6</entry> + </row> + <row> + <entry>tcp46</entry> + <entry>TCP IPv4 et v6</entry> + </row> + <row> + <entry>udp46</entry> + <entry>UDP IPv4 et v6</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </listitem> + </varlistentry> + + <varlistentry> + <term>{wait|nowait}[/nb-max-enfants[/nb-max-connexions-par-ip-par-minute]]</term> + + <listitem> + <para><option>wait|nowait</option> indique si le + “daemon” invoqué par + <application>inetd</application> est capable ou non de + gérer sa propre “socket”. Les + “socket”s de type <option>dgram</option> + doivent utiliser l'option <option>wait</option>, alors + que les “daemons à socket stream”, + qui sont généralement + multi-threadés, devraient utiliser + <option>nowait</option>. L'option <option>wait</option> + a généralement pour conséquence de + fournir plusieurs “socket”s à un + “daemon”, tandis que l'option + <option>nowait</option> invoquera un + “daemon” enfant pour chaque nouvelle + “socket”.</para> + + <para>Le nombre maximal de “daemon”s + qu'<application>inetd</application> peut invoquer peut + être fixé en utilisant l'option + <option>nb-max-enfants</option>. Si une limite de dix + instances pour un “daemon” est + nécessaire, <literal>/10</literal> devra + être placé après + <option>nowait</option>.</para> + + <para>En plus de <option>nb-max-enfants</option>, une + autre option limitant le nombre maximal de connexions + à partir d'un emplacement vers un + “daemon” particulier peut être + activée. L'option + <option>nb-max-connexions-par-ip-par-minute</option> est + l'option en question. Ici, une valeur de dix limiterait + à dix le nombre de tentatives de connexions par + minute pour une adresse IP particulière. C'est + utile pour empêcher l'abus intentionnel ou par + inadvertance des ressources et les attaques par + déni de service (“Denial of + Service—DOS”).</para> + + <para>Dans ce champ, <option>wait</option> ou + <option>nowait</option> est obligatoire. + <option>nb-max-enfants</option> et + <option>nb-max-connexions-par-ip-par-minute</option> + sont optionnelles.</para> + + <para>Un “daemon” utilisant un flux de type + multi-threadé sans limites + <option>nb-max-enfants</option> ou + <option>nb-max-connexions-par-ip-par-minute</option> + sera tout simplement affecté de l'option + <literal>nowait</literal>.</para> + + <para>Le même “daemon” avec une limite + maximale de dix “daemon” serait: + <literal>nowait/10</literal>.</para> + + <para>De plus, la même configuration avec une limite + de vingt connexions par adresse IP par minute et une + limite maximale de dix “daemon”s enfant + serait: <literal>nowait/10/20</literal>.</para> + + <para>Ces options sont utilisées comme valeurs par + défaut par le “daemon” + <application>fingerd</application>, comme le montre ce + qui suit:</para> + + <programlisting>finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s</programlisting> + </listitem> + </varlistentry> + + <varlistentry> + <term>utilisateur</term> + + <listitem> + <para>C'est l'utilisateur sous lequel le + “daemon” en question est + exécuté. En général les + “daemon”s tournent sous l'utilisateur + <username>root</username>. Pour des questions de + sécurité, il est courant de rencontrer des + serveurs tournant sous l'utilisateur + <username>daemon</username>, ou sous l'utilisateur avec + le moins de privilèges: + <username>nobody</username>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>programme-serveur</term> + + <listitem> + <para>Le chemin complet du “daemon” qui doit + être exécuté quand une requête + est reçue. Si le “daemon” est un + service fourni en interne par + <application>inetd</application>, alors l'option + <option>internal</option> devrait être + utilisée.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>arguments-programme-serveur</term> + + <listitem> + <para>Cette option va de pair avec + <option>programme-serveur</option> en précisant + les arguments, en commençant avec + <literal>argv[0]</literal>, passés au + “daemon” lors de son invocation. Si + <command>mydaemon -d</command> est la ligne de commande, + <literal>mydaemon -d</literal> sera la valeur de + l'option <option>arguments-programme-serveur</option>. + Ici également, si le “daemon” est un + service interne, utilisez + <option>internal</option>.</para> + </listitem> + </varlistentry> + </variablelist> + </sect2> + + <sect2 id="network-inetd-security"> + <title>Sécurité</title> + + <para>En fonction du profil de sécurité choisi + à l'installation, plusieurs “daemon”s + peuvent être activés par défaut. S'il n'y + a pas de raison particulière à l'utilisation + d'un “daemon”, désactivez-le! Ajoutez un + caractère “#” devant le + “daemon” en question dans le fichier + <filename>/etc/inetd.conf</filename>, et envoyez ensuite un + <link linkend="network-inetd-hangup">signal hangup à + inetd</link>. Certains “daemon”s comme + <application>fingerd</application>, devraient être + évités parce qu'ils donnent trop d'informations + aux personnes malveillantes.</para> + + <para>Certains “daemon”s n'ont aucune conscience des + problèmes de sécurité, ou n'ont pas de + délai limite d'expiration pour les tentatives de + connexions. Cela permet à une personne malveillante + d'envoyer régulièrement et de manière + espacée des demandes de connexions à un + “daemon” particulier, avec pour conséquence + de saturer les ressources disponibles. Cela peut être + une bonne idée de placer des limitations + <option>nb-max-connexions-par-ip-par-minute</option> et + <option>nb-max-enfants</option> sur certains + “daemon”s.</para> + + <para>Par défaut, le “TCP wrapping” est + activé. Consultez la page de manuel + &man.hosts.access.5; pour plus d'information sur le placement + de restrictions TCP pour divers “daemon”s + invoqués par <application>inetd</application>.</para> + </sect2> + + <sect2 id="network-inetd-misc"> + <title>Divers</title> + + <para><application>daytime</application>, + <application>time</application>, + <application>echo</application>, + <application>discard</application>, + <application>chargen</application>, et + <application>auth</application> sont des services fournis en + interne par <application>inetd</application>.</para> + + <para>Le service <application>auth</application> fournit les + services réseau d'identification + (<application>ident</application>, + <application>identd</application>), et est configurable + à un certain degré.</para> + + <para>Consultez la page de manuel de &man.inetd.8; pour plus + d'informations.</para> + </sect2> + </sect1> + + <sect1 id="network-nfs"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>Réorganisé et augmenté par </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>Ecrit par </contrib> + </author> + </authorgroup> + </sect1info> + <title>NFS</title> + + <indexterm><primary>NFS</primary></indexterm> + <para>Parmi les différents systèmes de fichiers que + &os; supporte se trouve le système de fichiers + réseaux, connu sous le nom de <acronym>NFS</acronym>. + <acronym>NFS</acronym> permet à un système de + partager des répertoires et des fichiers avec d'autres + systèmes par l'intermédiaire d'un réseau. En + utilisant <acronym>NFS</acronym>, les utilisateurs et les + programmes peuvent accéder aux fichiers sur des + systèmes distants comme s'ils étaient des fichiers + locaux.</para> + + <para>Certains des avantages les plus remarquables offerts par + <acronym>NFS</acronym> sont:</para> + + <itemizedlist> + <listitem> + <para>Les stations de travail utilisent moins d'espace disque + en local parce que les données utilisées en + commun peuvent être stockées sur une seule + machine tout en restant accessibles aux autres machines sur le + réseau.</para> + </listitem> + + <listitem> + <para>Les utilisateurs n'ont pas besoin d'avoir un + répertoire personnel sur chaque machine du + réseau. Les répertoires personnels pourront se + trouver sur le serveur <acronym>NFS</acronym> et seront + disponibles par l'intermédiaire du + réseau.</para> + </listitem> + + <listitem> + <para>Les périphériques de stockage comme les + lecteurs de disquettes, de CDROM, de disquettes ZIP peuvent + être utilisés par d'autres machines sur le + réseau. Cela pourra réduire le nombre de + lecteurs de medias amovibles sur le réseau.</para> + </listitem> + </itemizedlist> + + <sect2> + <title>Comment <acronym>NFS</acronym> fonctionne</title> + + <para><acronym>NFS</acronym> consiste en deux + éléments principaux: un serveur et un ou + plusieurs clients. Le client accède à distance + aux données stockées sur la machine serveur. + Afin que tout cela fonctionne correctement quelques processus + doivent être configurés et en + fonctionnement.</para> + + <note><para>Avec &os; 5.X, l'utilitaire + <application>portmap</application> a été + remplacé par <application>rpcbind</application>. Aussi + sous &os; 5.X l'utilisateur doit remplacer chaque + instance de <application>portmap</application> avec + <application>rpcbind</application> dans les exemples qui + suivent.</para></note> + + <para>Sur le serveur, les “daemons” suivants + doivent tourner:</para> + <indexterm> + <primary>NFS</primary> + <secondary>serveur</secondary> + </indexterm> + <indexterm> + <primary><application>portmap</application></primary> + </indexterm> + <indexterm> + <primary><application>mountd</application></primary> + </indexterm> + <indexterm> + <primary><application>nfsd</application></primary> + </indexterm> + + <informaltable frame="none"> + <tgroup cols="2"> + <colspec colwidth="1*"> + <colspec colwidth="3*"> + + <thead> + <row> + <entry>Daemon</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><application>nfsd</application></entry> + <entry>Le “daemon” <acronym>NFS</acronym> + qui répond aux requêtes des clients + <acronym>NFS</acronym>.</entry> + </row> + <row> + <entry><application>mountd</application></entry> + <entry>Le “daemon” de montage + <acronym>NFS</acronym> qui traite les requêtes que + lui passe &man.nfsd.8;.</entry> + </row> + <row> + <entry><application>portmap</application></entry> + <entry>Le “daemon portmapper” permet aux + clients <acronym>NFS</acronym> de trouver le port que + le serveur <acronym>NFS</acronym> utilise.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Le client peut également faire tourner un + “daemon” connu sous le nom de + <application>nfsiod</application>. Le “daemon” + <application>nfsiod</application> traite les requêtes en + provenance du serveur <acronym>NFS</acronym>. Ceci est + optionnel, et améliore les performances, mais n'est pas + indispensable pour une utilisation normale et correcte. + Consultez la page de manuel &man.nfsiod.8; pour plus + d'informations.</para> + </sect2> + + <sect2 id="network-configuring-nfs"> + <title>Configurer <acronym>NFS</acronym></title> + <indexterm> + <primary>NFS</primary> + <secondary>configuration</secondary> + </indexterm> + + <para>La configuration de <acronym>NFS</acronym> est une + opération relativement directe. Les processus qui + doivent tourner peuvent tous être lancés au + démarrage en modifiant légèrement votre + fichier <filename>/etc/rc.conf</filename>.</para> + + <para>Sur le serveur <acronym>NFS</acronym>, assurez-vous que + les options suivantes sont configurées dans le fichier + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>portmap_enable="YES" +nfs_server_enable="YES" +mountd_flags="-r"</programlisting> + + <para><application>mountd</application> est automatiquement + exécuté dès que le serveur + <acronym>NFS</acronym> est activé.</para> + + <para>Sur le client, assurez-vous que cette option est + présente dans le fichier + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>nfs_client_enable="YES"</programlisting> + + <para>Le fichier <filename>/etc/exports</filename> indique quels + systèmes de fichiers <acronym>NFS</acronym> devraient + être exportés (parfois on utilise le terme de + “partagés”). Chaque ligne dans + <filename>/etc/exports</filename> précise un + système de fichiers à exporter et quelles + machines auront accès à ce système de + fichiers. En plus des machines qui auront accès, des + options d'accès peuvent également être + présentes. Ces options sont nombreuses mais seules + quelques unes seront abordées ici. Vous pouvez + aisément découvrir d'autres options en lisant la + page de manuel &man.exports.5;.</para> + + <para>Voici quelques exemples d'entrées du fichier + <filename>/etc/exports</filename>:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>exemples d'exportation</secondary> + </indexterm> + + <para>Les exemples suivants donnent une idée de comment + exporter des systèmes de fichiers bien que certains + paramètres peuvent être différents en + fonction de votre environnement et votre configuration + réseau. Par exemple, pour exporter le + répertoire <filename role="directory">/cdrom</filename> + pour les trois machines d'exemple qui appartiennent au + même domaine que le serveur (d'où l'absence du + nom de domaine pour chacune d'entre elles) ou qui ont une + entrée dans votre fichier + <filename>/etc/hosts</filename>. Le paramètre + <option>-ro</option> limite l'accès en lecture seule au + système de fichiers exporté. Avec ce + paramètre, le système distant ne pourra pas + écrire sur le système de fichiers + exporté.</para> + + <programlisting>/cdrom -ro host1 host2 host3</programlisting> + + <para>La ligne suivante exporte <filename + role="directory">/home</filename> pour les trois machines en + utilisant les adresses IP. C'est une configuration utile si + vous disposez d'un réseau privé sans serveur + <acronym>DNS</acronym> configuré. Le fichier + <filename>/etc/hosts</filename> pourrait éventuellement + être configuré pour les noms de machines + internes, consultez la page de manuel &man.hosts.5; pour plus + d'information. Le paramètre <option>-alldirs</option> + autorise l'utilisation des sous-répertoires en tant que + point de montage. En d'autres termes, il ne montera pas les + sous-répertoires mais autorisera le client à ne + monter que les répertoires qui sont nécessaires + ou désirés.</para> + + <programlisting>/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4</programlisting> + + <para>La ligne suivante exporte <filename + role="directory">/a</filename> pour que deux clients d'un + domaine différent puissent y accéder. Le + paramètre <option>-maproot=root</option> autorise + l'utilisateur <username>root</username> du système + distant à écrire des données sur le + système de fichiers exporté en tant que + <username>root</username>. Si le paramètre + <literal>-maproot=root</literal> n'est pas + précisé, même si un utilisateur dispose + d'un accès <username>root</username> sur le + système distant, il ne pourra pas modifier de fichiers + sur le système de fichiers exporté.</para> + + <programlisting>/a -maproot=root host.example.com box.example.org</programlisting> + + <para>Afin de pouvoir accéder à un système + de fichiers exporté, le client doit avoir les + permissions de le faire. Assurez-vous que le client est + mentionné dans votre fichier + <filename>/etc/exports</filename>.</para> + + <para>Dans <filename>/etc/exports</filename>, chaque ligne + représente l'information d'exportation d'un + système de fichiers vers une machine. Une machine + distante ne peut être spécifiée qu'une + fois par système de fichiers, et ne devrait avoir + qu'une seule entrée par défaut. Par exemple, + supposons que <filename role="directory">/usr</filename> soit + un seul système de fichiers. Le fichier + <filename>/etc/exports</filename> suivant serait + invalide:</para> + + <programlisting>/usr/src client +/usr/ports client</programlisting> + + <para>Un système de fichiers, + <filename role="directory">/usr</filename>, a deux lignes + précisant des exportations vers la même machine, + <hostid>client</hostid>. Le format correct pour une telle + situation est:</para> + + <programlisting>/usr/src /usr/ports client</programlisting> + + <para>Les propriétes d'un système de fichiers + exporté vers une machine donnée devraient + apparaître sur une ligne. Les lignes sans client sont + traitées comme destinée à une seule + machine. Cela limite la manière dont vous pouvez + exporter les systèmes de fichiers, mais pour la plupart + des gens cela n'est pas un problème.</para> + + <para>Ce qui suit est un exemple de liste d'exportation valide, + où les répertoires <filename + role="directory">/usr</filename> et <filename + role="directory">/exports</filename> sont des systèmes + de fichiers locaux:</para> + + <programlisting># Exporte src et ports vers client01 et client02, mais seul +# client01 dispose des privilèges root dessus +/usr/src /usr/ports -maproot=root client01 +/usr/src /usr/ports client02 +# Les machines clientes ont les privilèges root et peuvent monter tout +# de /exports. N'importe qui peut monter en lecture seule +# /exports/obj +/exports -alldirs -maproot=root client01 client02 +/exports/obj -ro</programlisting> + + <para>Vous devez relancer <application>mountd</application> + à chaque fois que vous modifiez + <filename>/etc/exports</filename> pour que les changements + puissent prendre effet. Cela peut être effectué + en envoyant le signal HUP au processus + <application>mountd</application>:</para> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen> + + <para>De plus, un redémarrage permettra à &os; de + tout configurer proprement. Un redémarrage n'est + cependant pas nécéssaire. Exécuter les + commandes suivantes en tant que <username>root</username> + devrait mettre en place ce qui est nécessaire.</para> + + <para>Sur le serveur <acronym>NFS</acronym>:</para> + + <screen>&prompt.root; <userinput>portmap</userinput> +&prompt.root; <userinput>nfsd -u -t -n 4</userinput> +&prompt.root; <userinput>mountd -r</userinput></screen> + + <para>Sur le client <acronym>NFS</acronym>:</para> + + <screen>&prompt.root; <userinput>nfsiod -n 4</userinput></screen> + + <para>Maintenant il devrait être possible de monter un + système de fichiers distant. Dans nos exemples le nom + du serveur sera <hostid>serveur</hostid> et le nom du client + <hostid>client</hostid>. Si vous voulez monter temporairement + un système de fichiers distant ou vous voulez + simplement tester la configuration, exécutez juste une + commande comme celle-ci en tant que <username>root</username> + sur le client:</para> + <indexterm> + <primary>NFS</primary> + <secondary>montage</secondary> + </indexterm> + + <screen>&prompt.root; <userinput>mount serveur:/home /mnt</userinput></screen> + + <para>Cela montera le répertoire <filename + role="directory">/home</filename> situé sur le serveur + au point <filename role="directory">/mnt</filename> sur le + client. Si tout est correctement configuré vous + devriez être en mesure d'entrer dans le + répertoire <filename role="directory">/mnt</filename> + sur le client et de voir tous les fichiers qui sont sur le + serveur.</para> + + <para>Si vous désirez monter automatiquement un + système de fichiers distant à chaque + démarrage de l'ordinateur, ajoutez le système de + fichiers au fichier <filename>/etc/fstab</filename>. Voici un + exemple:</para> + + <programlisting>server:/home /mnt nfs rw 0 0</programlisting> + + <para>La page de manuel &man.fstab.5; liste toutes les options + disponibles.</para> + </sect2> + + <sect2> + <title>Exemples pratiques d'utilisation</title> + + <para>Il existe de nombreuses applications pratiques de + <acronym>NFS</acronym>. Les plus communes sont + présentés ci-dessous:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>utilisations</secondary> + </indexterm> + <itemizedlist> + <listitem> + <para>Configurer plusieurs machines pour partager un CDROM + ou un autre médium. C'est moins cher et souvent une + méthode plus pratique pour installer des logiciels + sur de multiples machines.</para> + </listitem> + + <listitem> + <para>Sur les réseaux importants, il peut être + plus pratique de configurer un serveur + <acronym>NFS</acronym> central sur lequel tous les + répertoires utilisateurs sont stockés. Ces + répertoires utilisateurs peuvent alors être + exportés vers le réseau, les utilisateurs + devraient alors toujours avoir le même + répertoire utilisateur indépendamment de la + station de travail sur laquelle ils ouvrent une + session.</para> + </listitem> + + <listitem> + <para>Plusieurs machines pourront avoir un répertoire + <filename role="directory">/usr/ports/distfiles</filename> + commun. De cette manière, quand vous avez besoin + d'installer un logiciel porté sur plusieurs machines, + vous pouvez accéder rapidement aux sources sans les + télécharger sur chaque machine.</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2 id="network-amd"> + <sect2info> + <authorgroup> + <author> + <firstname>Wylie</firstname> + <surname>Stilwell</surname> + <contrib>Contribution de </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Réécrit par </contrib> + </author> + </authorgroup> + </sect2info> + <title>Montages automatiques avec + <application>amd</application></title> + + <indexterm><primary>amd</primary></indexterm> + <indexterm><primary>daemon de montage + automatique</primary></indexterm> + + <para>&man.amd.8; (“automatic mounter + daemon”—“daemon” de montage + automatique) monte automatiquement un système de + fichiers distant dès que l'on accède à un + fichier ou un répertoire contenu par ce système + de fichiers. Les systèmes de fichiers qui sont + inactifs pendant une certaine période seront + automatiquement démontés par + <application>amd</application>. L'utilisation + d'<application>amd</application> offre une alternative simple + aux montages permanents qui sont généralement + listés dans <filename>/etc/fstab</filename>.</para> + + <para><application>amd</application> opère en s'attachant + comme un serveur NFS aux répertoires <filename + role="directory">/host</filename> et <filename + role="directory">/net</filename>. Quand on accède + à un fichier à l'intérieur de ces + répertoires, <application>amd</application> recherche + le montage distant correspondant et le monte automatiquement. + <filename role="directory">/net</filename> est utilisé + pour monter un système de fichiers exporté + à partir d'une adresse IP, alors que <filename + role="directory">/host</filename> est utilisé pour + monter un système de fichiers exporté à + partir d'un nom de machine distant.</para> + + <para>Un accès à un fichier dans <filename + role="directory">/host/foobar/usr</filename> demandera + à <application>amd</application> de tenter de monter + l'export <filename role="directory">/usr</filename> sur la + machine <hostid>foobar</hostid>.</para> + + <example> + <title>Monter un systèmes de fichiers exporté + avec <application>amd</application></title> + + <para>Vous pouvez voir les systèmes de fichiers + exportés par une machine distante avec la commande + <command>showmount</command>. Par exemple, pour voir les + répertoires exportés par une machine + appelée <hostid>foobar</hostid>, vous pouvez + utiliser:</para> + + <screen>&prompt.user; <userinput>showmount -e foobar</userinput> +Exports list on foobar: +/usr 10.10.10.0 +/a 10.10.10.0 +&prompt.user; <userinput>cd /host/foobar/usr</userinput></screen> + </example> + + <para>Comme on le voit dans l'exemple, + <command>showmount</command> liste <filename + role="directory">/usr</filename> comme une exportation. Quand + on change de répertoire pour + <filename>/host/foobar/usr</filename>, + <application>amd</application> tente de résoudre le nom + de machine <hostid>foobar</hostid> et de monter + automatiquement le système exporté + désiré.</para> + + <para><application>amd</application> peut être + lancé par les procédures de démarrage en + ajoutant les lignes suivantes dans le fichier + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>amd_enable="YES"</programlisting> + + <para>De plus, des paramètres peuvent être + passés à <application>amd</application> à + l'aide de l'option <literal>amd_flags</literal>. Par + défaut, l'option <varname>amd_flags</varname> est + possitionnée à:</para> + + <programlisting>amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"</programlisting> + + <para>Le fichier <filename>/etc/amd.map</filename> + définit les options par défaut avec lesquelles + les systèmes exportés sont montés. Le + fichier <filename>/etc/amd.map</filename> définit + certaines des fonctionnalités les plus avancées + de <application>amd</application>.</para> + + <para>Consultez les pages de manuel de &man.amd.8; et + &man.amd.conf.5; pour plus d'informations.</para> + </sect2> + + <sect2 id="network-nfs-integration"> + <sect2info> + <authorgroup> + <author> + <firstname>John</firstname> + <surname>Lind</surname> + <contrib>Contribution de </contrib> + </author> + </authorgroup> + </sect2info> + <title>Problèmes d'intégration avec d'autres + systèmes</title> + + <para>Certaines cartes Ethernet ISA présentent des + limitations qui peuvent poser de sérieux + problèmes sur un réseau, en particulier avec + NFS. Ce n'est pas une particularité de &os;, mais &os; + en est également affecté.</para> + + <para>Ce problème se produit pratiquement à chaque + fois que des systèmes (&os;) PC sont sur le même + réseau que des stations de travail très + performantes, comme celles de Silicon Graphics, Inc. et Sun + Microsystems, Inc. Les montages NFS se feront sans + difficulté, et certaines opérations pourront + réussir, puis soudain le serveur semblera ne plus + répondre au client, bien que les requêtes vers ou + en provenance d'autres systèmes continueront à + être traitées normalement. Cela se manisfeste + sur la machine cliente, que ce soit le système &os; ou + la station de travail. Sur de nombreux systèmes, il + n'est pas possible d'arrêter le client proprement une + fois que ce problème apparaît. La seule solution + est souvent de réinitialiser le client parce que le + problème NFS ne peut être résolu.</para> + + <para>Bien que la solution “correcte” est + d'installer une carte Ethernet plus performante et de plus + grande capacité sur le système &os;, il existe + une solution simple qui donnera satisfaction. Si le + système &os; est le <emphasis>serveur</emphasis>, + ajoutez l'option <option>-w=1024</option> lors du montage sur + le client. Si le système &os; est le + <emphasis>client</emphasis>, alors montez le système de + fichiers NFS avec l'option <option>-r=1024</option>. Ces + options peuvent être spécifiées dans le + quatrième champ de l'entrée + <filename>fstab</filename> sur le client pour les montages + automatiques, ou en utilisant le paramètre + <option>-o</option> de la commande &man.mount.8; pour les + montages manuels.</para> + + <para>Il faut noter qu'il existe un problème + différent, que l'on confond parfois avec le + précédent, qui peut se produire lorsque les + serveurs et les clients NFS sont sur des réseaux + différents. Si c'est le cas, + <emphasis>assurez-vous</emphasis> que vos routeurs + transmettent bien les informations UDP nécessaires, ou + vous n'irez nulle part, quoi que vous fassiez par + ailleurs.</para> + + <para>Dans les exemples suivants, <hostid>fastws</hostid> est le + nom de la station de travail (interface) performante, et + <hostid>freebox</hostid> celui d'une machine (interface) &os; + avec une carte Ethernet moins performante. <filename + role="directory">/sharedfs</filename> est le système de + fichiers NFS qui sera exporté (consulter la page de + manuel &man.exports.5;), et <filename + role="directory">/project</filename> sera le point de montage + sur le client pour le système de fichiers + exporté. Dans tous les cas, des options + supplémentaires, telles que <option>hard</option> + <option>soft</option> et <option>bg</option> seront + peut-être nécessaires pour vos + applications.</para> + + <para>Exemple d'extrait du fichier + <filename>/etc/fstab</filename> sur <hostid>freebox</hostid> + quand le système &os; (<hostid>freebox</hostid>) est le + client:</para> + + <programlisting>fastws:/sharedfs /project nfs rw,-r=1024 0 0</programlisting> + + <para>Commande de montage manuelle sur + <hostid>freebox</hostid>:</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -r=1024 fastws:/sharedfs /project</userinput></screen> + + <para>Exemple d'extrait du fichier + <filename>/etc/fstab</filename> sur <hostid>fastws</hostid> + quand le système &os; est le serveur:</para> + + <programlisting>freebox:/sharedfs /project nfs rw,-w=1024 0 0</programlisting> + + <para>Commande de montage manuelle sur + <hostid>fastws</hostid>:</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -w=1024 freebox:/sharedfs /project</userinput></screen> + + <para>Presque n'importe quelle carte Ethernet 16 bits + permettra d'opérer sans l'utilisation des + paramètres restrictifs précédents sur les + tailles des tampons de lecture et d'écriture.</para> + + <para>Pour ceux que cela intéresse, voici ce qui se passe + quand le problème survient, ce qui explique + également pourquoi ce n'est pas + récupérable. NFS travaille + généralement avec une taille de + “bloc” de 8 k (bien qu'il arrive qu'il les + fragmente en de plus petits morceaux). Comme la taille + maximale d'un paquet Ethernet est de 1500 octets, le + “bloc” NFS est divisé en plusieurs paquets + Ethernet, bien qu'il soit toujours vu comme quelque chose + d'unitaire par les couches supérieures du code, et doit + être réceptionné, assemblé, et + <emphasis>acquitté</emphasis> comme tel. Les stations + de travail performantes peuvent traiter les paquets qui + composent le bloc NFS les uns après les autres, + pratiquement aussi rapidement que le standard le permet. Sur + les cartes les plus petites, de moindre capacité, les + derniers paquets d'un même bloc écrasent les + paquets précédents avant qu'ils aient pû + être transmis à la machine et le bloc ne peut + être réassemblé ou acquitté. Avec + pour conséquence, le dépassement du délai + d'attente sur la station de travail qui recommence alors la + transmission, mais en renvoyant l'intégralité + des 8 K, et ce processus se repète à + l'infini.</para> + + <para>En définissant la taille de bloc inférieure + à la taille d'un paquet Ethernet, nous nous assurons + que chaque paquet Ethernet complet sera acquitté + individuellement, évitant ainsi la situation de + blocage.</para> + + <para>Des écrasements peuvent toujours survenir quand des + stations de travail performantes surchargent un système + PC de données, mais avec de meilleures cartes, de tels + écrasements ne sont pas systématiques pour les + “blocs” NFS. Quand un écrasement + apparaît, les blocs affectés sont retransmis, et + ils y a de fortes chances pour qu'ils soient reçus, + assemblés et acquittés.</para> + </sect2> + </sect1> + + <sect1 id="network-nis"> + <sect1info> + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>Ecrit par </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Eric</firstname> + <surname>Ogren</surname> + <contrib>Augmenté par </contrib> + </author> + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + </author> + </authorgroup> + </sect1info> + <title>NIS/YP</title> + + <sect2> + <title>Qu'est-ce que c'est?</title> + <indexterm><primary>NIS</primary></indexterm> + <indexterm><primary>Solaris</primary></indexterm> + <indexterm><primary>HP-UX</primary></indexterm> + <indexterm><primary>AIX</primary></indexterm> + <indexterm><primary>Linux</primary></indexterm> + <indexterm><primary>NetBSD</primary></indexterm> + <indexterm><primary>OpenBSD</primary></indexterm> + <para>NIS, qui signifie “Network Information + Services” (services d'information réseau), fut + développé par Sun Microsystems pour centraliser + l'administration de systèmes &unix; (à l'origine + &sunos;). C'est devenu aujourd'hui un standard industriel; tous + les systèmes importants de type &unix; (&solaris;, HP-UX, + &aix;, Linux, NetBSD, OpenBSD, &os;, etc.) supportent + NIS.</para> + + <indexterm><primary>yellow pages</primary><see>NIS</see></indexterm> + <para>NIS était appelé au départ + “Yellow Pages” (page jaunes), mais étant + donné que c'était marque déposée, + Sun changea le nom. L'ancienne appelation (et yp) est toujours + rencontrée et utilisée.</para> + + <indexterm> + <primary>NIS</primary> + <secondary>domaines</secondary> + </indexterm> + <para>C'est un système client/serveur basé sur les + RPCs qui permet à un groupe de machines d'un domaine NIS + de partager un ensemble de fichiers de configuration communs. + Cela permet à un administrateur système de mettre + en place des clients NIS avec un minimum de configuration et + d'ajouter, modifier ou supprimer les informations de + configuration à partir d'un unique emplacement.</para> + + <indexterm><primary>Windows NT</primary></indexterm> + <para>C'est similaire au système de domaine &windowsnt;; + bien que l'implémentation interne des deux n'est pas du + tout identique, les fonctionnalités de base sont + comparables.</para> + </sect2> + + <sect2> + <title>Termes/processus à connaître</title> + + <para>Il existe plusieurs termes et processus utilisateurs que + vous rencontrerez lors de la configuration de NIS sous &os;, + que vous vouliez mettre en place un serveur NIS ou un client + NIS:</para> + + <indexterm> + <primary><application>portmap</application></primary> + </indexterm> + + <informaltable frame="none"> + <tgroup cols="2"> + <colspec colwidth="1*"> + <colspec colwidth="3*"> + + <thead> + <row> + <entry>Terme</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry>Nom de domaine NIS</entry> + <entry>Un serveur maître NIS et tous ses clients + (y compris ses serveurs esclaves) ont un domaine NIS. + Similaire au nom de domaine &windowsnt;, le nom de + domaine NIS n'a rien à voir avec le + système DNS.</entry> + </row> + <row> + <entry><application>portmap</application></entry> + <entry>Doit tourner afin d'activer les RPC (Remote + Procedure Call, appel de procédures distantes, un + protocole réseau utilisé par NIS). Si + <application>portmap</application> ne tourne pas, il + sera impossible de faire fonctionner un serveur NIS, ou + jouer le rôle d'un client NIS.</entry> + </row> + <row> + <entry><application>ypbind</application></entry> + <entry>Fait pointer un client NIS vers son serveur NIS. + Il récupérera le nom de domaine NIS + auprès du système, et en utilisant les + RPC, se connectera au serveur. + <application>ypbind</application> est le coeur de la + communication client-serveur dans un environnement NIS; + si <application>ypbind</application> meurt sur une + machine cliente, elle ne sera pas en mesure + d'accéder au serveur NIS.</entry> + </row> + <row> + <entry><application>ypserv</application></entry> + <entry>Ne devrait tourner que sur les serveurs NIS, + c'est le processus serveur en lui-même. Si + &man.ypserv.8; meurt, alors le serveur ne pourra plus + répondre aux requêtes NIS (avec un peu de + chance, un serveur esclave prendra la relève). + Il existe des implémentations de NIS (mais ce + n'est pas le cas de celle de &os;), qui n'essayent pas + de se reconnecter à un autre serveur si le + serveur utilisé précédement meurt. + Souvent, la seule solution dans ce cas est de relancer + le processus serveur (ou même redémarrer le + serveur) ou le processus + <application>ypbind</application> sur le client.</entry> + </row> + <row> + <entry><application>rpc.yppasswdd</application></entry> + <entry>Un autre processus qui ne devrait tourner que sur + les serveurs maître NIS; c'est un + “daemon” qui permettra aux clients de + modifier leur mot de passe NIS. Si ce + “daemon” ne tourne pas, les utilisateurs + devront ouvrir une session sur le serveur maître + NIS et y changer à cet endroit leur mot de + passe.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + <!-- XXX Missing: rpc.ypxfrd (not important, though) May only run + on the master --> + </sect2> + + <sect2> + <title>Comment cela fonctionne-t-il?</title> + + <para>Dans un environnement NIS il y a trois types de machines: + les serveurs maîtres, les serveurs esclaves et les + clients. Les serveurs centralisent les informations de + configuration des machines. Les serveurs maîtres + détiennent l'exemplaire de référence de + ces informations, tandis que les serveurs esclaves en ont un + double pour assurer la redondance. Les clients attendent des + serveurs qu'ils leur fournissent ces informations.</para> + + <para>Le contenu de nombreux fichiers peut être + partagé de cette manière. Les fichiers + <filename>master.passwd</filename>, + <filename>group</filename>, et <filename>hosts</filename> sont + fréquemment partagés par l'intermédiaire + de NIS. A chaque fois qu'un processus d'une machine cliente a + besoin d'une information qu'il trouverait normalement + localement dans un de ces fichiers, il émet une + requête au serveur NIS auquel il est rattaché + pour obtenir cette information.</para> + + <sect3> + <title>Type de machine</title> + + <itemizedlist> + <indexterm> + <primary>NIS</primary> + <secondary>serveur maître</secondary> + </indexterm> + <listitem> + <para>Un <emphasis>serveur NIS maître</emphasis>. + Ce serveur, analogue à un contrôleur de + domaine &windowsnt; primaire, gère les fichiers + utilisés par tous les clients NIS. Les fichiers + <filename>passwd</filename>, <filename>group</filename>, + et les autres fichiers utilisés par les clients NIS + résident sur le serveur maître.</para> + + <note> + <para>Il est possible pour une machine d'être + un serveur NIS maître pour plus qu'un domaine NIS. + Cependant, ce cas ne sera pas abordé dans cette + introduction, qui suppose un environnement NIS + relativement petit.</para> + </note> + </listitem> + <indexterm> + <primary>NIS</primary> + <secondary>serveur esclave</secondary> + </indexterm> + <listitem> + <para><emphasis>Serveurs NIS esclaves</emphasis>. + Similaire aux contrôleurs de domaine &windowsnt; de + secours, les serveurs NIS esclaves possèdent une + copie des fichiers du serveur NIS maître. Les + serveurs NIS esclaves fournissent la redondance + nécessaire dans les environnements importants. Ils + aident également à à la + répartition de la charge du serveur maître: + les clients NIS s'attachent toujours au serveur NIS dont + ils reçoivent la réponse en premier, y + compris si c'est la réponse d'un serveur + esclave.</para> + </listitem> + <indexterm> + <primary>NIS</primary> + <secondary>client</secondary> + </indexterm> + <listitem> + <para><emphasis>Clients NIS</emphasis>. + Les clients NIS, comme la plupart des stations de + travail &windowsnt;, s'identifient auprès du + serveur NIS (ou le contrôleur de domaine + &windowsnt; dans le cas de stations de travail + &windowsnt;) pour l'ouverture de sessions.</para> + </listitem> + </itemizedlist> + </sect3> + </sect2> + + <sect2> + <title>Utiliser NIS/YP</title> + + <para>Cette section traitera de la configuration d'un + exemple d'environnement NIS.</para> + + <note><para>Dans cette section on suppose que vous utilisez + &os; 3.3 ou une version suivante. Les instructions + fournies fonctionneront <emphasis>probabablement</emphasis> + avec n'importe quelle version de &os; supérieure + à 3.0, mais il n'y a aucune garantie que cela soit le + cas.</para></note> + + <sect3> + <title>Planification</title> + + <para>Supposons que vous êtes l'administrateur d'un + petit laboratoire universitaire. Ce laboratoire dispose de + 15 machines &os;, et ne possède pas actuellement de + point central d'administration; chaque machine a ses propres + fichiers <filename>/etc/passwd</filename> et + <filename>/etc/master.passwd</filename>. Ces fichiers sont + maintenus à jour entre eux grâce à des + interventions manuelles; actuellement quand vous ajoutez un + utilisateur pour le laboratoire, vous devez exécuter + <command>adduser</command> sur les 15 machines. Cela doit + changer, vous avez donc décidé de convertir le + laboratoire à l'utilisation de NIS en utilisant deux + machines comme serveurs.</para> + + <para>La configuration du laboratoire ressemble à + quelque chose comme:</para> + + <informaltable frame="none"> + <tgroup cols="3"> + <thead> + <row> + <entry>Nom de machine</entry> + <entry>Adresse IP</entry> + <entry>Rôle de la machine</entry> + </row> + </thead> + <tbody> + <row> + <entry><hostid>ellington</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.2</hostid></entry> + <entry>Maître NIS</entry> + </row> + <row> + <entry><hostid>coltrane</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.3</hostid></entry> + <entry>Esclave NIS</entry> + </row> + <row> + <entry><hostid>basie</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.4</hostid></entry> + <entry>Station de travail</entry> + </row> + <row> + <entry><hostid>bird</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.5</hostid></entry> + <entry>Machine cliente</entry> + </row> + <row> + <entry><hostid>cli[1-11]</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.[6-17]</hostid></entry> + <entry>Autres machines clientes</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Si vous mettez en place un système NIS pour la + première fois, c'est une bonne idée de penser + à ce que vous voulez en faire. Peu importe la taille + de votre réseau, il y a quelques décisions + à prendre.</para> + + <sect4> + <title>Choisir un nom de domaine NIS</title> + + <indexterm> + <primary>NIS</primary> + <secondary>nom de domaine</secondary> + </indexterm> + <para>Ce n'est pas le “nom de domaine” dont vous + avez l'habitude. Il est plus exactement appelé + “nom de domaine NIS”. Quand un client diffuse + des requêtes pour obtenir des informations, il y + inclut le nom de domaine NIS auquel il appartient. C'est + ainsi que plusieurs serveurs d'un même réseau + peuvent savoir lequel d'entre eux doit répondre aux + différentes requêtes. Pensez au nom de domaine + NIS comme le nom d'un groupe de machines qui sont + reliées entre elles.</para> + + <para>Certains choississent d'utiliser leur nom de domaine + Internet pour nom de domaine NIS. Ce n'est pas + conseillé parce que c'est une source de confusion + quand il faut résoudre un problème + réseau. Le nom de domaine NIS devrait être + unique sur votre réseau et est utile s'il + décrit le groupe de machines qu'il + représente. Par exemple, le département + artistique de Acme Inc. pourrait avoir + “acme-art” comme nom de domaine NIS. Pour + notre exemple, nous supposerons que vous avez choisi le + nom <emphasis>test-domain</emphasis>.</para> + + <indexterm><primary>SunOS</primary></indexterm> + <para>Cependant, certains systèmes d'exploitation + (notamment &sunos;) utilisent leur nom de domaine NIS pour + nom de domaine Internet. Si une ou plusieurs machines sur + votre réseau présentent cette restriction, + vous <emphasis>devez</emphasis> utiliser votre nom de + domaine Internet pour nom de domaine NIS.</para> + </sect4> + + <sect4> + <title>Contraintes au niveau du serveur</title> + + <para>Il y a plusieurs choses à garder à + l'esprit quand on choisit une machine destinée + à être un serveur NIS. Un des + problèmes du NIS est le degré de + dépendance des clients vis à vis du serveur. + Si un client ne peut contacter le serveur de son domaine + NIS, la plupart du temps la machine n'est plus utilisable. + L'absence d'information sur les utilisateurs et les + groupes bloque la plupart des systèmes. Vous devez + donc vous assurer de choisir une machine qui ne sera pas + redémarrée fréquement, ni + utilisée pour du développement. + Idéalement, le serveur NIS devrait être une + machine dont l'unique utilisation serait d'être un + serveur NIS. Si vous avez un réseau qui n'est pas + très chargé, il peut être + envisagé de mettre le serveur NIS sur une machine + fournissant d'autres services, gardez juste à + l'esprit que si le serveur NIS n'est pas disponible + à un instant donné, cela affectera + <emphasis>tous</emphasis> vos clients NIS.</para> + </sect4> + </sect3> + + <sect3> + <title>Serveurs NIS</title> + + <para>La copie de référence de toutes les + informations NIS est stockée sur une seule machine + appelée serveur NIS maître. Les bases de + données utilisées pour le stockage de ces + informations sont appelées tables NIS (“NIS + maps”). Sous &os; ces tables se trouvent dans + <filename>/var/yp/[domainname]</filename> où + <filename>[domainname]</filename> est le nom du domaine NIS + concerné. Un seul serveur NIS peut gérer + plusieurs domaines à la fois, il peut donc y avoir + plusieurs de ces répertoires, un pour chaque domaine. + Chaque domaine aura son propre jeu de tables.</para> + + <para>Les serveurs NIS maîtres et esclaves traitent + toutes les requêtes NIS à l'aide du + “daemon” <application>ypserv</application>. + <application>ypserv</application> reçoit les + requêtes des clients NIS, traduit le nom de domaine et + le nom de table demandés en chemin d'accès + à la base de données correspondante et + transmet l'information de la base de données au + client.</para> + + <sect4> + <title>Configurer un serveur NIS maître</title> + <indexterm> + <primary>NIS</primary> + <secondary>configuration du serveur</secondary> + </indexterm> + <para>Selon vos besoins, la configuration d'un serveur NIS + maître peut être relativement simple. &os; + offre par défaut un support direct du NIS. Tout ce + dont vous avez besoin est d'ajouter les lignes qui suivent + au fichier <filename>/etc/rc.conf</filename>, et &os; + s'occupera du reste pour vous.</para> + + <procedure> + <step> + <para><programlisting>nisdomainname="test-domain"</programlisting> + Cette ligne définie le nom de domaine NIS, + <literal>test-domain</literal>, à la + configuration du réseau (e.g. au + démarrage).</para> + </step> + <step> + <para><programlisting>nis_server_enable="YES"</programlisting> + Demandera à &os; de lancer les processus du + serveur NIS dès que le réseau est en + fonctionnement.</para> + </step> + <step> + <para><programlisting>nis_yppasswdd_enable="YES"</programlisting> + Ceci activera le “daemon” + <application>rpc.yppasswdd</application>, qui, comme + mentionné précedement, permettra aux + utilisateurs de modifier leur mot de passe à + partir d'une machine cliente.</para> + </step> + </procedure> + + <note> + <para>Selon votre configuration NIS, vous aurez + peut-être à ajouter des entrées + supplémentaires. Consultez la <link + linkend="network-nis-server-is-client">section sur les + serveurs NIS qui sont également des clients + NIS</link>, plus bas, pour plus de détails.</para> + </note> + + <para>Maintenant, tout ce que vous devez faire est + d'exécuter la commande + <command>/etc/netstart</command> en tant que + super-utilisateur. Elle configurera tout en utilisant les + valeurs que vous avez définies dans + <filename>/etc/rc.conf</filename>.</para> + </sect4> + + <sect4> + <title>Initialisation des tables NIS</title> + <indexterm> + <primary>NIS</primary> + <secondary>tables</secondary> + </indexterm> + <para>Les <emphasis>tables NIS</emphasis> sont des fichiers + de base de données, qui sont conservés dans le + répertoire <filename + role="directory">/var/yp</filename>. Elles sont + générées à partir des fichiers + de configuration du répertoire <filename + role="directory">/etc</filename> du serveur NIS + maître, avec une exception: le fichier + <filename>/etc/master.passwd</filename>. Et cela pour une + bonne raison, vous ne voulez pas divulguer les mots de passe + pour l'utilisateur <username>root</username> et autres + comptes d'administration aux autres serveurs du domaine NIS. + Par conséquent, avant d'initialiser les tables NIS, + vous devrez faire:</para> + + <screen>&prompt.root; <userinput>cp /etc/master.passwd /var/yp/master.passwd</userinput> + &prompt.root; <userinput>cd /var/yp</userinput> + &prompt.root; <userinput>vi master.passwd</userinput></screen> + + <para>Vous devrez effacer toutes les entrées + concernant les comptes système + (<username>bin</username>, <username>tty</username>, + <username>kmem</username>, <username>games</username>, + etc.), tout comme les comptes que vous ne désirez + pas propager aux clients NIS (par exemple + <username>root</username> et tout autre compte avec un UID + 0 (super-utilisateur)).</para> + + <note><para>Assurez-vous que le fichier + <filename>/var/yp/master.passwd</filename> n'est pas + lisible par son groupe ou le reste du monde (mode 600)! + Utilisez la commande <command>chmod</command> si + nécessaire.</para></note> + + <indexterm><primary>Tru64 UNIX</primary></indexterm> + <para>Cela achevé, il est temps d'initialiser les + tables NIS! &os; dispose d'une procédure + appelée <command>ypinit</command> pour le faire + à votre place (consultez sa page de manuel pour plus + d'informations). Notez que cette procédure est + disponible sur la plupart des systèmes d'exploitation + du type &unix;, mais pas tous. Sur Digital UNIX/Compaq + Tru64 UNIX, elle est appelée + <command>ypsetup</command>. Comme nous voulons + générer les tables pour un maître NIS, + nous passons l'option <option>-m</option> à + <command>ypinit</command>. Pour générer les + tables NIS, en supposant que vous avez effectué les + étapes précédentes, lancez:</para> + + <screen>ellington&prompt.root; <userinput>ypinit -m test-domain</userinput> +Server Type: MASTER Domain: test-domain +Creating an YP server will require that you answer a few questions. +Questions will all be asked at the beginning of the procedure. +Do you want this procedure to quit on non-fatal errors? [y/n: n] <userinput>n</userinput> +Ok, please remember to go back and redo manually whatever fails. +If you don't, something might not work. +At this point, we have to construct a list of this domains YP servers. +rod.darktech.org is already known as master server. +Please continue to add any slave servers, one per line. When you are +done with the list, type a <control D>. +master server : ellington +next host to add: <userinput>coltrane</userinput> +next host to add: <userinput>^D</userinput> +The current list of NIS servers looks like this: +ellington +coltrane +Is this correct? [y/n: y] <userinput>y</userinput> + +[..output from map generation..] + +NIS Map update completed. +ellington has been setup as an YP master server without any errors.</screen> + + <para><command>ypinit</command> devrait avoir + créé <filename>/var/yp/Makefile</filename> + à partir de + <filename>/var/yp/Makefile.dist</filename>. Une fois + créé, ce fichier suppose que vous être + dans un environnement composé uniquement de + machines &os; et avec un seul serveur. Comme + <literal>test-domain</literal> dispose également + d'un serveur esclave, vous devez éditer + <filename>/var/yp/Makefile</filename>:</para> + + <screen>ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput></screen> + + <para>Vous devez commenter la ligne</para> + + <programlisting>NOPUSH = "True"</programlisting> + + <para>(si elle n'est pas déjà + commentée).</para> + </sect4> + + <sect4> + <title>Configurer un serveur NIS esclave</title> + <indexterm> + <primary>NIS</primary> + <secondary>serveur esclave</secondary> + </indexterm> + <para>Configurer un serveur NIS esclave est encore plus + simple que de configurer un serveur maître. Ouvrez + une session sur le serveur esclave et éditez le + fichier <filename>/etc/rc.conf</filename> comme + précédemment. La seule différence est + que nous devons maintenant utiliser l'option + <option>-s</option> avec <command>ypinit</command>. + L'option <option>-s</option> a besoin du nom du serveur NIS + maître, donc notre ligne de commande ressemblera + à:</para> + + <screen>coltrane&prompt.root; <userinput>ypinit -s ellington test-domain</userinput> + +Server Type: SLAVE Domain: test-domain Master: ellington + +Creating an YP server will require that you answer a few questions. +Questions will all be asked at the beginning of the procedure. + +Do you want this procedure to quit on non-fatal errors? [y/n: n] <userinput>n</userinput> + +Ok, please remember to go back and redo manually whatever fails. +If you don't, something might not work. +There will be no further questions. The remainder of the procedure +should take a few minutes, to copy the databases from ellington. +Transferring netgroup... +ypxfr: Exiting: Map successfully transferred +Transferring netgroup.byuser... +ypxfr: Exiting: Map successfully transferred +Transferring netgroup.byhost... +ypxfr: Exiting: Map successfully transferred +Transferring master.passwd.byuid... +ypxfr: Exiting: Map successfully transferred +Transferring passwd.byuid... +ypxfr: Exiting: Map successfully transferred +Transferring passwd.byname... +ypxfr: Exiting: Map successfully transferred +Transferring group.bygid... +ypxfr: Exiting: Map successfully transferred +Transferring group.byname... +ypxfr: Exiting: Map successfully transferred +Transferring services.byname... +ypxfr: Exiting: Map successfully transferred +Transferring rpc.bynumber... +ypxfr: Exiting: Map successfully transferred +Transferring rpc.byname... +ypxfr: Exiting: Map successfully transferred +Transferring protocols.byname... +ypxfr: Exiting: Map successfully transferred +Transferring master.passwd.byname... +ypxfr: Exiting: Map successfully transferred +Transferring networks.byname... +ypxfr: Exiting: Map successfully transferred +Transferring networks.byaddr... +ypxfr: Exiting: Map successfully transferred +Transferring netid.byname... +ypxfr: Exiting: Map successfully transferred +Transferring hosts.byaddr... +ypxfr: Exiting: Map successfully transferred +Transferring protocols.bynumber... +ypxfr: Exiting: Map successfully transferred +Transferring ypservers... +ypxfr: Exiting: Map successfully transferred +Transferring hosts.byname... +ypxfr: Exiting: Map successfully transferred + +coltrane has been setup as an YP slave server without any errors. +Don't forget to update map ypservers on ellington.</screen> + + <para>Vous devriez avoir un répertoire appelé + <filename>/var/yp/test-domain</filename>. Des copies des + tables du serveur NIS maître devraient se trouver + dans ce répertoire. Vous devrez vous assurer que + ces tables restent à jour. Les entrées + suivantes dans <filename>/etc/crontab</filename> sur vos + serveurs esclaves s'en chargeront:</para> + + <programlisting>20 * * * * root /usr/libexec/ypxfr passwd.byname +21 * * * * root /usr/libexec/ypxfr passwd.byuid</programlisting> + + <para>Ces deux lignes obligent le serveur esclave à + synchroniser ses tables avec celles du serveur + maître. Bien que ces entrées ne soient pas + indispensables puisque le serveur maître essaye de + s'assurer que toute modification de ses tables NIS soit + répercutée à ses serveurs esclaves et + comme l'information sur les mots de passe est vitale pour + les systèmes qui dépendent du serveur, il + est bon de forcer les mises à jour. C'est d'autant + plus important sur les réseaux chargés + où il n'est pas certain que les mises à jour + soient intégrales.</para> + + <para>Maintenant, exécutez la commande + <command>/etc/netstart</command> sur le serveur esclave, + ce qui lancera le serveur NIS.</para> + </sect4> + </sect3> + + <sect3> + <title>Clients NIS</title> + + <para>Un client NIS établit une connexion avec un + serveur NIS donné par l'intermédiaire du + “daemon” <application>ypbind</application>. + <application>ypbind</application> consulte le nom de domaine + par défaut du système (défini par la + commande <command>domainname</command>), et commence + à diffuser des requêtes RPC sur le + réseau local. Ces requêtes précisent le + nom de domaine auquel <application>ypbind</application> + essaye de se rattacher. Si un serveur configuré pour + ce domaine reçoit une des requêtes + diffusées, il répond à + <application>ypbind</application>, qui enregistrera + l'adresse du serveur. S'il y a plusieurs serveurs + disponibles (un maître et plusieurs esclaves par + example), <application>ypbind</application> utilisera + l'adresse du premier à répondre. Dès + lors, le système client dirigera toutes ses + requêtes NIS vers ce serveur. + <application>ypbind</application> enverra de temps en temps + des requêtes “ping” au serveur pour + s'assurer qu'il fonctionne toujours. S'il ne reçoit + pas de réponse dans un laps de temps raisonnable, + <application>ypbind</application> considérera ne plus + être attaché au domaine et recommencera + à diffuser des requêtes dans l'espoir de + trouver un autre seveur.</para> + + <sect4> + <title>Configurer un client NIS</title> + <indexterm> + <primary>NIS</primary> + <secondary>configuration du client</secondary> + </indexterm> + <para>Configurer une machine &os; en client NIS est assez + simple.</para> + + <procedure> + <step> + <para>Editez le fichier + <filename>/etc/rc.conf</filename> et ajoutez les lignes + suivantes afin de définir le nom de domaine NIS + et lancez <application>ypbind</application> au + démarrage du réseau:</para> + + <programlisting>nisdomainname="test-domain" +nis_client_enable="YES"</programlisting> + </step> + + <step> + <para>Pour importer tous les mots de passe disponibles + du serveur NIS, effacez tous les comptes utilisateur de + votre fichier <filename>/etc/master.passwd</filename> et + utilisez <command>vipw</command> pour ajouter la ligne + suivante à la fin du fichier:</para> + + <programlisting>+:::::::::</programlisting> + + <note> + <para>Cette ligne permet à chaque utilisateur + ayant un compte valide dans les tables de mots de + passe du serveur d'avoir un compte sur le client. Il + y a plusieurs façons de configurer votre client + NIS en modifiant cette ligne. Consultez la section + <link linkend="network-netgroups">groupes + réseau</link> plus bas pour plus + d'informations. Pour en savoir plus, reportez-vous + à l'ouvrage <literal>Managing NFS and + NIS</literal> de chez O'Reilly.</para> + </note> + + <note> + <para>Vous devriez conservez au moins un compte local + (i.e. non-importé via NIS) dans votre fichier + <filename>/etc/master.passwd</filename> et ce compte + devrait également être membre du groupe + <groupname>wheel</groupname>. Si quelque chose se + passe mal avec NIS, ce compte peut être + utilisé pour ouvrir une session à + distance, devenir <username>root</username>, et + effectuer les corrections nécessaires.</para> + </note> + </step> + + <step> + <para>Pour importer tous les groupes disponibles du + serveur NIS, ajoutez cette ligne à votre fichier + <filename>/etc/group</filename>:</para> + + <programlisting>+:*::</programlisting> + </step> + </procedure> + + <para>Une fois que c'est fait, vous devriez être en + mesure d'exécuter <command>ypcat passwd</command> + et voir la table des mots de passe du serveur NIS.</para> + </sect4> + </sect3> + </sect2> + + <sect2> + <title>Sécurité du NIS</title> + + <para>De façon générale, n'importe quel + utilisateur distant peut émettre une requête RPC + à destination de &man.ypserv.8; et + récupérer le contenu de vos tables NIS, en + supposant que l'utilisateur distant connaisse votre nom de + domaine. Pour éviter ces transactions non + autorisées, &man.ypserv.8; dispose d'une + fonctionnalité appelée “securenets” + qui peut être utilisée pour restreindre + l'accès à un ensemble donné de machines. + Au démarrage, &man.ypserv.8; tentera de charger les + informations sur les “securenets” à partir + d'un fichier nommé + <filename>/var/yp/securenets</filename>.</para> + + <note> + <para>Ce chemin d'accès peut varier en fonction du + chemin d'accès défini par l'option + <option>-p</option>. Ce fichier contient des entrées + sous la forme de définitions de réseau et d'un + masque de sous-réseau séparé par une + espace. Les lignes commençant par un “#” + sont considérées comme des commentaires. Un + exemple de fichier <filename>securenets</filename> peut + ressembler à ceci:</para> + </note> + + <programlisting># autorise les connexions depuis la machine locale -- obligatoire +127.0.0.1 255.255.255.255 +# autorise les connexions de n'importe quelle machine +# du réseau 192.168.128.0 +192.168.128.0 255.255.255.0 +# autorise les connexions de n'importe quelle machine +# entre 10.0.0.0 et 10.0.15.255 +# y compris les machines du laboratoire de test +10.0.0.0 255.255.240.0</programlisting> + + <para>Si &man.ypserv.8; reçoit une requête d'une + adresse qui satisfait à ces règles, il la traite + normalement. Si une adresse ne correspond pas aux + règles, la requête sera ignorée et un + message d'avertissement sera enregistré. Si le fichier + <filename>/var/yp/securenets</filename> n'existe pas, + <command>ypserv</command> autorisera les connexions à + partir de n'importe quelle machine.</para> + + <para>Le programme <command>ypserv</command> supporte + également l'outil <application>tcpwrapper</application> + de Wietse Venema. Cela permet à l'administrateur + d'utiliser les fichiers de configuration de + <application>tcpwrapper</application> pour contrôler les + accès à la place de + <filename>/var/yp/securenets</filename>.</para> + + <note> + <para>Bien que ces deux mécanismes de contrôle + d'accès offrent une certaine sécurité, il + sont, de même que le test du port + privilégié, vulnérables aux attaques par + “usurpation” d'adresses. Tout le trafic relatif + à NIS devrait être bloqué par votre + coupe-feu.</para> + + <para>Les serveurs utilisant + <filename>/var/yp/securenets</filename> pourront + échouer à traiter les requêtes de + clients NIS légitimes avec des implémentation + TCP/IP archaïques. Certaines de ces + implémentations positionnent à zéro les + bits de la partie machine de l'adresse IP lors de diffusions + et/ou sont incapables respecter le masque de + sous-réseau lors du calcul de l'adresse de diffusion. + Alors que certains de ces problèmes peuvent + être corrigés en modifiant la configuration du + client, d'autres problèmes peuvent forcer le retrait + des systèmes clients fautifs ou l'abandon de + <filename>/var/yp/securenets</filename>.</para> + + <para>Utiliser <filename>/var/yp/securenets</filename> sur un + serveur avec une implémentation TCP/IP archaïque + est une mauvaise idée et sera à l'origine de + pertes de la fonctionnalité NIS pour une grande + partie de votre réseau.</para> + + <indexterm><primary>tcpwrapper</primary></indexterm> + <para>L'utilisation du système + <application>tcpwrapper</application> augmente les temps de + latence de votre serveur NIS. Le délai + supplémentaire peut être suffisament long pour + dépasser le délai d'attente des programmes + clients, tout particulièrement sur des réseaux + chargés ou avec des serveurs NIS lents. Si un ou + plusieurs de vos systèmes clients souffrent de ces + symptômes, vous devrez convertir les systèmes + clients en question en serveurs esclaves NIS et les forcer + à se rattacher à eux-mêmes.</para> + </note> + </sect2> + + <sect2> + <title>Interdire l'accès à certains + utilisateurs</title> + + <para>Dans notre laboratoire, il y a une machine + <hostid>basie</hostid> qui est supposée être une + station de travail de la faculté. Nous ne voulons pas + retirer cette machine du domaine NIS, le fichier + <filename>passwd</filename> sur le serveur maître NIS + contient les comptes pour la faculté et les + étudiants. Que pouvons-nous faire?</para> + + <para>Il existe une méthode pour interdire à + certains utilisateurs d'ouvrir une session sur une machine, + même s'ils sont présents dans la base de + données NIS. Pour cela, tout ce dont vous avez besoin + de faire est d'ajouter + <emphasis>-<replaceable>nom_utilisateur</replaceable></emphasis> + à la fin du fichier + <filename>/etc/master.passwd</filename> sur la machine + cliente, où <replaceable>nom_utilisateur</replaceable> + est le nom de l'utilisateur auquel vous désirez refuser + l'accès. Ceci doit être fait de + préférence avec <command>vipw</command>, puisque + <command>vipw</command> contrôlera vos changements au + fichier <filename>/etc/master.passwd</filename>, et + regénérera automatiquement la base de + données à la fin de l'édition. Par + exemple, si nous voulions interdire l'ouverture de session + à l'utilisateur <username>bill</username> sur la + machine <hostid>basie</hostid> nous ferions:</para> + + <screen>basie&prompt.root; <userinput>vipw</userinput> +<userinput>[add -bill to the end, exit]</userinput> +vipw: rebuilding the database... +vipw: done + +basie&prompt.root; <userinput>cat /etc/master.passwd</userinput> + +root:[password]:0:0::0:0:The super-user:/root:/bin/csh +toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh +daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin +operator:*:2:5::0:0:System &:/:/sbin/nologin +bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin +tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin +kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin +games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin +news:*:8:8::0:0:News Subsystem:/:/sbin/nologin +man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin +bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin +uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico +xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin +pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin +nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin ++::::::::: +-bill + +basie&prompt.root;</screen> + </sect2> + + <sect2 id="network-netgroups"> + <sect2info> + <authorgroup> + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + <contrib>Contribution de </contrib> + </author> + </authorgroup> + </sect2info> + + <title>Utiliser les groupes réseau + (“netgroups”)</title> + <indexterm><primary>groupes réseau</primary></indexterm> + + <para>La méthode présentée dans la section + précédente fonctionne relativement bien si vous + avez besoin de règles spécifiques pour un petit + nombre d'utilisateurs et/ou de machines. Sur les + réseaux plus important, vous + <emphasis>oublierez</emphasis> d'interdire l'accès aux + machines sensibles à certains utilisateurs, ou vous + devrez même modifier chaque machine + séparément, perdant par là même les + avantages du NIS: l'administration + <emphasis>centralisée</emphasis>.</para> + + <para>La solution des développeurs du NIS pour ce + problème est appelé <emphasis>groupes + réseau</emphasis> (“netgroups”). Leur + objet et définition peuvent être comparés + aux groupes utilisés par les systèmes &unix;. + La principale différence étant l'absence + d'identifiants (ID) numériques et la capacité de + définir un groupe réseau à l'aide de + comptes utilisateur et d'autres groupes réseau.</para> + + <para>Les groupes réseau furent développés + pour gérer des réseaux importants et complexes + avec des centaines de machines et d'utilisateurs. C'est une + bonne option si vous êtes forcés de faire avec + une telle situation. Cependant leur complexité rend + impossible une explication avec des exemples simples. + L'exemple utilisé dans le reste de cette section met en + évidence ce problème.</para> + + <para>Supposons que l'introduction avec succès de NIS + dans votre laboratoire a retenu l'attention de vos + supérieurs. Votre mission suivante est + d'étendre la couverture de votre domaine NIS à + d'autres machines sur le campus. Les deux tables contiennent + les noms des nouveaux utilisateurs et des nouvelles machines + ainsi qu'une courte description de chacuns.</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Nom(s) d'utilisateurs</entry> + <entry>Description</entry> + </row> + </thead> + + <tbody> + <row> + <entry><username>alpha</username>, + <username>beta</username></entry> + <entry>Les employés du département IT + (“Information Technology“)</entry> + </row> + + <row> + <entry><username>charlie</username>, + <username>delta</username></entry> + <entry>Les nouveaux apprentis du département + IT</entry> + </row> + + <row> + <entry><username>echo</username>, + <username>foxtrott</username>, + <username>golf</username>, ...</entry> + <entry>Les employés ordinaires</entry> + </row> + + <row> + <entry><username>able</username>, + <username>baker</username>, ...</entry> + <entry>Les internes actuels</entry> + </tgroup> + </informaltable> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Nom(s) de machines</entry> + <entry>Description</entry> + </row> + </thead> + + <tbody> + <row> + <!-- Names taken from "Good Omens" by Neil Gaiman and Terry + Pratchett. Many thanks for a brilliant book. --> + <entry><hostid>war</hostid>, <hostid>death</hostid>, + <hostid>famine</hostid>, + <hostid>pollution</hostid></entry> + <entry>Vos serveurs les plus importants. Seuls les + employés du département IT sont + autorisés à ouvrir des sessions sur ces + machines.</entry> + </row> + <row> + <!-- gluttony was omitted because it was too fat --> + <entry><hostid>pride</hostid>, <hostid>greed</hostid>, + <hostid>envy</hostid>, <hostid>wrath</hostid>, + <hostid>lust</hostid>, <hostid>sloth</hostid></entry> + <entry>Serveurs moins importants. Tous les membres du + laboratoire IT sont autorisés à ouvrir des + sessions sur ces machines.</entry> + </row> + + <row> + <entry><hostid>one</hostid>, <hostid>two</hostid>, + <hostid>three</hostid>, <hostid>four</hostid>, + ...</entry> + <entry>Stations de travail ordinaires. Seuls les + employés <emphasis>réels</emphasis> sont + autorisés à utiliser ces machines.</entry> + </row> + + <row> + <entry><hostid>trashcan</hostid></entry> + <entry>Une très vielle machine sans + données sensibles. Même les internes + peuvent utiliser cette machine.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Si vous avez essayé d'implémenter ces + restrictions en bloquant séparément chaque + utilisateur, vous avez dû ajouter une ligne + <literal>-<replaceable>utilisateur</replaceable></literal> + à chaque fichier <filename>passwd</filename> de chaque + système pour chaque utilisateur non-autorisé + à ouvrir une session sur le système. Si vous + ometter ne serait-ce qu'une entrée, vous aurez des + problèmes. Il doit être possible de faire cela + lors de la configuration initiale, cependant vous + <emphasis>finirez</emphasis> par oublier d'ajouter les lignes + pour de nouveaux utilisateurs lors d'opérations + quotidiennes. Après tout, Murphy était + quelqu'un d'optimiste.</para> + + <para>Traiter cette situation avec les groupes réseau + présente plusieurs avantages. Chaque utilisateur n'a + pas besoin d'être traité + séparément; vous assignez un utilisateur + à un ou plusieurs groupes réseau et autorisez ou + refusez l'ouverture de session à tous les membres du + groupe réseau. Si vous ajoutez une nouvelle machine, + vous n'aurez à définir les restrictions + d'ouverture de session que pour les groupes réseau. + Ces modifications sont indépendantes les unes des + autres, plus de “pour chaque combinaison d'utilisateur + et de machine faire...” Si votre configuration NIS est + réfléchie, vous n'aurez à modifier qu'une + configuration centrale pour autoriser ou refuser + l'accès aux machines.</para> + + <para>La première étape est l'initialisation de la + table NIS du groupe réseau. La version &os; + d'&man.ypinit.8; ne crée pas de table par + défaut, mais son implémentation NIS la + supportera une fois créée. Pour créer + une table vide, tapez simplement</para> + + <screen>ellington&prompt.root; <userinput>vi /var/yp/netgroup</userinput></screen> + + <para>et commencez à ajouter du contenu. Pour notre + exemple, nous avons besoin de quatre groupes réseau: + les employées du département IT, les apprentis + du département IT, les employés normaux et les + internes.</para> + + <programlisting>IT_EMP (,alpha,test-domain) (,beta,test-domain) +IT_APP (,charlie,test-domain) (,delta,test-domain) +USERS (,echo,test-domain) (,foxtrott,test-domain) \ + (,golf,test-domain) +INTERNS (,able,test-domain) (,baker,test-domain)</programlisting> + + <para><literal>IT_EMP</literal>, <literal>IT_APP</literal> etc. + sont les noms des groupes réseau. Chaque groupement + entre parenthèses ajoute un ou plusieurs comptes + utilisateurs aux groupes. Les trois champs dans un groupement + sont:</para> + + <orderedlist> + <listitem> + <para>Le nom de la/les machine(s) où les + éléments suivants sont valides. Si vous ne + précisez pas un nom de machine, l'entrée est + valide sur toutes les machines. Si vous précisez un + nom de machine, vous pénétrerez dans un + royaume obscure, d'horreur et de confusion totale.</para> + </listitem> + + <listitem> + <para>Le nom du compte qui appartient au groupe + réseau.</para> + </listitem> + + <listitem> + <para>Le domaine NIS pour le compte. Vous pouvez importer + les comptes d'autres domaines NIS dans votre groupe + réseau si vous êtes une de ces personnes + malchanceuses avec plus d'un domaine NIS.</para> + </listitem> + </orderedlist> + + <para>Chacun de ces champs peut contenir des jokers. Consultez + la page de manuel &man.netgroup.5; pour plus de + détails.</para> + + <note> + <indexterm><primary>groupes réseau</primary></indexterm> + <para>Les noms de groupes réseau plus long que 8 + caractères ne devraient pas être utilisés, + tout particulièrement si vous avez des machines + utilisant d'autres systèmes d'exploitation dans votre + domaine NIS. Les noms sont sensibles à la casse des + caractères; utiliser des majuscules pour vos noms de + groupes réseau est une méthode simple pour + distinguer les utilisateurs, les machines et les noms de + groupes réseau.</para> + + <para>Certains clients NIS (autres que &os;) ne peuvent + gérer les groupes réseau avec un grand nombre + d'entrées. Par exemple, certaines anciennes versions + de &sunos; commencent à causer des problèmes + si un groupe réseau contient plus de 15 + <emphasis>entrées</emphasis>. Vous pouvez contourner + cette limite en créant plusieurs sous-groupes + réseau avec 15 utilisateurs ou moins et un + véritable groupe réseau constitué des + sous-groupes réseau:</para> + + <programlisting>BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] +BIGGRP2 (,joe16,domain) (,joe17,domain) [...] +BIGGRP3 (,joe31,domain) (,joe32,domain) +BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3</programlisting> + + <para>Vous pouvez répéter ce processus si vous + avez besoin de plus de 255 utilisateurs dans un seul groupe + réseau.</para> + </note> + + <para>Activer et propager votre nouvelle table NIS est + simple:</para> + + <screen>ellington&prompt.root; <userinput>cd /var/yp</userinput> +ellington&prompt.root; <userinput>make</userinput></screen> + + <para>Ceci générera les trois tables NIS + <filename>netgroup</filename>, + <filename>netgroup.byhost</filename> et + <filename>netgroup.byuser</filename>. Utilisez &man.ypcat.1; + pour contrôler si vos nouvelles tables NIs sont + disponibles:</para> + + <screen>ellington&prompt.user; <userinput>ypcat -k netgroup</userinput> +ellington&prompt.user; <userinput>ypcat -k netgroup.byhost</userinput> +ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput></screen> + + <para>La sortie devrait être semblable au contenu de + <filename>/var/yp/netgroup</filename>. La deuxième + commande ne produira pas de sortie si vous n'avez pas + précisé les groupes réseau + spécifiques à une machine. La troisième + commande peut être utilisée pour obtenir les + listes des groupes réseau pour un utilisateur.</para> + + <para>La configuration du client est plutôt simple. Pour + configurer le serveur <hostid>war</hostid>, vous devez lancer + &man.vipw.8; et remplacer la ligne</para> + + <programlisting>+:::::::::</programlisting> + + <para>par</para> + + <programlisting>+@IT_EMP:::::::::</programlisting> + + <para>Maintenant, seules les données pour les + utilisateurs définis dans le groupe réseau + <literal>IT_EMP</literal> sont importées dans la base + de données de mots de passe de <hostid>war</hostid> et + seuls ces utilisateurs sont autorisés à ouvrir + une session.</para> + + <para>Malheureusement, cette limitation s'applique + également à la fonction <literal>~</literal> de + l'interpréteur de commandes et toutes les routines de + conversion entre nom d'utilisateur et identifiant + numérique d'utilisateur. En d'autres termes, + <command>cd ~<replaceable>utilisateur</replaceable></command> + ne fonctionnera pas, et <command>ls -l</command> affichera + l'ID numérique à la place du nom d'utilisateur + et <command>find . -user joe -print</command> échouera + avec le message d'erreur <errorname>No such user</errorname>. + Pour corriger cela, vous devrez importer toutes les + entrées d'utilisateurs <emphasis>sans leur autoriser + l'ouverture de session sur vos serveurs</emphasis>.</para> + + <para>Cela peut être fait en ajoutant une autre ligne au + fichier <filename>/etc/master.passwd</filename>. Cette ligne + devrait contenir:</para> + + <para><literal>+:::::::::/sbin/nologin</literal>, signifiant + “Importer toutes les entrées mais remplacer + l'interpréteur de commandes avec + <filename>/sbin/nologin</filename> dans les entrées + importées”. Vous pouvez remplacer n'importe quel + champ dans l'entrée <literal>passwd</literal> en + plaçant une valeur par défaut dans votre fichier + <filename>/etc/master.passwd</filename>.</para> + + <!-- Been there, done that, got the scars to prove it - ue --> + <warning> + <para>Assurez-vous que + <literal>+:::::::::/sbin/nologin</literal> est placée + après <literal>+@IT_EMP:::::::::</literal>. Sinon, + tous les comptes utilisateur importés du NIS auront + <filename>/sbin/nologin</filename> comme interpréteur + de commandes.</para> + </warning> + + <para>Après cette modification, vous ne devrez uniquement + que modifier une des tables NIS si un nouvel employé + rejoint le département IT. Vous pourrez utiliser une + approche similaire pour les serveurs moins importants en + remplaçant l'ancienne ligne + <literal>+:::::::::</literal> dans leur version locale de + <filename>/etc/master.passwd</filename> avec quelque chose de + semblable à ceci:</para> + + <programlisting>+@IT_EMP::::::::: ++@IT_APP::::::::: ++:::::::::/sbin/nologin</programlisting> + + <para>Les lignes correspondantes pour les stations de travail + normales seraient:</para> + + <programlisting>+@IT_EMP::::::::: ++@USERS::::::::: ++:::::::::/sbin/nologin</programlisting> + + <para>Tout était parfait jusqu'au changement de politique + quelques semaines plus tard: le département IT + commença à engager des internes. Les internes + du département IT sont autorisés à + utiliser les stations de travail normales et les serveurs les + moins importants; les apprentis du département IT sont + autorisés à ouvrir des sessions sur les serveurs + principaux. Vous ajoutez alors un nouveau groupe + réseau <literal>IT_INTERN</literal>, ajoutez les + nouveaux internes IT à ce groupe réseau et + commencez à modifier la configuration sur chaque + machine... Comme disait l'ancien: “Erreurs dans la + planification centralisée mènent à un + désordre général”.</para> + + <para>La capacité de NIS à créer des + groupes réseau à partir d'autres groupes + réseau peut être utilisée pour + éviter de telles situations. Une possibilité + est la création de groupes réseau basés + sur le rôle du groupe. Par exemple vous pourriez + créer un groupe réseau appelé + <literal>BIGSRV</literal> pour définir les restrictions + d'ouverture de session pour les serveurs importants, un autre + groupe réseau appelé <literal>SMALLSRV</literal> + pour les serveurs moins importants et un troisième + groupe réseau nommé <literal>USERBOX</literal> + pour les stations de travail normales. Chacun de ces groupes + réseau contient les groupes réseau + autorisés à ouvrir des sessions sur ces + machines. Les nouvelles entrées pour la table NIS de + groupes réseau devrait ressembler à ceci:</para> + + <programlisting>BIGSRV IT_EMP IT_APP +SMALLSRV IT_EMP IT_APP ITINTERN +USERBOX IT_EMP ITINTERN USERS</programlisting> + + <para>Cette méthode qui consiste à définir + des restrictions d'ouverture de session fonctionne + relativement bien si vous pouvez définir des groupes de + machines avec des restrictions identiques. Malheureusement, + ceci est une exception et pas une + généralité. La plupart du temps, vous + aurez besoin de définir des restrictions d'ouverture de + session par machine.</para> + + <para>La définition de groupes réseau + spécifiques aux machines est une autre + possibilité pour traiter la modification de politique + soulignée précédement. Dans ce + scénario, le fichier + <filename>/etc/master.passwd</filename> de chaque machine + contient deux lignes débutant par “+”. La + première ajoute un groupe réseau avec les + comptes autorisés à ouvrir une session sur cette + machine, la seconde ajoute tous les comptes avec + l'interpréteur de commandes + <filename>/sbin/nologin</filename>. C'est une bonne + idée d'utiliser des majuscules pour le nom de la + machine ainsi que celui du groupe réseau. Dans + d'autres termes, les lignes en question devraient être + semblables à:</para> + + <programlisting>+@<replaceable>NOMMACHINE</replaceable>::::::::: ++:::::::::/sbin/nologin</programlisting> + + <para>Une fois cette tâche achevée pour toutes vos + machines, vous n'aurez plus jamais à modifier les + versions locales du fichier + <filename>/etc/master.passwd</filename>. Tous les changements + futurs peuvent être gérés en modifiant la + table NIS. Voici un exemple d'une table de groupes + réseau possible pour ce scénario avec quelques + petits plus:</para> + + <programlisting># Définir tout d'abord les groupes d'utilisateurs +IT_EMP (,alpha,test-domain) (,beta,test-domain) +IT_APP (,charlie,test-domain) (,delta,test-domain) +DEPT1 (,echo,test-domain) (,foxtrott,test-domain) +DEPT2 (,golf,test-domain) (,hotel,test-domain) +DEPT3 (,india,test-domain) (,juliet,test-domain) +ITINTERN (,kilo,test-domain) (,lima,test-domain) +D_INTERNS (,able,test-domain) (,baker,test-domain) +# +# Définir, maintenant, des groupes basés sur les rôles +USERS DEPT1 DEPT2 DEPT3 +BIGSRV IT_EMP IT_APP +SMALLSRV IT_EMP IT_APP ITINTERN +USERBOX IT_EMP ITINTERN USERS +# +# Et un groupe pour les tâches spéciales +# Permettre à echo et golf d'accéder à notre machine anti-virus +SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) +# +# les groupes réseau basés sur un ensemble de machines +# Nos principaux serveurs +WAR BIGSRV +FAMINE BIGSRV +# L'utilisateur india a besoin d'un accès à ce serveur +POLLUTION BIGSRV (,india,test-domain) +# +# Celle-ci est très importante et nécessite plus de restrictions d'accès +DEATH IT_EMP +# +# La machine anti-virus mentionnée précédemment +ONE SECURITY +# +# Restreindre l'accès à une machine à un seul utilisateur +TWO (,hotel,test-domain) +# [...d'autres groupes suivent]</programlisting> + + <para>Si vous utilisez une sorte de base de données pour + gérer vos comptes utilisateur, vous devriez pouvoir + créer la première partie de la table avec les + outils de votre base de données. De cette + façon, les nouveaux utilisateurs auront automatiquement + accès aux machines.</para> + + <para>Dernier avertissement: il n'est pas toujours + conseillé d'utiliser des groupes réseau + basés sur les machines. Si vous déployez + quelques douzaines ou même centaines de machines + identiques pour des laboratoires pour étudiants, vous + devriez utiliser des groupes basés sur les types + d'utilisateurs plutôt que sur les machines pour + conserver la taille de la table NIS dans des limites + raisonables.</para> + </sect2> + + <sect2> + <title>Les choses importantes à ne pas oublier</title> + + <para>Il y a un certain nombre de choses que vous devrez + effectuer différement maintenant que vous êtes + dans un environnement NIS.</para> + + <itemizedlist> + <listitem> + <para>A chaque fois que vous désirez ajouter un + utilisateur au laboratoire, vous devez l'ajouter + <emphasis>uniquement</emphasis> sur le serveur NIS et + <emphasis>vous devez ne pas oublier de reconstruire les + tables NIS</emphasis>. Si vous oubliez de le faire, le + nouvel utilisateur ne pourra pas ouvrir de session en dehors + du serveur maître NIS. Par exemple, si nous devons + ajouter au laboratoire un nouvel utilisateur + <username>jsmith</username>, nous ferions:</para> + + <screen>&prompt.root; <userinput>pw useradd jsmith</userinput> +&prompt.root; <userinput>cd /var/yp</userinput> +&prompt.root; <userinput>make test-domain</userinput></screen> + + <para>Vous pouvez lancer <command>adduser jsmith</command> + à la place de <command>pw useradd + jsmith</command>.</para> + </listitem> + <listitem> + <para><emphasis>Conservez les comptes d'administration en + dehors des tables NIS</emphasis>. Vous ne voulez pas + propager les comptes et mots de passe d'administration sur + les machines qui auront des utilisateurs qui ne devraient + pas avoir accès à ces comptes.</para> + </listitem> + <listitem> + <para><emphasis>Sécurisez les serveurs maître + et esclave NIS, et reduisez leur temps + d'arrêt</emphasis>. Si quelqu'un tente soit + d'attaquer soit de simplement arrêter ces machines, de + nombreuses personnes ne pourront plus ouvrir de session dans + le laboratoire.</para> + + <para>C'est la principale faiblesse d'un système + d'administration centralisée. Si vous ne + protégez pas vos serveurs NIS, vous aurez à + faire face à de nombreux utilisateurs + mécontents!</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2> + <title>Compatibilité NIS version 1</title> + + <para><application>ypserv</application> sous &os; offre un + support des clients NIS version 1. L'implémentation + NIS de &os; utilise uniquement le protocole NIS version 2, + cependant d'autres implémentations disposent du support + pour le protocole version 1 pour des raisons de + compatibilité avec d'anciens systèmes. Les + “daemons” <application>ypbind</application> + fournis avec ces systèmes tenteront de s'attacher + à un serveur NIS version 1 même s'ils n'en ont + pas besoin (et ils pourront continuer à diffuser des + requêtes pour en trouver un même après + avoir reçu une réponse d'un serveur NIS version + 2). Notez que bien que les requêtes des clients normaux + soient supportées, cette version + d'<application>ypserv</application> ne supporte pas les + requêtes de tranfert de tables version 1; par + conséquent il n'est pas possible de l'utiliser comme + serveur maître ou esclave avec des serveurs NIS plus + anciens qui ne supportent que la version 1 du protocole. + Heureusement, il n'y a, aujourd'hui, presque plus de serveurs + de ce type actifs.</para> + </sect2> + + <sect2 id="network-nis-server-is-client"> + <title>Serveurs NIS qui sont aussi des clients NIS</title> + + <para>Il faut faire attention quand on utilise + <application>ypserv</application> dans un domaine avec + plusieurs serveurs NIS qui sont également des clients + NIS. Il est en général préférable + de forcer les serveurs de se rattacher à + eux-mêmes plutôt que de les laisser diffuser des + requêtes de rattachement et eventuellement se rattacher + réciproquement les uns aux autres. Il peut en + résulter de curieux problèmes si l'un des + serveurs tombe et que d'autres en dépendent. Tous les + clients finiront par dépasser leur délai + d'attente et se tenteront de se rattacher à d'autres + serveurs, mais ce délai peut être + considérable et le problème persistera puisque + les serveurs peuvent à nouveau se rattacher les uns aux + autres.</para> + + <para>Vous pouvez obliger une machine à se rattacher + à un serveur particulier en exécutant + <command>ypbind</command> avec l'option <option>-S</option>. + Si vous ne désirez pas faire cela à la main + à chaque fois que vous redémarrez votre serveur + NIS, vous pouvez ajouter les lignes quivantes à votre + fichier <filename>/etc/rc.conf</filename>:</para> + + <programlisting>nis_client_enable="YES" # run client stuff as well +nis_client_flags="-S <replaceable>NIS domain</replaceable>,<replaceable>server</replaceable>"</programlisting> + + <para>Voir la page de manuel de &man.ypbind.8; pour plus + d'informations.</para> + </sect2> + + <sect2> + <title>Formats des mots de passe</title> + <indexterm> + <primary>NIS</primary> + <secondary>formats des mots de passe</secondary> + </indexterm> + <para>Un des problèmes les plus courants que l'on + rencontre en mettant en oeuvre NIS est celui de la + compatibilité des formats de mots de passe. Si votre + serveur NIS utilise des mots de passe chiffrés avec + l'algorithme DES, il ne supportera que les clients utilisant + également DES. Par exemple, si vous avez des client NIS + &solaris; sur votre réseau, alors vous aurez presque + certainement besoin d'utiliser des mots de passe chiffrés + avec le système DES.</para> + + <para>Pour déterminer quel format vos serveurs et clients + utilisent, consultez le fichier + <filename>/etc/login.conf</filename>. Si la machine est + configurée pour utiliser des mots de passe + chiffrés avec DES, alors la classe + <literal>default</literal> contiendra une entrée comme + celle-ci:</para> + + <programlisting>default:\ + :passwd_format=des:\ + :copyright=/etc/COPYRIGHT:\ + [Entrées suivantes omises]</programlisting> + + <para>D'autres valeurs possibles pour la capacité + <literal>passwd_format</literal> sont <literal>blf</literal> + et <literal>md5</literal> (respectivement pour les chiffrages + de mots de passe Blowfish et MD5).</para> + + <para>Si vous avez modifié le fichier + <filename>/etc/login.conf</filename>, vous devrez + également regénérer la base de + données des capacités de classes de session, ce + qui est accompli en exécutant la commande suivante en + tant que <username>root</username>:</para> + + <screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen> + + <note><para>Le format des mots de passe utilisés dans + <filename>/etc/master.passwd</filename> ne sera pas mis + à jour avant qu'un utilisateur ne change son mot de + passe pour la première fois + <emphasis>après</emphasis> la + regénération de la base de données des + capacités de classes de session.</para></note> + + <para>Ensuite, afin de s'assurer que les mots de passe sont + chiffrés avec le format que vous avez choisi, vous + devez vérifier que l'entrée + <literal>crypt_default</literal> dans le fichier + <filename>/etc/auth.conf</filename> donne la priorité + au format de mots de passe choisi. Par exemple, quand les + mots de passe DES sont utilisés, l'entrée + serait:</para> + + <programlisting>crypt_default = des blf md5</programlisting> + + <para>En suivant les points précédents sur chaque + serveur et client NIS sous &os;, vous pouvez être + sûr qu'ils seront tous d'accord sur le format de mot de + passe utilisé dans le réseau. Si vous avez des + problèmes d'authentification sur un client NIS, c'est + probablement la première chose à + vérifier. Rappelez-vous: si vous désirez mettre + en place un serveur NIS pour un réseau + hétérogène, vous devrez probablement + utiliser DES sur tous les systèmes car c'est le + standard le plus courant.</para> + </sect2> + </sect1> + + <sect1 id="network-dhcp"> + <sect1info> + <authorgroup> + <author> + <firstname>Greg</firstname> + <surname>Sutter</surname> + <contrib>Ecrit par </contrib> + </author> + </authorgroup> + </sect1info> + <title>DHCP</title> + + <sect2> + <title>Qu'est-ce que DHCP?</title> + <indexterm> + <primary>Dynamic Host Configuration Protocol</primary> + <see>DHCP</see> + </indexterm> + <indexterm> + <primary>Internet Software Consortium (ISC)</primary> + </indexterm> + + <para>DHCP, le protocole d'attribution dynamique des adresses + (“Dynamic Host Configuration Protocol”), + décrit les moyens par lesquels un système peut + se connecter à un réseau et obtenir les + informations nécessaires pour dialoguer sur ce + réseau. &os; utilise l'implémentaion DHCP de + l'ISC (Internet Software Consortium), aussi toutes les + informations spécifiques à + l'implémentation, ici, concernent la version + distribuée par l'ISC.</para> + </sect2> + + <sect2> + <title>Ce que traite cette section</title> + + <para>Cette section décrit les composants + côté client et côté serveur du + système DHCP ISC. Le programme client, + <command>dhclient</command>, est intégré + à &os;, la partie serveur est disponible à + partir du logiciel porté <filename + role="package">net/isc-dhcp3-server</filename>. Les pages de + manuel &man.dhclient.8;, &man.dhcp-options.5;, et + &man.dhclient.conf.5;, en plus des références + données plus bas, sont des ressources utiles.</para> + </sect2> + + <sect2> + <title>Comment cela fonctionne-t-il?</title> + <indexterm><primary>UDP</primary></indexterm> + + <para>Quand <command>dhclient</command>, le client DHCP, est + exécuté sur la machine cliente, il commence + à diffuser des requêtes de demandes d'information + de configuration. Par défaut, ces requêtes sont + effectuées sur le port UDP 68. Le serveur + répond sur le port UDP 67, fournissant au client une + adresse IP et d'autres informations réseau importantes + comme le masque de sous-réseau, les routeurs, et les + serveurs DNS. Toutes ces informations viennent sous la forme + d'un “bail” DHCP qui est uniquement valide pendant + un certain temps (configuré par l'administrateur du + serveur DHCP). De cette façon, les adresses IP + expirées pour les clients qui ne sont plus + connectés peuvent être automatiquement + récupérées.</para> + + <para>Les clients DHCP peuvent obtenir une grande + quantité d'informations à partir du serveur. + Une liste eshaustive est donnée dans la page de manuel + &man.dhcp-options.5;.</para> + </sect2> + + <sect2> + <title>Intégration dans &os;</title> + + <para>Le client DHCP ISC, <command>dhclient</command>, est + complètement intégré à &os;. Le + support du client DHCP est fourni avec l'installeur et le + système de base, rendant évident le besoin d'une + connaissance détaillée des configurations + réseaux pour n'importe quel réseau utilisant un + serveur DHCP. <command>dhclient</command> fait partie de + toutes les versions de &os; depuis la version 3.2.</para> + <indexterm> + <primary><application>sysinstall</application></primary> + </indexterm> + + <para>DHCP est supporté par + <application>sysinstall</application>. Quand on configure une + interface réseau sous + <application>sysinstall</application>, la première + question posée est: “Voulez-vous tenter la + configuration DHCP de cette interface?”. + Répondre par l'affirmative à cette question + lancera <command>dhclient</command>, et en cas de + succès, complètera automatiquement les + informations de configuration réseau.</para> + + <para>Vous devez faire deux choses pour que votre système + utilise DHCP au démarrage:</para> + <indexterm> + <primary>DHCP</primary> + <secondary>prérequis</secondary> + </indexterm> + + <itemizedlist> + <listitem> + <para>Assurez-vous que le périphérique + <devicename>bpf</devicename> est compilé dans votre + noyau. Pour cela, vous devez ajouter la ligne + <literal>device bpf</literal> (<literal>pseudo-device + bpf</literal> sous &os; 4.X) à votre fichier + de configuration du noyau, et recompiler le noyau. Pour + plus d'informations sur la compilation de noyaux, + consultez le <xref linkend="kernelconfig">.</para> + + <para>Le périphérique + <devicename>bpf</devicename> est déjà + présent dans le noyau <filename>GENERIC</filename> + qui est fourni avec &os;, vous ne devez donc pas + créer de noyau spécifique pour faire + fonctionner DHCP.</para> + + <note> + <para>Ceux qui sont particulièrement conscients de + l'aspect sécurité devraient noter que + <devicename>bpf</devicename> est également le + périphérique qui permet le fonctionnement de + “renifleurs” de paquets (de tels programmes + doivent être lancés sous l'utilisateur + <username>root</username>). <devicename>bpf</devicename> + <emphasis>est</emphasis> nécessaire pour utiliser + DHCP, mais si vous êtes très sensible + à la sécurité, vous ne devriez + probablement pas ajouter <devicename>bpf</devicename> + à votre noyau parce que vous projetez d'utiliser + DHCP dans le futur.</para> + </note> + </listitem> + <listitem> + <para>Editez votre fichier <filename>/etc/rc.conf</filename> + pour y ajouter ce qui suit:</para> + + <programlisting>ifconfig_fxp0="DHCP"</programlisting> + + <note> + <para>Assurez-vous de bien remplacer + <literal>fxp0</literal> par l'interface que vous voulez + configurer de façon dynamique comme décrit + dans la <xref linkend="config-network-setup">.</para> + </note> + + <para>Si vous utilisez un emplacement différent pour + <command>dhclient</command>, ou si vous désirez + passer des arguments supplémentaires à + <command>dhclient</command>, ajoutez ce qui suit (en + effectuant des modifications si nécessaire):</para> + + <programlisting>dhcp_program="/sbin/dhclient" +dhcp_flags=""</programlisting> + </listitem> + </itemizedlist> + + <indexterm> + <primary>DHCP</primary> + <secondary>serveur</secondary> + </indexterm> + <para>Le serveur DHCP, <application>dhcpd</application>, fait + partie du logiciel porté <filename + role="package">net/isc-dhcp3-server</filename> disponible dans + le catalogue des logiciels portés. Ce logiciel + porté contient le serveur DHCP ISC et sa + documentation.</para> + </sect2> + + <sect2> + <title>Fichiers</title> + <indexterm> + <primary>DHCP</primary> + <secondary>fichiers de configuration</secondary> + </indexterm> + <itemizedlist> + <listitem><para><filename>/etc/dhclient.conf</filename></para> + <para><command>dhclient</command> nécessite un + fichier de configuration, + <filename>/etc/dhclient.conf</filename>. + Généralement le fichier ne contient que des + commentaires, les valeurs par défaut étant + suffisantes. Ce fichier de configuration est décrit + par la page de manuel &man.dhclient.conf.5;.</para> + </listitem> + + <listitem><para><filename>/sbin/dhclient</filename></para> + <para><command>dhclient</command> est lié + statiquement et réside dans le répertoire + <filename role="directory">/sbin</filename>. La page de + manuel &man.dhclient.8; donne beaucoup plus d'informations + au sujet de <command>dhclient</command>.</para> + </listitem> + + <listitem><para><filename>/sbin/dhclient-script</filename></para> + <para><command>dhclient-script</command> est la + procédure de configuration du client DHCP + spécifique à &os;. Elle est décrite + dans la page de manuel &man.dhclient-script.8;, mais ne + devrait pas demander de modification de la part de + l'utilisateur pour fonctionner correctement.</para> + </listitem> + + <listitem><para><filename>/var/db/dhclient.leases</filename></para> + <para>Le client DHCP conserve une base de données des + baux valides, qui est écrite comme un fichier + journal. La page de manuel &man.dhclient.leases.5; en donne + une description légèrement plus longue.</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2> + <title>Lecture supplémentaire</title> + + <para>Le protocole DHCP est intégralement décrit + dans la <ulink url="http://www.freesoft.org/CIE/RFC/2131/">RFC + 2131</ulink>. Des informations sont également + disponibles à l'adresse <ulink + url="http://www.dhcp.org/">dhcp.org</ulink>.</para> + </sect2> + + <sect2 id="network-dhcp-server"> + <title>Installer et configurer un serveur DHCP</title> + + <sect3> + <title>Ce que traite cette section</title> + + <para>Cette section fournit les informations + nécessaires à la configuration d'un + système &os; comme serveur DHCP en utilisant + l'implémentation ISC (Internet Software Consortium) + de l'ensemble DHCP.</para> + + <para>La partie serveur n'est pas fournie dans le + système de base de &os;, et vous devrez installer + le logiciel porté <filename + role="package">net/isc-dhcp3-server</filename> pour + bénéficier de ce service. Lisez le <xref + linkend="ports"> pour plus d'information sur l'utilisation + du catalogue des logiciels portés.</para> + </sect3> + + <sect3> + <title>Installation d'un serveur DHCP</title> + <indexterm> + <primary>DHCP</primary> + <secondary>installation</secondary> + </indexterm> + + <para>Afin de configurer votre système &os; en + serveur DHCP, vous devrez vous assurer que le support du + périphérique &man.bpf.4; est compilé + dans votre noyau. Pour cela ajouter la ligne + <literal>device bpf</literal> (<literal>pseudo-device + bpf</literal> sous &os; 4.X) dans votre fichier de + configuration du noyau. Pour plus d'information sur la + compilation de noyaux, consultez le <xref + linkend="kernelconfig">.</para> + + <para>Le périphérique + <devicename>bpf</devicename> est déjà + présent dans le noyau <filename>GENERIC</filename> + qui est fourni avec &os;, vous ne devez donc pas + créer de noyau spécifique pour faire + fonctionner DHCP.</para> + + <note> + <para>Ceux qui sont particulièrement conscients de + l'aspect sécurité devraient noter que + <devicename>bpf</devicename> est également le + périphérique qui permet le fonctionnement de + “renifleurs” de paquets (de tels programmes + nécessitent également un accès avec + privilèges). <devicename>bpf</devicename> + <emphasis>est</emphasis> nécessaire pour utiliser + DHCP, mais si vous êtes très sensible + à la sécurité, vous ne devriez + probablement pas ajouter <devicename>bpf</devicename> + à votre noyau parce que vous projetez d'utiliser + DHCP dans le futur.</para> + </note> + + <para>Il vous reste ensuite à éditer le + fichier <filename>dhcpd.conf</filename> d'exemple qui a + été installé par le logiciel + porté <filename + role="package">net/isc-dhcp3-server</filename>. Par + défaut, cela sera + <filename>/usr/local/etc/dhcpd.conf.sample</filename>, et + vous devriez le copier vers + <filename>/usr/local/etc/dhcpd.conf</filename> avant de + commencer vos modifications.</para> + </sect3> + + <sect3> + <title>Configuration du serveur DHCP</title> + <indexterm> + <primary>DHCP</primary> + <secondary>dhcpd.conf</secondary> + </indexterm> + + <para><filename>dhcpd.conf</filename> est composé de + déclarations concernant les masques de + sous-réseaux et les machines, il est + peut-être plus facile à expliquer à + l'aide d'un exemple:</para> + + <programlisting>option domain-name "example.com";<co id="domain-name"> +option domain-name-servers 192.168.4.100;<co id="domain-name-servers"> +option subnet-mask 255.255.255.0;<co id="subnet-mask"> + +default-lease-time 3600;<co id="default-lease-time"> +max-lease-time 86400;<co id="max-lease-time"> +ddns-update-style none;<co id="ddns-update-style"> + +subnet 192.168.4.0 netmask 255.255.255.0 { + range 192.168.4.129 192.168.4.254;<co id="range"> + option routers 192.168.4.1;<co id="routers"> +} + +host mailhost { + hardware ethernet 02:03:04:05:06:07;<co id="hardware"> + fixed-address mailhost.example.com;<co id="fixed-address"> +}</programlisting> + + <calloutlist> + <callout arearefs="domain-name"> + <para>Cette option spécifie le domaine qui sera + donné aux clients comme domaine par + défaut. Consultez la page de manuel de + &man.resolv.conf.5; pour plus d'information sur sa + signification.</para> + </callout> + + <callout arearefs="domain-name-servers"> + <para>Cette option donne une liste, + séparée par des virgules, de serveurs DNS + que le client devrait utiliser.</para> + </callout> + + <callout arearefs="subnet-mask"> + <para>Le masque de sous-réseau qui sera fourni + aux clients.</para> + </callout> + + <callout arearefs="default-lease-time"> + <para>Un client peut demander un bail d'une durée + bien précise. Sinon par défaut le serveur + alloue un bail avec cette durée avant expiration + (en secondes).</para> + </callout> + + <callout arearefs="max-lease-time"> + <para>C'est la durée maximale d'allocation + autorisée par le serveur. Si un client demande + un bail plus long, le bail sera accordé mais il + ne sera valide que durant + <literal>max-lease-time</literal> secondes.</para> + </callout> + + <callout arearefs="ddns-update-style"> + <para>Cette option indique si le serveur DHCP doit + tenter de mettre à jour le DNS quand un bail + est accepté ou révoqué. Dans + l'implémentation ISC, cette option est + <emphasis>obligatoire</emphasis>.</para> + </callout> + + <callout arearefs="range"> + <para>Ceci indique quelles adresses IP devraient + être utilisées dans l'ensemble des adresses + réservées aux clients. Les adresses + comprises dans l'intervalle spécifiée sont + allouées aux clients.</para> + </callout> + + <callout arearefs="routers"> + <para>Définit la passerelle par défaut + fournie aux clients.</para> + </callout> + + <callout arearefs="hardware"> + <para>L'adresse matérielle MAC d'une machine (de + manière à ce que le serveur DHCP puisse + reconnaître une machine quand elle envoie une + requête).</para> + </callout> + + <callout arearefs="fixed-address"> + <para>Indique que la machine devrait se voir attribuer + toujours la même adresse IP. Notez que + l'utilisation d'un nom de machine ici est correct, + puisque le serveur DHCP effectuera une + résolution de nom sur le nom de la machine + avant de renvoyer l'information sur le bail.</para> + </callout> + </calloutlist> + + <para>Une fois l'écriture de votre fichier + <filename>dhcpd.conf</filename> terminée, vous + pouvez lancer le serveur en tapant la commande + suivante:</para> + + <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/isc-dhcpd.sh start</userinput></screen> + + <para>Si vous devez, dans le futur, effectuer des + changements dans la configuration de votre serveur, il est + important de savoir que l'envoi d'un signal + <literal>SIGHUP</literal> à + <application>dhcpd</application> ne provoque + <emphasis>pas</emphasis> le rechargement de la + configuration, contrairement à la plupart des + “daemons”. Vous devrez envoyer un signal + <literal>SIGTERM</literal> pour arrêter le + processus, puis le relancer en utilisant la commande + ci-dessus.</para> + </sect3> + + <sect3> + <title>Fichiers</title> + <indexterm> + <primary>DHCP</primary> + <secondary>fichier de configuration</secondary> + </indexterm> + <itemizedlist> + <listitem><para><filename>/usr/local/sbin/dhcpd</filename></para> + <para><application>dhcpd</application> est lié + statiquement et réside dans le répertoire + <filename role="directory">/usr/local/sbin</filename>. + La page de manuel &man.dhcpd.8; installée avec le + logiciel porté donne beaucoup plus d'informations + au sujet de <application>dhcpd</application>.</para> + </listitem> + + <listitem><para><filename>/usr/local/etc/dhcpd.conf</filename></para> + <para><application>dhcpd</application> nécessite + un fichier de configuration, + <filename>/usr/local/etc/dhcpd.conf</filename> avant de + pouvoir commencer à offrir ses services aux + client. Ce fichier doit contenir toutes les + informations à fournir aux clients qui seront + traités, en plus des informations concernant le + fonctionnement du serveur. Ce fichier de configuration + est décrit par la page de manuel + &man.dhcpd.conf.5; installée par le logiciel + porté.</para> + </listitem> + + <listitem><para><filename>/var/db/dhcpd.leases</filename></para> + + <para>Le serveur DHCP conserve une base de + données des baux qu'il a délivré, + qui est écrite comme un fichier journal. La page + de manuel &man.dhcpd.leases.5; installée par le + logiciel porté en donne une description + légèrement plus longue.</para> + </listitem> + + <listitem><para><filename>/usr/local/sbin/dhcrelay</filename></para> + <para><application>dhcrelay</application> est + utilisé dans les environements avancés + où un serveur DHCP fait suivre la requête + d'un client vers un autre serveur DHCP sur un + réseau séparé. Si vous avez besoin + de cette fonctionnalité, installez alors le + logiciel porté <filename + role="package">net/isc-dhcp3-server</filename>. La page + de manuel &man.dhcrelay.8; fournie avec le logiciel + porté contient plus de détails.</para> + </listitem> + </itemizedlist> + </sect3> + </sect2> + </sect1> + + <sect1 id="network-dns"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Contribution de </contrib> + </author> + </authorgroup> + </sect1info> + <title>DNS</title> + + <sect2> + <title>Généralités</title> + <indexterm><primary>BIND</primary></indexterm> + + <para>&os; utilise, par défaut, BIND (Berkeley Internet + Name Domain), qui est l'implémentation la plus courante + du protocole DNS. Le DNS est le protocole qui effectue la + correspondance entre noms et adresses IP, et inversement. Par + exemple une requête pour <hostid + role="fqdn">www.FreeBSD.org</hostid> aura pour réponse + l'adresse IP du serveur Web du projet &os;, et une + requête pour <hostid + role="fqdn">ftp.FreeBSD.org</hostid> renverra l'adresse IP de + la machine FTP correspondante. De même, l'opposé + est possible. Une requête pour une adresse IP retourne + son nom de machine. Il n'est pas nécessaire de faire + tourner un serveur DNS pour effectuer des requêtes DNS + sur un système.</para> + + <indexterm><primary>DNS</primary></indexterm> + <para>Le DNS est coordonné sur l'Internet à + travers un système complexe de serveurs de noms racines + faisant autorité, et d'autres serveurs de noms de plus + petites tailles qui hébergent, directement ou font office + de “cache”, l'information pour des domaines + individuels.</para> + + <para>Ce document fait référence à BIND + 8.x, comme c'est la version stable utilsée dand &os;. + BIND 9.x peut être installée à l'aide du + logiciel porté <filename + role="package">net/bind9</filename>.</para> + + <para>Les RFC1034 et RFC1035 régissent le protocole + DNS.</para> + + <para>Actuellement, BIND est maintenu par l'<ulink + url="http://www.isc.org/">Internet Software Consortium + (www.isc.org)</ulink>.</para> + </sect2> + + <sect2> + <title>Terminologie</title> + + <para>Pour comprendre ce document, certains termes relatifs + au DNS doivent être maîtrisés.</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <colspec colwidth="1*"> + <colspec colwidth="3*"> + + <thead> + <row> + <entry>Terme</entry> + <entry>Definition</entry> + </row> + </thead> + + <tbody> + <row> + <entry>“Forward“ DNS</entry> + <entry>Correspondance noms de machine vers adresses + IP.</entry> + </row> + + <row> + <entry>Origine</entry> + <entry>Fait référence au domaine couvert + par un fichier de zone particulier.</entry> + </row> + + <row> + <entry><application>named</application>, BIND, serveur + de noms</entry> + <entry>Noms courants pour le serveur de noms BIND de + &os;</entry> + </row> + + <indexterm><primary>resolveur</primary></indexterm> + <row> + <entry>Resolveur</entry> + <entry>Un processus système par + l'intermédiaire duquel une machine contacte un + serveur de noms pour obtenir des informations sur une + zone.</entry> + </row> + + <indexterm><primary>DNS inverse</primary></indexterm> + <row> + <entry>DNS inverse</entry> + <entry>C'est l'inverse du DNS “classique” + (“Forward“ DNS). C'est la correspondance + adresses IP vers noms de machine.</entry> + </row> + + <indexterm><primary>zone racine</primary></indexterm> + <row> + <entry>Zone racine</entry> + + <entry>Début de la hiérarchie de la zone + Internet. Toutes les zones sont rattachées + à la zone racine, de la même + manière qu'un système de fichier est + rattaché au répertoire racine.</entry> + </row> + + <row> + <entry>Zone</entry> + <entry>Un domaine individuel, un sous-domaine, ou une + partie des noms administrés par un même + serveur faisant autorité.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <indexterm> + <primary>zones</primary> + <secondary>exemples</secondary> + </indexterm> + + <para>Exemples de zones:</para> + + <itemizedlist> + <listitem> + <para><hostid>.</hostid> est la zone racine</para> + </listitem> + <listitem> + <para><hostid>org.</hostid> est une zone sous la + zone racine</para> + </listitem> + <listitem> + <para><hostid role="domainname">example.org</hostid> est une + zone sous la zone <hostid>org.</hostid></para> + </listitem> + <listitem> + <para><hostid role="domainname">foo.example.org.</hostid> + est un sous-domaine, une zone sous la zone <hostid + role="domainname">example.org.</hostid></para> + </listitem> + <listitem> + <para> + <hostid>1.2.3.in-addr.arpa</hostid> est une zone faisant + référence à toutes les adresses IP + qui appartiennent l'espace d'adresse <hostid + role="ipaddr">3.2.1.*</hostid>.</para> + </listitem> + </itemizedlist> + + <para>Comme on peut le remarquer, la partie la plus + significative d'un nom de machine est à sa gauche. Par + exemple, <hostid role="domainname">example.org.</hostid> est + plus spécifique que <hostid>org.</hostid>, comme + <hostid>org.</hostid> est à son tour plus + spécifique que la zone racine. La constitution de + chaque partie d'un nom de machine est proche de celle d'un + système de fichiers: le répertoire <filename + role="directory">/dev</filename> se trouve sous la racine, et + ainsi de suite.</para> + </sect2> + + <sect2> + <title>Les raisons de faire tourner un serveur de noms</title> + + <para>Les serveurs de noms se présentent + généralement sous deux formes: un serveur de + noms faisant autorité, et un serveur de noms + cache.</para> + + <para>Un serveur de noms faisant autorité est + nécessaire quand:</para> + + <itemizedlist> + <listitem> + <para>on désire fournir des informations DNS au reste + du monde, être le serveur faisant autorité lors + des réponses aux requêtes.</para> + </listitem> + <listitem> + <para>un domaine, comme par exemple + <hostid role="domainname">example.org</hostid>, est + enregistré et des adresses IP doivent être + assignées à des noms de machine appartenant + à ce domaine.</para> + </listitem> + <listitem> + <para>un bloc d'adresses IP nécessite des + entrées DNS inverses (IP vers nom de machine).</para> + </listitem> + <listitem> + <para>un serveur de noms de secours, appelé esclave, + doit répondre aux requêtes quand le serveur + primaire est tombé ou inaccessible.</para> + </listitem> + </itemizedlist> + + <para>Un serveur de noms cache est nécessaire + quand:</para> + + <itemizedlist> + <listitem> + <para>un serveur de noms local peut faire office de cache + et répondre plus rapidement que l'interrogation + d'un serveur de noms extérieur.</para> + </listitem> + <listitem> + <para>une réduction du trafic réseau global + est désirée (il a été + mesuré que 5% ou plus du trafic Internet total + concerne le trafic DNS).</para> + </listitem> + </itemizedlist> + + <para>Quand on émet des requêtes pour <hostid + role="fqdn">www.FreeBSD.org</hostid>, le résolveur + interroge généralement le serveur de noms du + fournisseur d'accès, et récupère la + réponse. Avec un serveur DNS cache local, la + requête doit être effectuée qu'une seule + fois vers le monde extérieur par le serveur DNS cache. + Chaque interrogation suivante n'aura pas à être + transmise en dehors du réseau local, puisque + l'information est désormais disponible localement dans + le cache.</para> + </sect2> + + <sect2> + <title>Comment cela fonctionne-t-il?</title> + + <para>Sous &os; le “daemon” BIND est appelé + <application>named</application> pour des raisons + évidentes.</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Fichier</entry> + <entry>Description</entry> + </row> + </thead> + + <tbody> + <row> + <entry><application>named</application></entry> + <entry>le “daemon” BIND</entry> + </row> + + <row> + <entry><command>ndc</command></entry> + <entry>le programme de contrôle du + “daemon”</entry> + </row> + + <row> + <entry><filename + role="directory">/etc/namedb</filename></entry> + <entry>répertoire où se trouvent les + informations sur les zones de BIND</entry> + </row> + + <row> + <entry><filename>/etc/namedb/named.conf</filename></entry> + <entry>le fichier de configuration du + “daemon”</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Les fichiers de zone sont généralement + stockés dans le répertoire <filename + role="directory">/etc/namedb</filename>, et contiennent les + informations concernant les zones DNS gérées par + le serveur de noms.</para> + </sect2> + + <sect2> + <title>Lancer BIND</title> + + <indexterm> + <primary>BIND</primary> + <secondary>lancement</secondary> + </indexterm> + <para>Puisque BIND est installé par défaut, sa + configuration est relativement simple.</para> + + <para>Pour s'assurer que le “daemon” + <application>named</application> est lancé au + démarrage, ajoutez la ligne suivante dans + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>named_enable="YES"</programlisting> + + <para>Pour démarrer le “daemon” manuellement + (après l'avoir configuré):</para> + + <screen>&prompt.root; <userinput>ndc start</userinput></screen> + </sect2> + + <sect2> + <title>Fichiers de configuration</title> + + <indexterm> + <primary>BIND</primary> + <secondary>fichiers de configuration</secondary> + </indexterm> + <sect3> + <title>Utilisation de + <command>make-localhost</command></title> + + <para>Assurez-vous d'effectuer:</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb</userinput> +&prompt.root; <userinput>sh make-localhost</userinput></screen> + + <para>pour générer correctement le fichier de + zone DNS inverse + <filename>/etc/namedb/localhost.rev</filename>.</para> + </sect3> + + <sect3> + <title><filename>/etc/namedb/named.conf</filename></title> + + <programlisting>// $FreeBSD$ +// +// Reportez-vous à la page de manuel named(8) pour plus de +// détails. Si vous devez configurer un serveur primaire +// assurez-vous d'avoir compris les détails épineux du +// fonctionnement du DNS. Même avec de simples erreurs, vous +// pouvez rompre la connexion entre les parties affectées, ou +// causer un important trafic Internet inutile. + +options { + directory "/etc/namedb"; + +// En plus de la clause "forwarders", vous pouvez forcer votre serveur +// de noms à ne jamais être à l'origine de +// requêtes, mais plutôt faire suivre les demandes en +// activant la ligne suivante: +// +// forward only; + +// Si vous avez accès à un serveur de noms au niveau de +// votre fournisseur d'accès, ajoutez ici son adresse IP, et +// activez la ligne ci-dessous. Cela vous permettra de +// bénéficier de son cache, réduisant ainsi le +// trafic Internet. +/* + forwarders { + 127.0.0.1; + }; +*/</programlisting> + + <para>Comme les commentaires le précisent, pour + bénéficier d'un cache en amont de votre + connexion, le paramètre <literal>forwarders</literal> + peut être activé. Dans des circonstances + normales, un serveur de noms interrogera de façon + récursive certains serveurs de noms jusqu'à + obtenir la réponse à sa requête. Avec + ce paramètre activé, votre serveur interrogera + le serveur de noms en amont (ou le serveur de noms fourni) + en premier, en bénéficiant alors de son cache. + Si le serveur en question gère beaucoup de trafic, et + est un serveur rapide, activer cette option peut en valoir + la peine.</para> + + <warning><para><hostid role="ipaddr">127.0.0.1</hostid> + ne fonctionnera <emphasis>pas</emphasis> ici. Remplacez + cette adresse IP par un serveur de noms en amont de votre + connexion.</para> + </warning> + + <programlisting> /* + * S'il y a un coupe-feu entre vous et les serveurs de noms + * avec lesquels vous voulez communiquer, vous aurez + * peut-être besoin de décommenter la directive + * query-source ci-dessous. Les versions + * précédentes de BIND lançaient des + * requêtes à partir du port 53, mais depuis la + * version 8.1, BIND utilise + * par défaut un port quelconque non + * réservé. + */ + // query-source address * port 53; + + /* + * Si exécution dans un "sandbox", vous pourrez avoir + * à indiquer un emplacement différent pour le + * fichier de sortie de la base de données. + */ + // dump-file "s/named_dump.db"; +}; + +// Note: ce qui suit sera supporté dans une future version. +/* +host { any; } { + topology { + 127.0.0.0/8; + }; +}; +*/ + +// Configurer des serveurs secondaires est plus simple et le principe +// général est présenté plus bas. +// +// Si vous activez un serveur de noms local, n'oubliez pas d'entrer +// 127.0.0.1 dans votre fichier /etc/resolv.conf de sorte que ce +// serveur soit interrogé le premier. Assurez-vous +// également de l'activer dans /etc/rc.conf. + +zone "." { + type hint; + file "named.root"; +}; + +zone "0.0.127.IN-ADDR.ARPA" { + type master; + file "localhost.rev"; +}; + +zone +"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" { + type master; + file "localhost.rev"; +}; + +// NB: N'utilisez pas les adresses IP ci-dessous, elles sont factices, +// et ne servent que pour des besoins de +// démonstration/documentation! +// +// Exemple d'entrées de configuration de serveur secondaire. +// Il peut être pratique de devenir serveur secondaire pour la +// zone à laquelle appartient votre domaine. Demandez à +// votre administrateur réseau l'adresse IP du serveur primaire +// responsable de la zone. +// +// N'oubliez jamais d'inclure la résolution de la zone inverse +// (IN-ADDR.ARPA)! +// (Ce sont les premiers octets de l'adresse IP, en ordre inverse, +// auxquels ont a ajouté ".IN-ADDR.ARPA".) +// +// Avant de commencer à configurer une zone primaire, il faut +// être sûr que vous avez parfaitement compris comment le +// DNS et BIND fonctionnent. Il apparait parfois des pièges +// peu évidents à saisir. En comparaison, configurer un +// serveur secondaire est plus simple. +// +// NB: N'activez pas aveuglément les exemples ci-dessous. :-) +// Utilisez des noms et des adresses réelles. +// +// NOTE!!! &os; exécute BIND dans un "sandbox" (voir l'option +// named_flags dans rc.conf). Le répertoire contenant les +// zones secondaires doit être accessible à BIND en +// écriture. La séquence suivante est +// suggérée: +// +// mkdir /etc/namedb/s +// chown bind:bind /etc/namedb/s +// chmod 750 /etc/namedb/s</programlisting> + + <para>Pour plus d'informations sur l'exécution de BIND + dans un “sandbox” (bac à sable), + consultez la section <link + linkend="network-named-sandbox">Exécution de named + dans un sandbox</link>. + </para> + + <programlisting>/* +zone "example.com" { + type slave; + file "s/example.com.bak"; + masters { + 192.168.1.1; + }; +}; + +zone "0.168.192.in-addr.arpa" { + type slave; + file "s/0.168.192.in-addr.arpa.bak"; + masters { + 192.168.1.1; + }; +}; +*/</programlisting> + + <para>Dans <filename>named.conf</filename>, ce sont des + exemples d'entrées d'un serveur esclave.</para> + + <para>Pour chaque nouvelle zone gérée, une + nouvelle entrée de zone doit être + ajoutée au fichier + <filename>named.conf</filename>.</para> + + <para>Par exemple, l'entrée de zone la plus simple + possible pour <hostid role="domainname">example.org</hostid> + serait:</para> + + <programlisting>zone "example.org" { + type master; + file "example.org"; +};</programlisting> + + <para>Ce sera un serveur maître pour la zone, comme + indiqué par l'option <option>type</option>, + concervant ses informations de zone dans le fichier + <filename>/etc/namedb/example.org</filename> comme + précisé par l'option + <option>file</option>.</para> + + <programlisting>zone "example.org" { + type slave; + file "example.org"; +};</programlisting> + + <para>Dans le cas d'un esclave, les informations concernant la + zone seront transférées à partir du + serveur maître pour la zone en question, et + sauvegardées dans le fichier indiqué. Si ou + lorsque le serveur maître tombe ou est inaccessible, + le serveur esclave disposera des informations de la zone + transférée et sera capable de les + diffuser.</para> + </sect3> + + <sect3> + <title>Fichiers de zone</title> + + <para>Un exemple de fichier de zone maître pour <hostid + role="domainname">example.org</hostid> (défini dans + <filename>/etc/namedb/example.org</filename>) suit:</para> + + <programlisting>$TTL 3600 + +example.org. IN SOA ns1.example.org. admin.example.org. ( + 5 ; Serial + 10800 ; Refresh + 3600 ; Retry + 604800 ; Expire + 86400 ) ; Minimum TTL + +; Serveurs DNS +@ IN NS ns1.example.org. +@ IN NS ns2.example.org. + +; Noms de machine +localhost IN A 127.0.0.1 +ns1 IN A 3.2.1.2 +ns2 IN A 3.2.1.3 +mail IN A 3.2.1.10 +@ IN A 3.2.1.30 + +; Alias +www IN CNAME @ + +; Enregistrement MX +@ IN MX 10 mail.example.org.</programlisting> + + <para>Notez que chaque nom de machine se terminant par un + “.” est un nom de machine complet, alors que + tout ce qui se termine pas par un “.” est + référencé par rapport à une + origine. Par exemple, <literal>www</literal> sera traduit + en + <literal>www.<replaceable>origine</replaceable></literal>. + Dans notre fichier de zone fictif, notre origine est + <hostid>example.org.</hostid>, donc <literal>www</literal> + sera traduit en <hostid>www.example.org.</hostid> </para> + + <para>Le format d'un fichier de zone est le suivant:</para> + + <programlisting>nom-enregistrement IN type-enregistrement valeur</programlisting> + + <indexterm> + <primary>DNS</primary> + <secondary>enregistrements</secondary> + </indexterm> + <para>Les enregistrements DNS les plus couramment + utilisés:</para> + + <variablelist> + <varlistentry> + <term>SOA</term> + + <listitem> + <para>début des données de + zone</para></listitem> + </varlistentry> + + <varlistentry> + <term>NS</term> + + <listitem> + <para>serveur de noms faisant + autorité</para></listitem> + </varlistentry> + + <varlistentry> + <term>A</term> + + <listitem><para>adresse d'une machine</para></listitem> + </varlistentry> + + <varlistentry> + <term>CNAME</term> + + <listitem><para>alias d'un nom de machine</para></listitem> + </varlistentry> + + <varlistentry> + <term>MX</term> + + <listitem> + <para>serveur de messagerie recevant le courrier + pour le domaine</para></listitem> + </varlistentry> + + <varlistentry> + <term>PTR</term> + + <listitem> + <para>un pointeur sur un nom de domaine + (utilisé dans le DNS inverse)</para></listitem> + </varlistentry> + </variablelist> + + <programlisting> +example.org. IN SOA ns1.example.org. admin.example.org. ( + 5 ; Serial + 10800 ; Refresh after 3 hours + 3600 ; Retry after 1 hour + 604800 ; Expire after 1 week + 86400 ) ; Minimum TTL of 1 day</programlisting> + + + + <variablelist> + <varlistentry> + <term><hostid role="domainname">example.org.</hostid></term> + + <listitem> + <para>le nom de domaine, également l'origine pour + ce fichier de zone.</para></listitem> + </varlistentry> + + <varlistentry> + <term><hostid role="fqdn">ns1.example.org.</hostid></term> + + <listitem> + <para>le serveur de noms primaire/faisant autorité + pour cette zone.</para></listitem> + </varlistentry> + + <varlistentry> + <term><literal>admin.example.org.</literal></term> + + <listitem> + <para>la personne responsable pour cette zone avec + le caractère “@” remplacé. + (<email>admin@example.org</email> devient + <literal>admin.example.org</literal>)</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>5</literal></term> + + <listitem> + <para>le numéro de série de ce fichier. + Celui-ci doit être incrémenté + à chaque modification du fichier de zone. De nos + jours, de nombreux administrateurs + préfèrent un format du type + <literal>aaaammjjrr</literal> pour le numéro de + série. <literal>2001041002</literal> + signifierait dernière modification le 10/04/2001, + le <literal>02</literal> indiquant que c'est la seconde + fois que ce fichier a été + révisé ce jour. Le numéro de + série est important puisqu'il indique aux + serveurs de noms esclaves pour la zone une modification + de celle-ci.</para> + </listitem> + </varlistentry> + </variablelist> + + <programlisting> +@ IN NS ns1.example.org.</programlisting> + + <para>C'est une entrée de type NS. Tous les serveurs + de noms qui doivent faire autorité pour la zone + devront inclure une de ces entrées. Le + caractère <literal>@</literal> aurait pu être + remplacé par <hostid + role="domainname">example.org.</hostid>. Le + caractère <literal>@</literal> étant + équivalent à l'origine.</para> + + <programlisting> +localhost IN A 127.0.0.1 +ns1 IN A 3.2.1.2 +ns2 IN A 3.2.1.3 +mail IN A 3.2.1.10 +@ IN A 3.2.1.30</programlisting> + + <para>Un enregistrement de type A indique des noms de machine. + Comme présenté ci-dessus <hostid + role="fqdn">ns1.example.org</hostid> sera résolu en + <hostid role="ipaddr">3.2.1.2</hostid>. Ici encore, le + symbôle d'origine, <literal>@</literal>, signifie que + <hostid>example.org</hostid> donnera pour résolution + d'adresse l'adresse <hostid + role="ipaddr">3.2.1.30</hostid>.</para> + + <programlisting> +www IN CNAME @</programlisting> + + <para>L'enregistrement de type CNAME est + généralement utilisé pour créer + des alias à une machine. Dans l'exemple, + <hostid>www</hostid> est un alias de la machine + correspondant à l'origine, ou encore <hostid + role="domainname">example.org</hostid> (<hostid + role="ipaddr">3.2.1.30</hostid>). Les enregistrements CNAME + peuvent être utilisés pour fournir des alias + à des noms de machines, ou permettre la rotation + (“round robin”) d'un nom de machine entre + plusieurs machines.</para> + + <indexterm> + <primary>MX record</primary> + </indexterm> + + <programlisting> +@ IN MX 10 mail.example.org.</programlisting> + + <para>L'enregistrement MX indique quels serveurs de messagerie + sont responsables de la gestion du courrier entrant pour la + zone. <hostid role="fqdn">mail.example.org</hostid> est le + nom de machine du serveur de messagerie, et 10 étant + la priorité du serveur de messagerie.</para> + + <para>On peut avoir plusieurs serveurs de messagerie, avec des + priorités de 3, 2, 1. Un serveur de messagerie + tentant de transmettre du courrier au domaine <hostid + role="domainname">example.org</hostid> essaiera en premier + le MX avec la plus haute priorité, puis celui venant + en second, etc, jusqu'à ce que le courrier puisse + être correctement délivré.</para> + + <para>Pour les fichiers de zone in-addr.arpa (DNS inverse), le + même format est utilisé, à l'exception + du fait que des entrées PTR seront utilisées + en place de A ou CNAME.</para> + + <programlisting>$TTL 3600 + +1.2.3.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( + 5 ; Serial + 10800 ; Refresh + 3600 ; Retry + 604800 ; Expire + 3600 ) ; Minimum + +@ IN NS ns1.example.org. +@ IN NS ns2.example.org. + +2 IN PTR ns1.example.org. +3 IN PTR ns2.example.org. +10 IN PTR mail.example.org. +30 IN PTR example.org.</programlisting> + + <para>Ce fichier donne la correspondance entre adresses IP et + noms de machines de notre domaine fictif.</para> + </sect3> + </sect2> + + <sect2> + <title>Serveur de noms cache</title> + <indexterm> + <primary>BIND</primary> + <secondary>serveur de noms cache</secondary> + </indexterm> + <para>Un serveur de noms cache est un serveur de noms qui ne + fait autorité pour aucune zone. Il émet + simplement des requêtes, et se souvient du résultat + pour une utilisation ultérieure. Pour mettre en place un + tel serveur, configurez le serveur de noms comme à + l'accoutumé, en prenant bien soin de n'inclure aucune + zone.</para> + </sect2> + + <sect2 id="network-named-sandbox"> + <title>Exécution <application>named</application> dans un + “sandbox”</title> + <indexterm> + <primary>BIND</primary> + <secondary>exécution dans un sandbox</secondary> + </indexterm> + + <indexterm> + <primary><command>chroot</command></primary> + </indexterm> + <para>Pour plus de sécurité, il peut être + préférable d'exécuter &man.named.8; sous un + utilisateur sans privilèges, et le configurer pour + modifier l'emplacement de la racine du système de + fichiers (&man.chroot.8;) vers le répertoire du + “sandbox” (bac à sable). Ceci rend + inaccessible au “daemon” + <application>named</application> tout ce qui est situé en + dehors de l'environnement “sandbox”. Si + <application>named</application> est compromis, cela + réduira l'impact des dommages. Par défaut, &os; + dispose d'un utilisateur et d'un groupe appelé + <groupname>bind</groupname>, destiné à cet + usage.</para> + + <note> + <para>De nombreuses personnes recommanderont qu'à la + place de configurer <application>named</application> à + “chrooter”, vous devriez exécuter + <application>named</application> dans un environnement + &man.jail.8;. Cette section ne traitera pas ce cas de + figure.</para> + </note> + + <para>Puisque <application>named</application> ne sera pas en + mesure d'avoir accès à des + éléments extérieur au + “sandbox” (comme aux bibliothèques + partagées, aux “sockets” pour + l'enregistrements des journaux, etc.), il y a un certain + nombre d'étapes à suivre afin de permettre + à <application>named</application> un fonctionnement + correct. Dans la liste d'opérations qui suit, on + suppose que l'emplacement du “sandbox” est + <filename role="directory">/etc/namedb</filename> et que vous + n'avez pas précédemment modifié le + contenu de ce répertoire. Effectuez les étapes + suivantes en tant que <username>root</username>:</para> + + <itemizedlist> + <listitem> + <para>Créer tous les répertoires que + <application>named</application> s'attend à + trouver:</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb</userinput> +&prompt.root; <userinput>mkdir -p bin dev etc var/tmp var/run master slave</userinput> +&prompt.root; <userinput>chown bind:bind slave var/*</userinput><co id="chown-slave"></screen> + + <calloutlist> + <callout arearefs="chown-slave"> + <para><application>named</application> n'a besoin + uniquement que d'un accès en écriture + à ces répertoires, c'est tout ce que nous + lui donnerons.</para> + </callout> + </calloutlist> + </listitem> + + <listitem> + <para>Réarranger les fichiers de configuration et + créer la zone:</para> + + <screen>&prompt.root; <userinput>cp /etc/localtime etc</userinput><co id="localtime"> +&prompt.root; <userinput>mv named.conf etc && ln -sf etc/named.conf</userinput> +&prompt.root; <userinput>mv named.root master</userinput> +<!-- I don't like this next bit --> +&prompt.root; <userinput>sh make-localhost && mv localhost.rev localhost-v6.rev master</userinput> +&prompt.root; <userinput>cat > master/named.localhost +$ORIGIN localhost. +$TTL 6h +@ IN SOA localhost. postmaster.localhost. ( + 1 ; serial + 3600 ; refresh + 1800 ; retry + 604800 ; expiration + 3600 ) ; minimum + IN NS localhost. + IN A 127.0.0.1 +^D</userinput></screen> + + <calloutlist> + <callout arearefs="localtime"> + <para>Ceci permet à <application>named</application> + d'utiliser des dates correctes lors de l'envoie des + journaux à &man.syslogd.8;.</para> + </callout> + </calloutlist> + </listitem> + + <listitem> + <para>Si vous utilisez une version de &os; antérieure + à 4.9-RELEASE, compilez une version liée en + statique de <application>named-xfer</application>, et + copiez-la dans le “sandbox”:</para> + + <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make NOSHARED=yes all</userinput> +&prompt.root; <userinput>cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer</userinput><co id="clean-cruft"></screen> + + <para>Après avoir installé votre version + statique de <command>named-xfer</command>, un peu de + nettoyage est nécessaire pour éviter de + conserver des copies inutiles de bibliotèques ou de + programmes dans votre arborescence des sources:</para> + + <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput> +&prompt.root; <userinput>make cleandir</userinput> +&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput> +&prompt.root; <userinput>make cleandir</userinput> +&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput> +&prompt.root; <userinput>make cleandir</userinput></screen> + + <calloutlist> + <callout arearefs="clean-cruft"> + <para>Il a été signalé que cette + étape peut parfois échouer. Si cela vous + arrive, tapez alors la commande:</para> + + <screen>&prompt.root; <userinput>cd /usr/src && make cleandir && make cleandir</userinput></screen> + + <para>et effacez votre arborescence + <filename role="directory">/usr/obj</filename>:</para> + + <screen>&prompt.root; <userinput>rm -fr /usr/obj && mkdir /usr/obj</userinput></screen> + + <para>Cela devrait supprimer les éventuels + “scories” de votre arborescence des + sources, puis en réessayant les + opérations ci-dessus cela devrait enfin + fonctionner.</para> + </callout> + </calloutlist> + + <para>Si vous utilisez &os; 4.9-RELEASE ou une version + suivante, alors la version de + <command>named-xfer</command> se trouvant dans le + répertoire <filename + role="directory">/usr/libexec</filename> est liée + en statique par défaut, et vous pouvez tout + simplement utiliser la commande &man.cp.1; pour la copier + dans l'environnement “sandbox”.</para> + </listitem> + + <listitem> + <para>Créer un fichier spécial de + périphérique <devicename>dev/null</devicename> + dans lequel <application>named</application> peut lire et + écrire:</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb/dev && mknod null c 2 2</userinput> +&prompt.root; <userinput>chmod 666 null</userinput></screen> + </listitem> + + <listitem> + <para>Créer un lien symbolique de + <filename>/var/run/ndc</filename> vers + <filename>/etc/namedb/var/run/ndc</filename>:</para> + + <screen>&prompt.root; <userinput>ln -sf /etc/namedb/var/run/ndc /var/run/ndc</userinput></screen> + + <note> + <para>Ceci évite tout simplement d'avoir à + spécifier l'option <option>-c</option> à + &man.ndc.8; à chaque fois que vous + l'exécutez. Comme le contenu du répertoire + <filename role="directory">/var/run</filename> est + effacé au démarrage, si vous trouvez cela + utile vous pouvez vouloir ajouter cette commande dans le + fichier <filename>crontab</filename> de l'utilisateur + <username>root</username>, en utilisant l'option + <option>@reboot</option>. Consultez la page de manuel + &man.crontab.5; pour plus d'informations à ce + sujet.</para> + </note> + </listitem> + + <listitem> + <para>Configurer &man.syslogd.8; pour qu'il + créé une “socket” + supplémentaire <devicename>log</devicename> sur + laquelle <application>named</application> dispose d'un + accès en écriture. Pour cela, ajoutez + <literal>-l /etc/namedb/dev/log</literal> à la + variable <varname>syslogd_flags</varname> du fichier + <filename>/etc/rc.conf</filename>.</para> + </listitem> + + <listitem> + <para>S'arranger à ce que + <application>named</application> démarre et se + “<command>chroot</command>” lui-même dans + l'environnement “sandbox” en ajoutant ce qui + suit au fichier <filename>/etc/rc.conf</filename>:</para> + + <programlisting>named_enable="YES" +named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf"</programlisting> + + <note> + <para>Notez que l'emplacement du fichier de configuration + <replaceable>/etc/named.conf</replaceable> est + référencé par rapport un chemin + complet <emphasis>relatif au + “sandbox”</emphasis>, i.e. dans la ligne + au-dessus, le fichier auquel on fait + référence est en fait + <filename>/etc/namedb/etc/named.conf</filename>.</para> + </note> + </listitem> + </itemizedlist> + + <para>L'étape suivante est d'éditer le fichier + <filename>/etc/namedb/etc/named.conf</filename> pour que + <application>named</application> puisse savoir quelles zones + charger et où les trouver sur le disque. Un exemple + commenté suit (tout ce qui n'est pas + spécifiquement commenté ici n'est pas + différent de la configuration d'un serveur DNS ne + tournant pas dans un “sandbox”):</para> + + <programlisting>options { + directory "/";<co id="directory"> + named-xfer "/bin/named-xfer";<co id="named-xfer"> + version ""; // Ne pas révéler la version de BIND + query-source address * port 53; +}; +// socket de contrôle ndc +controls { + unix "/var/run/ndc" perm 0600 owner 0 group 0; +}; +// Les zones: +zone "localhost" IN { + type master; + file "master/named.localhost";<co id="master"> + allow-transfer { localhost; }; + notify no; +}; +zone "0.0.127.in-addr.arpa" IN { + type master; + file "master/localhost.rev"; + allow-transfer { localhost; }; + notify no; +}; +zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" { + type master; + file "master/localhost-v6.rev"; + allow-transfer { localhost; }; + notify no; +}; +zone "." IN { + type hint; + file "master/named.root"; +}; +zone "private.example.net" in { + type master; + file "master/private.example.net.db"; + allow-transfer { 192.168.10.0/24; }; +}; +zone "10.168.192.in-addr.arpa" in { + type slave; + masters { 192.168.10.2; }; + file "slave/192.168.10.db";<co id="slave"> +};</programlisting> + + <calloutlist> + <callout arearefs="directory"> + <para>L'option <literal>directory</literal> est + définie par <filename role="directory">/</filename>, + puisque tous les fichiers dont + <application>named</application> a besoin sont dans ce + répertoire (ceci est équivalent au fichier + <filename>/etc/namedb</filename> d'un utilisateur + “normal”).</para> + </callout> + + <callout arearefs="named-xfer"> + <para>Indique le chemin d'accès complet du binaire + <command>named-xfer</command> (à partir de + l'arborescence utilisée pour + <application>named</application>). Ceci est + nécessaire puisque <application>named</application> + est compilé pour chercher + <command>named-xfer</command> par défaut dans le + répertoire <filename + role="directory">/usr/libexec</filename>.</para> + </callout> + <callout arearefs="master"> + <para>Indique le nom de fichier (relatif à la valeur + de <literal>directory</literal> plus haut) où + <application>named</application> le fichier de zone pour + cette zone.</para> + </callout> + <callout arearefs="slave"> + <para>Indique le nom de fichier (relatif à la valeur + de <literal>directory</literal> plus haut) où + <application>named</application> devrait trouver une copie + du fichier de zone pour cette zone après l'avoir + transféré avec succès à partir + du serveur maître. C'est pourquoi nous avons eu + besoin de changer le propriétaire du + répertoire <filename + role="directory">slave</filename> pour + <groupname>bind</groupname> dans les étapes de + configuration précédentes.</para> + </callout> + </calloutlist> + + <para>Après avoir complétées les + étapes précédentes, redémarrez + votre serveur ou relancez &man.syslogd.8; et démarrez + &man.named.8;, en s'assurant de bien utiliser les nouvelles + options spécifiées dans les variables + <varname>syslogd_flags</varname> et + <varname>named_flags</varname>. Vous devriez disposez + maintenant d'une version de <application>named</application> + tournant dans un environnement “sandbox”!</para> + </sect2> + + <sect2> + <title>Sécurité</title> + + <para>Bien que BIND soit l'implémentation la plus + courante du DNS, le problème de la + sécurité subsiste toujours. De possibles + problèmes de sécurité exploitables sont + parfois découvert.</para> + + <para>C'est une bonne idée de lire les avis de + sécurité du <ulink + url="http://www.cert.org/">CERT</ulink> et de s'inscrire + à la &a.security-notifications; pour se maintenir au + courant des problèmes de sécurité actuels + de l'Internet et de &os;.</para> + + <tip> + <para>Si un problème surgit, conserver les sources + à jour et disposer d'une version compilée de + <application>named</application> récente ne seront pas + de trop.</para> + </tip> + </sect2> + + <sect2> + <title>Lectures supplémentaires</title> + + <para>Les pages de manuel de + BIND/<application>named</application>: &man.ndc.8; + &man.named.8; &man.named.conf.5;.</para> + + <itemizedlist> + <listitem> + <para><ulink url="http://www.isc.org/products/BIND/">Page + officielle ISC concernant BIND</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="http://www.nominum.com/getOpenSourceResource.php?id=6">FAQ + BIND</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.oreilly.com/catalog/dns4/">DNS + et BIND 4ème Edition de chez O'Reilly</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="ftp://ftp.isi.edu/in-notes/rfc1034.txt">RFC1034 + - Domain Names - Concepts and Facilities</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="ftp://ftp.isi.edu/in-notes/rfc1035.txt">RFC1035 + - Domain Names - Implementation and + Specification</ulink></para> + </listitem> + </itemizedlist> + </sect2> + </sect1> + + <sect1 id="network-ntp"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Hukins</surname> + <contrib>Contribution de </contrib> + </author> + </authorgroup> + </sect1info> + <title>NTP</title> + + <indexterm><primary>NTP</primary></indexterm> + + <sect2> + <title>Généralités</title> + + <para>Avec le temps, l'horloge d'un ordinateur tend à + dériver. Le protocole NTP (“Network Time + Protocol”) est une des manières pour s'assurer + que votre horloge reste précise.</para> + + <para>De nombreux services Internet ont besoin, ou tirent + partie, de la précision des horloges des ordinateurs. + Par exemple, un serveur web, peut recevoir des requêtes + pour n'envoyer un fichier que s'il a été + modifié depuis un certain temps. Sur un réseau + local, il est essentiel que les ordinateurs partageant des + fichiers à partir du même serveur de fichiers + aient des horloges synchronisées de manière + à ce que les dates de création ou de + dernière modification d'un fichier + (“timestamp”) soient cohérentes. Des + services comme &man.cron.8; reposent sur une horloge + système précise pour exécuter des + commandes à des moments précis.</para> + + <indexterm> + <primary>NTP</primary> + <secondary>ntpd</secondary> + </indexterm> + <para>&os; est fourni avec le serveur NTP &man.ntpd.8; qui peut + être utilisé pour contacter d'autres serveurs NTP + pour régler l'horloge de votre machine ou pour jouer le + rôle de serveur de temps pour d'autres.</para> + </sect2> + + <sect2> + <title>Choisir les serveurs NTP appropriés</title> + + <indexterm> + <primary>NTP</primary> + <secondary>choisir les serveurs</secondary> + </indexterm> + + <para>Afin de synchroniser votre horloge, vous devrez trouver un + ou plusieurs serveurs NTP. Votre administrateur réseau + ou votre FAI peuvent avoir mis en place un serveur NTP dans + cet objectif—consultez leur documentation pour voir si + c'est le cas. Il existe une <ulink + url="http://www.eecis.udel.edu/~mills/ntp/servers.html">liste + en ligne de serveurs NTP accessibles par le public</ulink> que + vous pouvez utiliser pour trouver un serveur NTP proche de + vous. Assurez-vous d'avoir pris connaissance de la politique + d'utilisation des serveurs que vous choisissez, et demandez la + permission si nécessaire.</para> + + <para>Choisir plusieurs serveurs NTP non-connectés entre + eux est une bonne idée au cas où un des serveurs + que vous utilisez devient inaccessible ou que son horloge + n'est plus fiable. &man.ntpd.8; utilise intelligemment les + réponses qu'il reçoit d'autres serveurs—il + favorisera les plus fiables par rapport aux moins + fiables.</para> + </sect2> + + <sect2> + <title>Configuration de votre machine</title> + + <indexterm> + <primary>NTP</primary> + <secondary>configuration</secondary> + </indexterm> + + <sect3> + <title>Configuration de base</title> + <indexterm><primary>ntpdate</primary></indexterm> + + <para>Si vous désirez synchroniser votre horloge + uniquement lors du démarrage de la machine, vous + pouvez alors employer &man.ntpdate.8;. Cela peut être + approprié pour certaines machines de bureau qui sont + fréquemment rédémarrées et qui + ne nécessites qu'une synchronisation + épisodique, cependant la plupart des machines + devraient utiliser &man.ntpd.8;.</para> + + <para>Utiliser &man.ntpdate.8; au moment du démarrage + est également une bonne idée pour les machines + qui exécutent &man.ntpd.8;. Le programme + &man.ntpd.8; modifie l'horloge graduellement, alors que + &man.ntpdate.8; change directement l'horloge, peu importe la + différence entre l'heure actuelle de la machine et + l'heure correcte.</para> + + <para>Pour activer &man.ntpdate.8; au démarrage, + ajoutez la ligne <literal>ntpdate_enable="YES"</literal> au + fichier <filename>/etc/rc.conf</filename>. Vous devrez + également préciser tous les serveurs avec + lesquels vous désirez vous synchroniser et tous les + indicateurs devant être passés à + &man.ntpdate.8; avec + <literal>ntpdate_flags</literal>.</para> + </sect3> + + <sect3> + <indexterm> + <primary>NTP</primary> + <secondary>ntp.conf</secondary> + </indexterm> + + <title>Configuration générale</title> + + <para>NTP est configuré par l'intermédiaire du + fichier <filename>/etc/ntp.conf</filename> suivant le format + décrit dans la page de manuel &man.ntp.conf.5;. + Voici un exemple simple:</para> + + <programlisting>server ntplocal.example.com prefer +server timeserver.example.org +server ntp2a.example.net + +driftfile /var/db/ntp.drift</programlisting> + + <para>L'option <literal>server</literal> précise quels + serveurs doivent être utilisés, avec un serveur + listé par ligne. Si un serveur est + spécifié avec l'argument + <literal>prefer</literal>, comme c'est le cas pour <hostid + role="fqdn">ntplocal.example.com</hostid>, ce serveur est + préféré par rapport aux autres + serveurs. Une réponse en provenance d'un serveur + <emphasis>préféré</emphasis> sera + ignorée si elle diffère de façon + significative des réponses des autres serveurs, sinon + elle sera utilisée sans considérer les autres + réponses. L'argument <literal>prefer</literal> est + normalement employé pour les serveurs NTP qui sont + connus pour leur grande précision, comme ceux avec + des systèmes spéciaux de contrôle du + matériel.</para> + + <para>L'option <literal>driftfile</literal> précise + quel fichier est utilisé pour stocker le + décalage de fréquence de l'horloge. Le + programmme &man.ntpd.8; l'utilise pour compenser + automatiquement la dérive naturelle de l'horloge, + permettant de maintenir un réglage raisonnablement + correct même s'il est coupé d'autres sources + extérieures de temps pendant une certaine + période.</para> + + <para>L'option <literal>driftfile</literal> précise + également quel fichier est utilisé pour + stocker l'information concernant les réponses + précédentes des serveurs NTP que vous + utilisez. Il ne devrait pas être modifié par + un autre processus.</para> + </sect3> + + <sect3> + <title>Contrôler l'accès à votre + serveur</title> + + <para>Par défaut, votre serveur NTP sera accessible par + toutes les machines sur l'Internet. L'option + <literal>restrict</literal> du fichier + <filename>/etc/ntp.conf</filename> vous permet de + contrôler quelles machines peuvent accéder + à votre serveur.</para> + + <para>Si vous voulez refuser à tout le monde + l'accès à votre serveur NTP, ajoutez la ligne + suivante au fichier + <filename>/etc/ntp.conf</filename>:</para> + + <programlisting>restrict default ignore</programlisting> + + <para>Si vous désirez autoriser uniquement + l'accès aux machines de votre réseau pour + qu'elles puissent synchroniser leur horloge, tout en vous + assurant qu'elles ne peuvent configurer le serveur ou + être utilisées comme point de de + synchronisation, ajoutez:</para> + + <programlisting>restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap</programlisting> + + <para>à la place, où <hostid + role="ipaddr">192.168.1.0</hostid> est une adresse IP de + votre réseau et <hostid + role="netmask">255.255.255.0</hostid> est votre masque de + sous-réseau.</para> + + <para>Le fichier <filename>/etc/ntp.conf</filename> peut + contenir plusieurs options <literal>restrict</literal>. + Pour plus de détails, lisez la section + <literal>Access Control Support</literal> de la page de + manuel &man.ntp.conf.5;.</para> + </sect3> + </sect2> + + <sect2> + <title>Exécuter le serveur NTP</title> + + <para>Pour s'assurer que le serveur NTP est lancé au + démarrage, ajoutez la ligne + <literal>xntpd_enable="YES"</literal> dans le fichier + <filename>/etc/rc.conf</filename>. Si vous désirez + passer des indicateurs supplémentaires à + &man.ntpd.8;, éditez les paramètres de l'option + <varname>xntpd_flags</varname> dans + <filename>/etc/rc.conf</filename>.</para> + + <para>Pour lancer le serveur sans redémarrer votre + machine, exécutez <command>ntpd</command> en + étant sûr de préciser tout + paramètre supplémentaire de + <varname>xntpd_flags</varname> dans + <filename>/etc/rc.conf</filename>. Par exemple:</para> + + <screen>&prompt.root; <userinput>ntpd -p /var/run/ntpd.pid</userinput></screen> + + <note> + <para>Sous &os; 5.X, diverses options du fichier + <filename>/etc/rc.conf</filename> ont été + renommées. Ainsi, vous devez remplacer chaque + <literal>xntpd</literal> par <literal>ntpd</literal> dans les + options ci-dessus.</para></note> + </sect2> + + <sect2> + <title>Utiliser ntpd avec une connexion Internet + temporaire</title> + + <para>Le programme &man.ntpd.8; n'a pas besoin d'une connexion + permanente à l'Internet pour fonctionner correctement. + Cependant, si vous disposez d'une connextion temporaire qui + est configurée de telle sorte qu'il y ait + établissement de la connexion à la demande, + c'est une bonne idée d'empêcher le trafic NTP de + déclencher la numérotation ou de maintenir + constamment établie la connexion. Si vous utilisez PPP + en mode utilisateur, vous pouvez employer les directives + <literal>filter</literal> dans le fichier + <filename>/etc/ppp/ppp.conf</filename>. Par exemple:</para> + + <programlisting> set filter dial 0 deny udp src eq 123 + # Empêche le trafic NTP de lancer une connexion + set filter dial 1 permit 0 0 + set filter alive 0 deny udp src eq 123 + # Empêche le trafic NTP entrant de garder la connexion établie + set filter alive 1 deny udp dst eq 123 + # Empêche le trafic NTP sortant de garder la connexion établie + set filter alive 2 permit 0/0 0/0</programlisting> + + <para>Pour plus de détails lisez la section + <literal>PACKET FILTERING</literal> de la page de manuel + &man.ppp.8; et les exemples du répertoire <filename + role="directory">/usr/share/examples/ppp/</filename>.</para> + + <note> + <para>Certains fournisseurs d'accès Internet bloquent + les ports dont le numéro est faible, empêchant + NTP de fonctionner puisque les réponses n'atteingnent + jamais votre machine.</para> + </note> + </sect2> + + <sect2> + <title>Information supplémentaire</title> + + <para>La documentation pour le serveur NTP peut être + trouvé dans le répertoire <filename + role="directory">/usr/share/doc/ntp/</filename> sous le format + HTML.</para> + </sect2> + </sect1> +</chapter> + +<!-- + Local Variables: + mode: sgml + sgml-declaration: "../chapter.decl" + sgml-indent-data: t + sgml-omittag: nil + sgml-always-quote-attributes: t + sgml-parent-document: ("../book.sgml" "part" "chapter") + End: +--> +<!-- LocalWords: config mnt www -->