Escolar Documentos
Profissional Documentos
Cultura Documentos
Copyright
c 1992-1995 Olaf Kirch
A Britta
UNIX est une marque deposee de X/Open.
Linux n'est pas une marque deposee, et n'a aucun lien avec UNIXTM ou X/Open.
Copyright
c 1995 Olaf Kirch
Kattreinstr. 38, 64295 Darmstadt, Germany
okir@monad.swb.de
15 Sendmail+IDA 237
15.1 Introduction a Sendmail+IDA : : : : : : : : : : : : : : : : : : : : : : : 237
15.2 Apercu des chiers de conguration : : : : : : : : : : : : : : : : : : : 238
15.3 Le chier sendmail.cf : : : : : : : : : : : : : : : : : : : : : : : : : : : : 238
15.3.1 Exemple de chier sendmail.m4 : : : : : : : : : : : : : : : : : : 239
15.3.2 Parametres couramment utilises dans sendmail.m4 : : : : : : : 239
15.4 Presentation des tables de Sendmail+IDA : : : : : : : : : : : : : : : : 245
15.4.1 La table mailertable : : : : : : : : : : : : : : : : : : : : : : : : 245
15.4.2 La table uucpxtable : : : : : : : : : : : : : : : : : : : : : : : : : 246
15.4.3 La table pathtable : : : : : : : : : : : : : : : : : : : : : : : : : 247
15.4.4 La table domaintable : : : : : : : : : : : : : : : : : : : : : : : : 248
15.4.5 Le chier aliases : : : : : : : : : : : : : : : : : : : : : : : : : : 248
15.4.6 Tables rarement utilisees : : : : : : : : : : : : : : : : : : : : : : 249
15.5 Installation de sendmail : : : : : : : : : : : : : : : : : : : : : : : : : : 250
15.5.1 Extraction de la distribution binaire : : : : : : : : : : : : : : : 250
15.5.2 Generation du chier sendmail.cf : : : : : : : : : : : : : : : : : 251
15.5.3 Tests du chier sendmail.cf : : : : : : : : : : : : : : : : : : : : 252
15.5.4 Tests d'integration de sendmail.cf et des tables : : : : : : : : : 254
15.6 Trucs et astuces du parfait petit administrateur : : : : : : : : : : : : : 256
15.6.1 Renvoyer le courrier a une machine relais : : : : : : : : : : : : 256
15.6.2 Forcer du courrier dans des sites mal congures : : : : : : : : : 256
15.6.3 Forcer le courrier a partir par UUCP : : : : : : : : : : : : : : : 257
15.6.4 Emp^echer le courrier de partir par UUCP : : : : : : : : : : : : 258
15.6.5 Vider sur demande la queue de Sendmail : : : : : : : : : : : : 258
15.6.6 Obtenir des statistiques sur le courrier traite : : : : : : : : : : 259
15.7 Coherence des distributions binaires : : : : : : : : : : : : : : : : : : : 259
15.8 Pour en savoir plus... : : : : : : : : : : : : : : : : : : : : : : : : : : : : 260
17 C News 267
17.1 L'injection des articles : : : : : : : : : : : : : : : : : : : : : : : : : : : 267
17.2 Installation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 268
17.3 Le chier sys : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 271
17.4 Le chier active : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 275
17.5 Le traitement par lots (batching) : : : : : : : : : : : : : : : : : : : : : 276
17.6 Expiration des News : : : : : : : : : : : : : : : : : : : : : : : : : : : : 279
17.7 Fichiers divers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 281
17.8 Les messages de contr^ole : : : : : : : : : : : : : : : : : : : : : : : : : : 283
17.8.1 Le message cancel : : : : : : : : : : : : : : : : : : : : : : : : : 283
17.8.2 Les messages newgroup et rmgroup : : : : : : : : : : : : : : : : 284
17.8.3 Le message checkgroups : : : : : : : : : : : : : : : : : : : : : : 284
17.8.4 Les messages sendsys, version et senduuname : : : : : : : : : : 285
17.9 C News dans un environnement NFS : : : : : : : : : : : : : : : : : : : 286
17.10Outils et travaux de maintenance : : : : : : : : : : : : : : : : : : : : : 287
Preface
Vous ^etes sur le point de vous embarquer dans une fantastique aventure : vous allez
entrer dans le monde de Linux. Pour resumer, Linux vous rappellera l'esprit qui
regnait dans les premiers jours de la micro-informatique, ou programmeurs geniaux
et bidouilleurs passionnes passaient des nuits blanches avec un oscilloscope et un fer
a souder pour construire leur propre micro-ordinateur. Les temps ont change, les
outils aussi ; les debogueurs ont remplace la soudure, mais l'etat d'esprit est toujours
present. Linux est ne de cette passion, et gr^ace a lui vous disposez d'un systeme UNIX
pour votre micro-ordinateur, n'ayant rien a envier aux autres implementations.
Malgre ses origines, Linux a evolue et n'est plus reserve aux programmeurs aver-
tis. Chaque jour, des milliers de personnes, de toute culture informatique, adoptent
ce systeme d'exploitation pour toutes sortes d'applications techniques, scientiques,
educatives, et... bien s^ur, pour le plaisir aussi.
Mais comment Linux a-t-il pu devenir aussi perfectionne et performant, aussi celebre
et apprecie, sans ^etre developpe par une equipe de professionnels surpayes? Le FBI
devrait-il ouvrir une enqu^ete sur ce mystere ? Que se cache-t-il la-dessous ?
La cooperation. Tout le secret est la. Linux est libre, dans tous les sens du terme.
Cette idee de liberte, partagee par tous les programmeurs ayant r^eve de posseder un
jour leur propre systeme UNIX, a permis de realiser des miracles, chacun apportant sa
pierre a l'edice. Demandez a n'importe quel developpeur pourquoi il passe des nuits
entieres a travailler sur les sources de Linux. Tous auront la m^eme reponse : la passion
de programmer, et d'orir le meilleur a la communaute, librement, sans contraintes.
Vous ne realisez peut-^etre pas qu'en utilisant Linux, vous contribuez a l'essor du
logiciel libre, dans le monde entier. Le libre acces aux programmes, avec la possibilite
de les modier et de les distribuer sans restrictions, est considere par beaucoup comme
un droit fondamental de tout utilisateur d'ordinateur ; au m^eme titre que les droits de
l'homme, la liberte, la recherche de plus gros disques durs, et le digestif apres le cafe.
Le logiciel denit comment sont utilisees les machines, le systeme d'exploitation en
etant le tout premier exemple. En choisissant un systeme, vous determinez la maniere
dont votre ordinateur fonctionnera, depuis l'interface utilisateur jusqu'aux pilotes de
peripheriques.
xviii Preface
Linux a l'enorme avantage d'^etre developpe par, et pour ses utilisateurs. Le marche du
logiciel n'a aucune in
uence sur ses orientations : ce sont les besoins des utilisateurs
qui les denissent. Cette situation est bien plus saine que de tenter de conquerir un
(( marche )), ou de realiser des prots. Cela ne convient sans doute pas a tout le monde,
mais tous ceux qui l'utilisent peuvent avoir une in
uence sur son avenir. Pour tout
dire, Linux est votre systeme d'exploitation personnel, domestique, bien a vous. Ce
sera votre compagnon de tous les jours. Que trouver de mieux ?
Power to the people. Linux is here.
Matt Welsh, coordinateur du groupe de documentation Linux, 9 novembre 1994.
1
Chapitre 1
Introduction aux reseaux
1.1 Historique
La notion de reseau est probablement aussi ancienne que le besoin de communiquer
a distance. Transportons-nous a l'^age de pierre, et imaginons que les hommes s'en-
voyaient des messages en frappant sur des tambours ou autres instruments a percus-
sion. Supposons que l'homme des cavernes A veuille inviter son copain B pour jouer
a se lancer des cailloux, mais qu'ils habitent trop loin l'un de l'autre pour pouvoir
entendre leurs signaux sonores respectifs. Quelles sont les solutions possibles ? Il pour-
rait 1) rendre visite a B, 2) prendre un tambour plus gros, ou 3) demander a C, qui
habite a mi-chemin, de faire passer le message. Cette derniere solution s'appelle un
reseau.
Bien s^ur, nous avons parcouru un long chemin depuis les occupations primaires et les
peripheriques primitifs de nos lointains anc^etres. De nos jours, nous possedons des
ordinateurs qui peuvent communiquer entre eux par l'intermediaire d'une vaste toile
d'araignee de c^ables, bres optiques, micro-ondes ou bien d'autres solutions de haute
technologie, an de pouvoir prendre rendez-vous pour le match de football de samedi
prochain 1 . Dans la description qui va suivre, nous verrons les moyens et methodes
mis en uvre, mais nous laisserons de c^ote les c^ables et la manifestation sportive.
Nous aborderons deux types de reseaux dans ce guide : ceux bases sur UUCP et
ceux bases sur TCP/IP. Ce sont des ensembles de protocoles et de programmes qui
permettent de transferer des donnees entre deux ordinateurs. Dans ce chapitre, nous
verrons les principes de base de chacun de ces reseaux.
Nous denissons un reseau comme etant un ensemble d'h^otes capables de communi-
quer entre eux, souvent en s'appuyant sur les services d'un certain nombre d'autres
h^otes specialises qui relayent les donnees entre les participants. Ces h^otes sont tres
1 Dont l'esprit original (voir ci-dessus) appara^t encore de temps en temps en Europe.
:
2 Chapitre 1. Introduction aux reseaux
souvent des ordinateurs, mais ce n'est pas obligatoire ; ce peut ^etre tout aussi bien
des terminaux X ou des imprimantes intelligentes. Les petits ensembles d'h^otes sont
appeles sites.
Toute communication est impossible sans le truchement de quelque sorte de langage,
ou de code. Dans le monde des reseaux d'ordinateurs, ces codes sont appeles protocoles.
Toutefois, n'associez pas cette notion aux divers langages ecrits, mais plut^ot aux codes
bien precis denissant le comportement a adopter lors de rencontres ocielles entre
chefs d'E tats, par exemple. Les protocoles utilises dans les reseaux informatiques ne
sont pas autre chose que des regles tres strictes lors de l'echange de messages entre
plusieurs h^otes.
Cela fera que le programme uux, une commande de l'ensemble UUCP, planiera un job
pour le site renux. Ce job consistera a prendre le chier netguide.dvi et le passer au
programme lpr. L'option -r indique a uux de ne pas appeler immediatement le systeme
distant, mais de stocker cette requ^ete jusqu'a ce qu'une connexion soit etablie. Cela
s'appelle spouler 3 .
UUCP permet aussi de transmettre commandes et chiers a travers plusieurs h^otes,
a condition que ces derniers l'autorisent. Supposons que renux soit en liaison UUCP
avec groucho, qui archive de nombreuses applications UNIX. Pour telecharger le
chier tripwire-1.0.tar.gz vers votre site, vous taperiez la commande :
$ uucp -mr renux!groucho!~/security/tripwire-1.0.tar.gz trip.tgz
Le job cree ici demandera a renux de recuperer le chier sur la machine groucho
et de l'envoyer a votre site, ou votre UUCP le recevra sous le nom trip.tgz ; puis
vous avertira par courrier de son arrivee. Cette operation s'eectuera en trois etapes.
Tout d'abord, votre site envoie le job a renux. La prochaine fois que renux etablira
le contact avec groucho, il telechargera le chier. Enn, la derniere etape sera le
transfert entre renux et votre machine.
De nos jours, la principale activite des reseaux UUCP consiste a transferer le courrier
electronique et les News Usenet.
Le courrier electronique (E-mail en abrege) permet d'echanger des messages entre
utilisateurs de sites distants, sans se preoccuper de savoir comment se connecter sur
ces h^otes. Le travail de routage entre votre machine et le site distant est entierement
realise par le systeme de courrier electronique. Dans un environnement UUCP, les
messages sont generalement transportes en executant la commande rmail sur un h^ote
voisin, en passant l'adresse du destinataire et le contenu du courrier. Le programme
rmail transmettra a son tour les donnees a un autre site, et ainsi de suite jusqu'a
ce qu'il atteigne la machine de destination. Nous reviendrons la-dessus plus en detail
dans le chapitre 13.
2 Si vous utilisez bash, le GNU Bourne Again Shell, ou tout autre shell moderne, vous devrez
:
encoder le point d'exclamation par une sequence d'echappement car c'est le caractere d'historique.
3 Nous sommes desoles, il s'agit bien de l'expression a utiliser en francais pour le spooling...
:
4 Chapitre 1. Introduction aux reseaux
Les (( News )) peuvent ^etre decrites comme un genre de messageries BBS 4 distribuees.
Ce terme designe le plus souvent les News Usenet, qui constituent le plus grand reseau
d'echange de messages au monde, avec un nombre de sites connectes estime a 120 000.
Les origines de Usenet remontent a 1979, ou apres l'introduction d'UUCP avec le
nouvel UNIX V7, trois etudiants imaginerent un systeme d'echange d'informations
au sein de la communaute UNIX. Ils ecrivirent quelques scripts, qui formerent le tout
premier systeme de News. En 1980, ce reseau etait forme de trois sites ; duke, unc
et phs, entre deux universites de Caroline du Nord. Et Usenet grandit a partir de la.
Bien que concu a l'origine autour de UUCP, de nos jours Usenet n'est plus transporte
par ce seul type de reseau.
L'unite d'information est l'article, qui peut ^etre poste dans une hierarchie de forums,
ou newsgroups, dont le debit peut atteindre, a l'heure ou nous ecrivons ces lignes, plus
de 100 megaoctets par jour.
Dans le monde UUCP, les News sont en general transferees par paquets, en rassem-
blant tous les articles des forums demandes dans un certain nombre de batches. Le
site recepteur passe ces chiers au programme rnews, qui les decompacte et assure le
traitement necessaire.
Enn, UUCP est egalement un protocole de choix pour de nombreux sites d'archivage
qui orent un acces public par ligne telephonique ordinaire. On peut generalement
s'y connecter en les appelant par UUCP, sous un nom d'utilisateur invite, comme
guest, nuucp ou encore uucp, pour telecharger les chiers publics. Les mots de
passe courants pour ce type d'acces sont souvent simplement uucp, nuucp, parfois
m^eme aucun mot de passe n'est necessaire.
A l'invite login, vous entrez alors votre nom d'utilisateur, par exemple dugenou,
puis votre mot de passe. Vous obtenez alors un shell sur la machine quark, exactement
comme si vous etiez devant la console de cet ordinateur. Votre travail termine, en sor-
tant de ce shell vous revenez a l'invite de votre propre machine. Vous venez d'utiliser
l'une des applications interactives instantanees oertes par TCP/IP : le login distant.
Lors de votre session sur quark, vous pouvez avoir besoin d'utiliser une application
graphique sous X Window, par exemple un previsualiseur PostScript. Vous devez alors
indiquer a ce programme que ses fen^etres doivent s'acher sur votre ecran, et non sur
:6 ISDN correspond a l'etranger a ce que nous appelons RNIS en France (reseau numerique a
integration de services), commercialise sous le nom de NUME RIS.
6 Chapitre 1. Introduction aux reseaux
celui de la machine sur laquelle il s'execute. Cela se fait en positionnant la variable
d'environnement DISPLAY :
$ export DISPLAY=erdos.maths:0.0
Si maintenant vous lancez votre application, elle contactera votre serveur X au lieu de
celui de quark, et tout s'achera sur votre propre ecran. Bien s^ur, il va de soi que vous
devez deja travailler sous X11 sur votre machine erdos. En realite, TCP/IP permet
a quark et erdos de s'echanger les paquets X11 an de vous donner l'illusion d'^etre
sur un systeme unique. Vous constatez ici que le reseau est totalement transparent.
Une autre application tres importante rendue possible par TCP/IP s'appelle NFS,
Network File System (systeme de chiers par reseau). Il s'agit d'une autre maniere
de rendre le reseau transparent, qui vous permet litteralement de monter des hierar-
chies de repertoires depuis d'autres h^otes, de telle maniere qu'elles vous apparaissent
comme des systemes de chiers locaux. Par exemple, tous les repertoires personnels
des utilisateurs peuvent ^etre situes sur un serveur central depuis lequel chaque h^ote
du reseau monte cette arborescence. Le resultat est que chaque utilisateur peut em-
ployer n'importe quelle machine en se retrouvant, quoi qu'il arrive, dans le m^eme
repertoire. De m^eme, il est possible de n'installer des applications tres gourmandes
en place disque (comme TEX) que sur un seul ordinateur et d'exporter ces repertoires
pour que les autres h^otes puissent s'en servir. Nous reviendrons plus en detail sur
NFS dans le chapitre 11.
Bien s^ur, ce ne sont que quelques exemples simples de ce que vous pouvez realiser
gr^ace aux reseaux TCP/IP ; leurs possibilites ne sont limitees que par l'imagination.
Nous allons maintenant regarder d'un peu plus pres le fonctionnement de TCP/IP.
Vous comprendrez ainsi comment et pourquoi congurer votre machine. Nous com-
mencerons par l'equipement materiel necessaire, et petit a petit nous guiderons vos
premiers pas.
1.3.2 Ethernet
L'equipement materiel le plus utilise pour la realisation de reseaux locaux est ce que
l'on appelle l'Ethernet. Il consiste en un simple c^able coaxial, sur lequel est connecte
chaque h^ote par l'intermediaire de connecteurs, ou de bo^tiers electroniques nommes
transceivers. Les reseaux Ethernet sont extr^emement peu co^uteux et simples a instal-
ler, et leur vitesse de transfert etant de 10 megabits par seconde, ils rencontrent un
succes toujours grandissant.
Il existe trois categories d'Ethernet : n, gros, et paire torsadee. Les deux premiers
utilisent un c^able coaxial, qui diere dans sa taille et la maniere de s'y connecter.
L'Ethernet n utilise des connecteurs (( BNC )) en (( T )), que vous pouvez inserer au
milieu du c^able reseau et brancher sur la prise prevue a cet eet a l'arriere de l'ordi-
nateur. Le gros Ethernet s'utilise en faisant un petit trou dans le c^able et en connec-
tant un transceiver par l'intermediaire d'une (( pince vampire )). Ces bo^tiers peuvent
1.3. Reseaux TCP/IP 7
2
niels sophus
quark
erdos
Fig. 1.1 - L'envoi d'un datagramme entre erdos et quark se fait en trois etapes.
10 Chapitre 1. Introduction aux reseaux
Le benece apporte par IP est de faire appara^tre des reseaux physiquement dierents
en un seul reseau homogene. Cela se nomme l'interconnexion de reseaux, et le (( meta-
reseau )) resultant est appele un internet. Notez bien la subtilite entre un internet et
l' Internet. Ce dernier terme est le nom ociel d'un internet mondial particulier.
Bien s^ur, IP necessite aussi une methode d'adressage independante du materiel. Pour
ce faire, on assigne a chaque h^ote un nombre unique sur 32 bits, appele l'adresse IP.
Une adresse IP est generalement notee sous la forme de quatre nombres decimaux, un
pour chaque portion de 8 bits, separes par des points. Par exemple, quark pourrait
avoir une adresse IP de 0x954C0C04, qui serait alors ecrite 149.76.12.4 ; ce format
est connu sous le nom evident de notation sur 4 octets, vous verrez aussi tres souvent
l'appellation anglaise dotted quad.
Vous noterez que nous avons maintenant trois types d'adresses dierents : tout d'abord
le nom d'h^ote, comme quark, puis les adresses IP, et enn les adresses materielles, les
6 octets de l'interface Ethernet. Toutes doivent ^etre liees, de sorte que lorsque vous
tapez rlogin quark, la partie logicielle du reseau puisse obtenir l'adresse IP de quark ;
et quand IP delivre des donnees a l'Ethernet du Departement de Physique, il puisse
determiner a quelle adresse materielle correspond cette adresse IP.
Nous verrons comment tout cela est realise dans le chapitre 2. Pour l'instant, il vous
sura de savoir que ces etapes se nomment la resolution de noms, pour ce qui est de
faire correspondre les noms d'h^otes en adresses IP, et resolution d'adresses, pour la
correspondance de cette derniere en adresse materielle.
Il est tres important de savoir que IP, par conception, n'est pas un protocole able.
Supposons que dix personnes, sur votre reseau Ethernet, soient en train de telecharger
la derniere version de XFree86 depuis le serveur ftp de GMU. Le trac genere peut
alors devenir trop important pour la passerelle, si elle est trop lente ou manque de
memoire. Si a ce moment, vous envoyez un paquet a destination de quark, sophus
pourrait se trouver a cours de ressources pendant quelques instants et ne pas pouvoir
traiter vos donnees. IP resout ce probleme d'une facon tres simple : il elimine le paquet,
qui est irremediablement perdu. Par consequent, la responsabilite de verier l'integrite
des donnees transmises, et de les retransmettre en cas d'erreur est celle des h^otes en
communication.
Ce r^ole est assure par un autre protocole : TCP, ou Transmission Control Protocol, qui
cree un service able par-dessus IP, en prenant en charge le contr^ole de la transmission.
La propriete la plus importante de TCP est d'utiliser IP an de donner l'illusion d'une
simple connexion entre les deux processus distants, de maniere a ce qu'il n'y ait pas a
se preoccuper du routage des donnees. Une connexion TCP fonctionne un peu comme
un tube bidirectionnel dans lequel chaque programme peut lire et ecrire. Vous pouvez
l'imaginer comme une conversation telephonique, par exemple.
TCP identie chaque bout d'une telle connexion par les adresses IP des h^otes concer-
nes, et un numero de port sur chacun d'eux. Les ports peuvent ^etre vus comme des
points d'attache pour les connexions reseau. En prenant encore une fois le telephone
comme exemple, on pourrait comparer les adresses IP aux codes regionaux (un numero
par ville), et les ports aux numeros individuels (un numero par abonne) 8.
Dans notre exemple de rlogin, l'application cliente (rlogin) ouvre un port sur erdos
et se connecte au port 513 du systeme quark, dont le serveur rlogind est a l'ecoute.
Il s'etablit alors une connexion TCP. Par l'intermediaire de cette connexion, rlogind
eectue la procedure d'autorisation d'acces, puis lance l'execution du shell. L'entree
et la sortie standard de ce dernier sont redirigees vers la connexion TCP de sorte
que tout ce que vous tapez sur votre machine dans rlogin soit envoye au
ux TCP et
aboutisse a l'entree standard du shell distant.
Chapitre 2
Le reseau TCP/IP
Nous allons maintenant aborder tous les details que vous devrez conna^tre lors de la
connexion de votre systeme Linux a un reseau TCP/IP, notamment la gestion des
adresses IP, les noms de machines, et le routage. Ce chapitre vous apportera les bases
necessaires pour la comprehension de ce que necessite une conguration reseau, les
suivants decriront les dierents outils a employer.
2.4 Routage IP
Nous allons maintenant voir comment localiser un h^ote a qui nous voulons envoyer des
paquets, en fonction de son adresse IP. Les dierentes parties de l'adresse sont gerees
dieremment ; et c'est a vous de congurer correctement les chiers qui indiquent
comment traiter chacune de ces parties.
2.4.1 Reseaux IP
} Lorsque vous ecrivez une lettre a quelqu'un, vous indiquez generalement sur l'enve-
loppe une adresse complete speciant le pays, le departement, le code postal, etc.
Ensuite, vous mettez l'enveloppe dans une bo^te aux lettres et les services postaux la
delivreront au destinataire : elle sera expediee dans le pays indique, ou d'autres ser-
vices nationaux la dirigeront vers le departement indique, et ainsi de suite jusqu'au
2.4. Routage IP 23
destinataire. L'avantage de cette methode hierarchique est evident : quelle que soit la
destination, la poste locale saura dans quelle direction diriger la lettre, mais n'aura
pas a se soucier de savoir comment elle voyagera une fois qu'elle aura atteint le pays
de destination.
Les reseaux IP sont structures de facon similaire. L'Internet consiste en un certain
nombre de reseaux particuliers, appeles systemes autonomes. Chaque systeme eectue
tout le routage necessaire entre ses h^otes internes de telle maniere que l'envoi d'un
datagramme se reduise a trouver un chemin vers le reseau sur lequel se trouve l'h^ote
destinataire. Cela signie qu'aussit^ot que le paquet est passe a n'importe quel h^ote
de ce reseau particulier, le reste du traitement est exclusivement realise par ce reseau
lui-m^eme.
2.4.2 Sous-reseaux
Cette structure est re
etee par le decoupage des adresses IP en une partie reseau
et une partie h^ote, comme nous l'avons explique plus haut. Par defaut, le reseau de
destination est derive de la partie reseau de l'adresse IP. Par consequent, les h^otes
pour lesquels ce nombre est le m^eme doivent se trouver sur le m^eme reseau, et reci-
proquement 3 .
Il est alors logique d'orir un schema similaire a l'interieur du reseau, puisqu'il peut
lui-m^eme consister en un ensemble de centaines de reseaux plus petits, la plus petite
unite etant des reseaux physiques comme l'Ethernet. Par consequent, IP permet de
subdiviser un reseau IP en plusieurs sous-reseaux.
Un sous-reseau prend la responsabilite de delivrer les datagrammes pour une certaine
plage d'adresses IP appartenant au reseau IP dont il fait partie. Tout comme dans les
classes A, B, ou C, il est identie par la partie reseau des adresses IP. Toutefois, cette
partie reseau est alors etendue en incluant quelques bits de la partie h^ote. Le nombre
de bits qui seront interpretes en tant que valeur de sous-reseau est donne par ce que
l'on appelle le masque de sous-reseau ou masque reseau, en anglais netmask. Il s'agit
aussi d'un nombre sur 32 bits, qui specie le masque de bits pour la partie reseau de
l'adresse IP.
Le reseau du campus de l'universite Groucho Marx est un exemple d'une telle orga-
nisation. Il possede le reseau de classe B 149.76.0.0, et son masque reseau est par
consequent 255.255.0.0.
A l'interieur, il est en fait constitue de plusieurs reseaux plus petits, comme ceux des
dierents departements. Aussi, la plage d'adresses IP est divisee en 254 sous-reseaux,
149.76.1.0 a 149.76.254.0. Par exemple, le Departement de Physique Theorique
s'est vu assigner 149.76.12.0. La dorsale du campus est aussi un reseau, auquel on
a attribue l'adresse 149.76.1.0. Ces sous-reseaux partagent la m^eme valeur reseau,
bien que le troisieme octet soit utilise pour les distinguer entre eux. Ils utiliseront un
masque de sous-reseau de 255.255.255.0.
3 Les systemes autonomes sont plus generaux et peuvent comporter plus d'un reseau IP.
:
24 Chapitre 2. Le reseau TCP/IP
149 76 12 4
La gure 2.1 montre comment 149.76.12.4, l'adresse de quark, est interpretee dif-
feremment selon qu'elle est consideree sur un reseau de classe B ordinaire, ou comme
sous-reseau.
Il faut bien avoir a l'esprit que la subdivision de reseaux n'est qu'une division interne.
Les sous-reseaux sont crees par le proprietaire du reseau (ou les administrateurs). Sou-
vent, ils sont mis en place pour delimiter des zones precises, qu'elles soient physiques
(entre deux Ethernet), administratives (entre deux departements), ou geographiques;
et une personne se voit deleguer la responsabilite de ces sous-reseaux. Mais cette
structure n'aecte que le comportement interne et est completement invisible pour le
reste du monde.
2.4.3 Passerelles
La subdivision de reseaux n'est pas seulement utile pour des raisons administratives,
mais est aussi tres souvent la consequence naturelle des limitations materielles. Le
point de vue d'un h^ote connecte a un reseau physique donne (Ethernet par exemple),
est tres limite : il ne pourra acceder directement qu'aux machines situees sur le m^eme
reseau local. Tous les autres h^otes ne lui sont accessibles qu'a travers ce que l'on
appelle une passerelle. Une passerelle est un h^ote qui est connecte physiquement a deux
reseaux (ou plus) simultanement, et qui est congure specialement pour permettre
d'echanger des paquets entre eux.
Pour que IP puisse facilement savoir si un h^ote est sur un reseau local physique, ces
dierents reseaux physiques doivent appartenir a dierents reseaux IP. Par exemple,
le reseau IP 149.76.4.0 est reserve aux h^otes du reseau local du Departement de
Mathematiques. Lors de l'envoi d'un datagramme vers quark, les logiciels reseau de
erdos deduisent immediatement de l'adresse IP 149.76.12.4 que l'h^ote destinataire
est situe sur un reseau physique dierent, et par consequent ne sera joignable que par
une passerelle (sophus par defaut).
2.4. Routage IP 25
Cette machine passerelle, sophus, est connectee a deux sous-reseaux distincts : celui
du Departement de Mathematiques et la dorsale du campus. Il accede a chacun d'eux
par une interface dierente, qui sont respectivement eth0 et fddi0. Mais alors, quelle
adresse IP devons-nous lui assigner ? Faut-il lui en donner une appartenant au sous-
reseau 149.76.1.0, ou bien a 149.76.4.0 ?
La reponse est : les deux, mon general. Lors de dialogues avec des h^otes du Depar-
tement de Mathematiques, sophus devra utiliser une adresse IP de 149.76.4.1, et
avec la dorsale, ce sera 149.76.1.4.
Donc, une passerelle se voit assigner une adresse IP par reseau auquel elle est connec-
tee. Ces adresses (et les masques correspondants) sont liees aux interfaces par les-
quelles on accede aux sous-reseaux. La correspondance entre les interfaces et adresses
de sophus ressemblera donc a ceci :
Interface Adresse Masque reseau
eth0 149.76.4.1 255.255.255.0
fddi0 149.76.1.4 255.255.255.0
lo 127.0.0.1 255.0.0.0
La derniere entree correspond a l'interface loopback, que nous avons decrit plus haut.
La gure 2.2 montre une partie de la topologie du reseau a l'universite Groucho Marx
(GMU). Les machines connectees simultanement a deux sous-reseaux sont indiquees
avec leurs deux adresses IP.
La plupart du temps, vous pouvez ignorer la dierence entre l'adresse IP d'un h^ote
et son interface. Pour ceux qui ne sont que sur un seul reseau, comme erdos, vous
pourrez dire que cette machine a telle ou telle adresse IP, bien qu'en realite ce soit son
interface Ethernet qui ait cette adresse. Mais la distinction n'est vraiment importante
que pour les passerelles.
4.1 12.1
sophus niels
1.4 1.12
Dorsale du campus 1.1 gcc1
2.1
1.0
defaut doit generalement ^etre indiquee ; il s'agit d'une entree associant une passerelle
au reseau 0.0.0.0. Tous les paquets destines a un reseau inconnu seront expedies par
ce chemin. Sur sophus, cette table pourrait ressembler a celle-ci :
Reseau Passerelle Interface
149.76.1.0 - fddi0
149.76.2.0 149.76.1.2 fddi0
149.76.3.0 149.76.1.3 fddi0
149.76.4.0 - eth0
149.76.5.0 149.76.1.5 fddi0
::: ::: :::
groucho
maths physique
La gure 2.3 montre une partie de l'espace de nommage. Tout en haut de cette ar-
borescence, l'entree denotee par un simple point, correspond a la racine et est appele
root domain. Pour indiquer qu'un nom d'h^ote est FQDN (c'est-a-dire completement
2.6. DNS : Le Domain Name System 31
qualie, et non pas relatif a un domaine local implicite), on l'ecrit parfois en le ter-
minant par un point. Cela signie que la derniere composante est le domaine racine
(root domain).
En fonction de sa position dans la hierarchie, un domaine peut ^etre appele de premier
niveau (top-level), second niveau ou troisieme niveau. Il peut y en avoir encore plus,
mais le cas est assez rare. Voici plusieurs domaines americains de premier niveau que
vous rencontrerez tres souvent :
;
; Information ayant autorit
e pour physique.groucho.edu.
@ IN SOA niels.physique.groucho.edu. janet.niels.physique.groucho.edu. (
940902 ; numero de serie
360000 ; mise a jour
3600 ; tentative apres echec
3600000 ; delai d'expiration
3600 ; ttl par defaut (time to live)
)
;
; Serveurs de noms
IN NS niels
IN NS gauss.maths.groucho.edu.
gauss.maths.groucho.edu. IN A 149.76.4.23
;
; Physique th
eorique (sous-reseau 12)
niels IN A 149.76.12.1
IN A 149.76.1.12
nameserver IN CNAME niels
otto IN A 149.76.12.2
quark IN A 149.76.12.4
down IN A 149.76.12.5
strange IN A 149.76.12.6
...
; Physique des particules (acc
el
erateur) (sous-r eseau 14)
boson IN A 149.76.14.1
muon IN A 149.76.14.7
bogon IN A 149.76.14.12
...
;
; Le domaine 12.76.149.in-addr.arpa.
@ IN SOA niels.physique.groucho.edu. janet.niels.physique.groucho.edu. (
940902 360000 3600 3600000 3600
)
2 IN PTR otto.physique.groucho.edu.
4 IN PTR quark.physique.groucho.edu.
5 IN PTR down.physique.groucho.edu.
6 IN PTR strange.physique.groucho.edu.
;
; Le domaine 76.149.in-addr.arpa.
@ IN SOA vax12.gcc.groucho.edu. joe.vax12.gcc.groucho.edu. (
940701 360000 3600 3600000 3600
)
...
; sous-r
eseau 4: departement mathematiques.
1.4 IN PTR sophus.maths.groucho.edu.
17.4 IN PTR erdos.maths.groucho.edu.
23.4 IN PTR gauss.maths.groucho.edu.
...
; sous-r
eseau 12: departement de physique, zone separ
ee.
12 IN NS niels.physique.groucho.edu.
IN NS gauss.maths.groucho.edu.
niels.physique.groucho.edu. IN A 149.76.12.1
gauss.maths.groucho.edu. IN A 149.76.4.23
...
Une consequence importante du systeme in-addr.arpa est que les zones ne peuvent
^etre creees que comme sur-ensembles de reseaux IP, et encore pis, que ces masques re-
seaux doivent ^etre alignes sur des octets. Tous les sous-reseaux de l'universite Groucho
Marx ont un masque de 255.255.255.0, par consequent une zone in-addr.arpa peut
^etre creee pour chaque sous-reseau. Toutefois, si le masque etait 255.255.255.128,
la creation de zones pour le sous-reseau 149.76.12.128 serait impossible, car il n'y a
38 Chapitre 2. Le reseau TCP/IP
aucun moyen de dire au DNS que le domaine 12.76.149.in-addr.arpa a ete separe
en deux zones d'autorite, avec des h^otes repartis de 1 a 127, et 128 a 255.
39
Chapitre 3
Conguration de
l'equipement reseau
3.1 Peripheriques, pilotes, etc.
Jusqu'a maintenant, nous avons parle d'interfaces reseau et de TCP/IP en general,
mais nous n'avons pas vu ce qui se passe lorsque le (( code reseau )) du noyau accede
a la partie materielle. Pour cela, nous devons introduire le concept d'interfaces et de
pilotes de peripheriques.
Tout d'abord, il y a bien s^ur l'equipement lui-m^eme, par exemple la carte Ethernet :
C'est une plaque de resine Epoxy, peuplee de nombreux composants electroniques, et
inseree dans un des nombreux connecteurs d'extension de votre PC. Elle constitue ce
que l'on nomme generalement un peripherique.
Pour que vous puissiez utiliser cette carte Ethernet, le noyau de Linux doit contenir
des fonctions speciales connaissant la methode a employer pour acceder a ce periphe-
rique. Ce sont les fameux pilotes de peripheriques. Par exemple, Linux possede des
pilotes pour plusieurs marques de cartes Ethernet qui se ressemblent beaucoup. Ils
sont connus en tant que (( serie Becker )), du nom de leur auteur, Donald Becker. Un
exemple dierent, le pilote D-Link gere un adaptateur de poche D-Link qui se branche
sur le port parallele du PC.
Mais, lorsque nous disons qu'un pilote (( gere )) un peripherique, qu'entendons-nous par
la ? Revenons a la carte Ethernet que nous examinions tout a l'heure. Le pilote doit
^etre capable de communiquer par un moyen quelconque avec la logique presente sur
ce montage electronique : il doit pouvoir lui envoyer des commandes et des donnees,
et la carte doit delivrer toute donnee recue a ce pilote.
Dans les PC, cette communication se fait par l'intermediaire d'une zone de memoire
destinee aux entrees/sorties (E/S) qui donne acces aux registres de la carte. Toutes
40 Chapitre 3. Conguration de l'equipement reseau
Interface
reseau eth0 eth2 eth1 eth3
Pilote de
peripherique Pilote SMC Pilote 3Com
Materiel
Fig. 3.1 - Les relations entre les interfaces, les pilotes et le materiel.
3.1. Peripheriques, pilotes, etc. 41
les commandes et les donnees que le noyau envoie doivent passer par ces registres. La
memoire d'E/S est generalement decrite en donnant son adresse de depart, ou adresse
de base. Les adresses de base typiques pour les cartes Ethernet sont 0x300 ou 0x360.
En principe, vous n'avez pas a vous occuper de ces problemes materiels, car le noyau
teste ces caracteristiques lors de l'amorcage pour tenter de detecter les peripheriques
installes. Il lit plusieurs adresses memoire et compare les donnees trouvees avec ce
qu'il devrait voir si certaines cartes Ethernet etaient presentes. Toutefois, il est pos-
sible qu'il n'arrive pas a detecter certain materiel ; c'est parfois le cas avec des cartes
Ethernet bon marche qui ne sont pas des clones parfaits des realisations standard
d'autres constructeurs. De plus, Linux n'essaiera de detecter que le premier periphe-
rique Ethernet. Si vous utilisez plusieurs cartes, il vous faudra l'indiquer explicitement
au noyau.
Vous pourrez aussi parfois ^etre oblige d'indiquer au noyau un autre parametre: la
ligne d'IRQ (interruptions materielles). Les peripheriques generent une interruption
pour indiquer au noyau qu'ils ont besoin qu'il s'occupe d'eux, par exemple lorsque
des donnees sont arrivees ou qu'un evenement special s'est produit. Dans un PC,
ces signaux electriques peuvent se produire sur l'une des 15 lignes d'interruption,
numerotees de 0 a 15. 1 Le numero du canal d'interruption assigne a un peripherique
est appele son IRQ, pour resumer.
Comme nous l'avons explique dans le chapitre 2, le noyau accede a un peripherique
par l'intermediaire d'une interface. Les interfaces sont des parties logicielles qui orent
un ensemble de fonctions communes pour tout type de materiel, comme l'envoi ou la
reception de datagrammes.
On les identie par des noms, denis directement a l'interieur du noyau ; ce ne sont pas
des chiers decrivant un peripherique comme ceux presents dans le repertoire /dev.
Les noms courants pour les interfaces Ethernet sont eth0, eth1, etc. L'assignation des
interfaces aux peripheriques depend souvent de l'ordre dans lequel ils ont ete congu-
res et detectes. Par exemple, la premiere carte Ethernet installee deviendra eth0, la
suivante eth1, et ainsi de suite. Les interfaces SLIP et PPP sont gerees dieremment
des autres, car elles sont dynamiques : chaque fois qu'une telle connexion est etablie,
le noyau assigne une nouvelle interface au port serie concerne.
Les relations entre le materiel, les pilotes de peripheriques et les interfaces sont illus-
trees dans la gure 3.1.
Lors de l'amorcage, le noyau ache quels sont les peripheriques qu'il a pu detecter
et le nom des interfaces qu'il leur a assigne. Voici un tout petit extrait de ce que l'on
peut voir a l'ecran lors du demarrage de Linux :
.
.
This processor honours the WP bit even when in supervisor mode. Good.
1 Les IRQ 2 et 9 sont les m^emes, car le PC possede deux processeurs d'interruption gerant 8
:
lignes chacun, montes en cascade. Le processeur secondaire est connecte a la ligne IRQ 2 du premier.
42 Chapitre 3. Conguration de l'equipement reseau
Floppy drive(s): fd0 is 1.44M
Swansea University Computer Society NET3.010
IP Protocols: ICMP, UDP, TCP
PPP: version 0.2.1 (4 channels) OPTIMIZE_FLAGS
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
SLIP: version 0.7.5 (4 channels)
CSLIP: code copyright 1989 Regents of the University of California
dl0: D-Link DE-600 pocket adapter, Ethernet Address: 00:80:C8:71:76:95
Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
Linux version 1.1.11 (okir@monad) #3 Sat May 7 14:57:18 MET DST 1994
Nous voyons que le noyau a ete compile avec le support de TCP/IP et qu'il comprend
des pilotes pour SLIP, CSLIP et PPP. La troisieme ligne en partant de la n indique
qu'un adaptateur D-Link a ete detecte et installe en tant qu'interface dl0. Si vous
avez une carte Ethernet, le noyau achera une ligne commencant par eth0, suivie par
le type de carte detectee, par exemple :
eth0: 3c509 at 0x300 tag 1, BNC port, address 00 60 8c 53 d4 1d, IRQ 15.
3c509.c:1.03 10/8/94 becker@cesdis.gsfc.nasa.gov
Si vous avez installe une carte Ethernet et qu'aucun message de ce type n'appara^t,
c'est que le noyau est incapable de detecter la carte correctement. Nous verrons com-
ment remedier a cette situation un peu plus loin.
En depit de ce qui est ecrit entre parentheses, vous devez repondre y quel que soit
le type de peripherique reseau, Ethernet, SLIP, ou PPP. En repondant y, le support
Ethernet est valide automatiquement ; mais les autres types de pilotes reseau feront
l'objet de questions separees.
SLIP (serial line) support? (CONFIG_SLIP) [y]
SLIP compressed headers (SL_COMPRESSED) [y]
PPP (point-to-point) support (CONFIG_PPP) [y]
PLIP (parallel port) support (CONFIG_PLIP) [n]
Ces questions concernent les dierentes couches de protocoles supportees par Linux.
SLIP permet le transport de datagrammes IP sur les ports serie ; CSLIP en est une
amelioration, les en-t^etes TCP/IP sont compresses. Notez que cette option ne valide
pas automatiquent CSLIP, mais inclut les fonctions necessaires dans le noyau pour
pouvoir l'utiliser eventuellement.
PPP est un autre protocole utilise pour realiser une liaison reseau a travers des liaisons
serie. Il est bien plus souple que SLIP et n'est pas limite a IP ; il peut tranferer
n'importe quel type de paquet reseau. Si cette option n'appara^t pas chez vous, c'est
que vous possedez une version peu recente de Linux.
PLIP permet d'envoyer des datagrammes IP a travers un port imprimante parallele.
Peu performant, il est surtout utilise pour communiquer tant bien que mal avec des
PC fonctionnant sous MS-DOS, ou sur des machines portables depourvues de cartes
Ethernet.
Les questions suivantes concernent les cartes Ethernet de dierents constructeurs.
De jour en jour, de nouveaux pilotes appara^ssent et par consequent vous verrez de
plus en plus de questions ajoutees a cette section. Si vous desirez realiser un noyau
utilisable sur plusieurs machines equipees de cartes dierentes, vous pouvez valider
plusieurs pilotes.
NE2000/NE1000 support (CONFIG_NE2000) [y]
WD80*3 support (CONFIG_WD80x3) [n]
44 Chapitre 3. Conguration de l'equipement reseau
SMC Ultra support (CONFIG_ULTRA) [n]
3c501 support (CONFIG_EL1) [n]
3c503 support (CONFIG_EL2) [n]
3c509/3c579 support (CONFIG_EL3) [n]
HP PCLAN support (CONFIG_HPLAN) [n]
AT1500 and NE2100 (LANCE and PCnet-ISA) support (CONFIG_LANCE) [n]
AT1700 support (CONFIG_AT1700) [n]
DEPCA support (CONFIG_DEPCA) [n]
D-Link DE600 pocket adaptor support (CONFIG_DE600) [y]
AT-LAN-TEC/RealTek pocket adaptor support (CONFIG_ATP) [n]
*
* CD-ROM drivers
*
...
Pour pouvoir utiliser TCP/IP, vous devez repondre y a cette question. Si vous repon-
dez n, vous pourrez toutefois compiler le noyau avec le support IPX.
IP forwarding/gatewaying (CONFIG_IP_FORWARD) [n]
Vous devez valider cette option si votre systeme fonctionne en passerelle entre deux
reseaux Ethernet, ou encore entre un reseau et un lien SLIP/PPP. Bien qu'il n'y ait
aucun inconvenient majeur a laisser cette possibilite en service, vous pouvez preferer
ne pas la valider an de congurer votre machine en tant que rewall. Les Firewalls
sont des h^otes connectes a deux reseaux ou plus, mais qui ne routent aucun trac
entre eux. Ils sont couramment employes pour orir des acces Internet a moindres
3.2. Conguration du noyau 45
risques pour le reseau local interne. Les utilisateurs sont autorises a se connecter sur
le rewall et acceder ainsi a l'Internet, mais les machines locales sont protegees de
toute attaque exterieure puisqu'aucune connexion ne pourra traverser ce rewall.
*
* (it is safe to leave these untouched)
*
PC/TCP compatibility mode (CONFIG_INET_PCTCP) [n]
Ici, il s'agit de valider ou non le protocole RARP (Reverse Address Resolution Pro-
tocol). Il sert aux stations diskless et aux terminaux X, qui ont besoin d'obtenir leur
adresse IP au demarrage. Vous ne devez valider RARP que si vous compter utiliser
de tels clients.
Assume subnets are local (CONFIG_INET_SNARL) [y]
Lorsqu'il envoie des donnees par TCP, le noyau doit les tronconner en plusieurs pa-
quets avant de les passer a la couche IP. Pour les h^otes pouvant ^etre atteints par un
reseau local comme l'Ethernet, il creera des paquets plus grands que pour ceux qui
vont parcourir une longue distance 2 . Si vous ne validez pas SNARL ((( SubNets ARe
Local )), les sous-reseaux sont locaux), le noyau considerera qu'un reseau n'est local
que s'il y a une interface y etant directement rattachee. Toutefois, si vous regardez le
reseau de classe B de l'universite Groucho Marx, la totalite de cette classe B est locale,
mais la plupart des h^otes sont interfaces avec seulement un ou deux sous-reseaux. Si
vous validez SNARL, le noyau pourra considerer que tous les sous-reseaux sont locaux
et utiliser de grands paquets avec toutes les machines du campus.
Si vous avez besoin de paquets de plus petite taille en direction de certains h^otes (parce
que les donnees passent par exemple par une liaison modem SLIP), vous pourrez le
faire gr^ace a l'option mtu de la commande route, qui est brievement decrite a la n
de ce chapitre.
Disable NAGLE algorithm (normally enabled) (CONFIG_TCP_NAGLE_OFF) [n]
Cette option valide le support de IPX, le protocole de transport utilise par les reseaux
Novell. Il est toujours en developpement, et n'est pas tres utilisable pour l'instant.
Le developpement est bloque en raison du manque d'information disponible sur les
dierentes couches de ce protocole, qui n'est pas du domaine public : les specications
sont vendues a un prix inadmissible, et selon une clause de non-divulgation. Si la
situation se debloque, il sera peut-^etre possible dans l'avenir d'echanger des donnees
avec des utilitaires MS-DOS utilisant IPX et de router du trac entre des reseaux
Novell a travers une liaison PPP.
A partir de la version 1.1.16, Linux ore un nouveau type de pilote, le pilote dummy ;
que l'on peut traduire par (( bidon )), vous allez voir pourquoi. La question suivante
appara^t vers le debut de la section concernant les pilotes reseau :
Dummy net driver support (CONFIG_DUMMY) [y]
Ce pilote ne fait pas grand-chose, mais il est tres utile sur des machines isolees ou
reliees uniquement en SLIP ou PPP. C'est, en resume, une interface loopback sup-
plementaire, qui permet aux machines faisant du SLIP mais n'ayant aucune liaison
Ethernet, d'avoir une interface correspondant en permanence a votre adresse IP. Vous
trouverez des explications plus detaillees sur le sujet dans la section The Dummy
Interface du chapitre 5, a la page 74.
Cette detection automatique pose deux problemes. Le premier est que le code peut
ne pas detecter correctement toutes les cartes ; c'est particulierement vrai dans le cas
de clones bon marche courants et pour quelques cartes de type WD80x3. Le second
probleme, est que le noyau ne prendra en compte qu'une seule carte Ethernet, la
premiere rencontree, et ne cherchera pas plus loin. Ce comportement est volontaire,
car on suppose que, dans ce cas, vous voulez contr^oler quelle carte est assignee a quelle
interface.
Si vous utilisez plusieurs cartes Ethernet dans la m^eme machine, ou si l'autodetection
echoue, il vous faudra indiquer au noyau le materiel utilise et les adresses de base a
prendre en compte.
Avec Net-3, il y a deux facons de faire. L'une consiste a changer ou ajouter les infor-
mations necessaires dans le chier drivers/net/Space.c des sources du noyau. Cette
methode n'est recommandee que si vous connaissez bien le code reseau de Linux.
L'autre solution, bien meilleure, consiste a indiquer ces informations au moment de
l'amorcage de Linux. Si vous utilisez lilo pour lancer votre systeme, il vous est pos-
sible de passer des parametres au noyau en les speciant par l'option append du chier
50 Chapitre 3. Conguration de l'equipement reseau
lilo.conf. Pour informer Linux de la presence d'une carte Ethernet particuliere, vous
pouvez mettre :
ether=irq,adresse,param1,param2,nom
Les quatre premiers parametres sont numeriques, le dernier est le nom du periphe-
rique. Toutes les valeurs numeriques sont optionnelles ; si l'une d'elles est omise ou
initialisee a zero, le noyau tentera de la detecter automatiquement ou utilisera une
valeur par defaut.
Le premier parametre ajuste la ligne d'IRQ assignee au peripherique. Par defaut, le
noyau tentera une autodetection ; le pilote pour 3c503 a la particularite de selectionner
une IRQ libre parmi les IRQ 5, 9, 3 et 4, et congure la carte pour cette valeur.
Le parametre adresse donne l'adresse de base d'entrees/sorties de la carte ; la valeur
zero indique qu'il faudra tenter une detection automatique aux adresses citees plus
haut.
Les deux parametres restants peuvent avoir dierentes signications selon les pilotes.
Pour ce qui est des cartes utilisant de la memoire partagee, comme les WD80x3,
ils specient le debut et la n de cette zone de memoire. D'autres cartes utilisent
param1 pour ajuster le niveau des messages de d eboguage aches. Les valeurs de
1 a 7 correspondent a une verbosite croissante, alors que 8 les supprimera tous ; 0
denote la valeur par defaut. Les pilotes 3c503 utilisent param2 pour selectionner le
transceiver interne (defaut) ou un bo^tier externe (avec une valeur de 1). Le premier
utilise le connecteur BNC, le second le port AUI de la carte.
Si vous avez deux cartes Ethernet, vous pouvez laisser Linux detecter la premiere et
passer les parametres pour la seconde par lilo. Vous devez toutefois faire attention
que le pilote ne trouve pas accidentellement la seconde carte avant la premiere, vous
disposez pour cela de l'option reserve de lilo, qui indique explicitement au noyau
d'eviter de tester l'espace d'E/S occupe par cette seconde carte.
Par exemple, pour que Linux installe un second adaptateur Ethernet a 0x300 en tant
que eth1, vous passerez les parametres suivants :
reserve=0x300,32 ether=0,0x300,eth1
L'option reserve permet d'^etre assure qu'aucun pilote ne tentera d'acceder a l'espace
d'entrees/sorties de la carte pour tenter d'autodetecter quelque peripherique. Vous
pouvez egalement utiliser les parametres du noyau pour forcer l'autodetection de
eth0 :
reserve=0x340,32 ether=0,0x340,eth0
ether=0,-1,eth0
3.5. Le pilote PLIP 51
Si vous avez congure votre port parallele dieremment, vous devrez changer ces
valeurs dans le chier drivers/net/Space.c des sources du noyau de Linux et recompiler
une nouvelle version.
Les ports imprimante restent utilisables normalement : ils ne sont pris en charge par
le pilote PLIP que lorsque l'interface correspondante est conguree (( up )).
5 NCSA telnet est un celebre programme pour MS-DOS qui fournit TCP/IP sur Ethernet ou
:
PLIP, et supporte telnet et FTP.
52 Chapitre 3. Conguration de l'equipement reseau
3.6 Les pilotes SLIP et PPP
SLIP (Serial Line IP) et PPP (Point-to-Point Protocol) sont tres utilises pour transfe-
rer des paquets IP par des liaisons serie. Beaucoup de fournisseurs de connectivite IP
orent des acces a l'Internet par connexion telephonique, a l'aide d'un modem et de
SLIP ou PPP (seul moyen nancierement a la portee des particuliers pour l'instant).
Pour employer ces protocoles, aucune modication materielle n'est a eectuer ; vous
pouvez utiliser n'importe quel port serie. Comme la conguration de ces ports serie
n'est pas specique a TCP/IP, un chapitre separe y est consacre. Pour plus d'infor-
mations, consultez par consequent le chapitre 4, page 53.
53
Chapitre 4
Conguration des ports serie
Certaines rumeurs rapportent qu'il y aurait des gens n'ayant qu'un ordinateur, et
trop pauvres pour s'orir une liaison Internet T1. Il para^trait que pour acceder tout
de m^eme au courrier electronique et aux News Usenet, ils utilisent des connexions
SLIP, des reseaux UUCP et des serveurs BBS, qui passent par le reseau telephonique
public.
Ce chapitre est destine a aider tous ceux qui, comme eux, sont relies au reste du monde
gr^ace a un modem. Toutefois, nous ne pourrons entrer dans le detail ici, comme la
conguration du modem en reponse pour realiser un serveur par exemple. Consultez
le document Linux Serial HOWTO de Greg Hankins 1 , qui est poste regulierement
dans le forum Usenet comp.os.linux.announce, pour obtenir des renseignements
plus precis.
Si vous n'avez rien de tout cela sur votre systeme, vous allez devoir les creer.
56 Chapitre 4. Conguration des ports serie
Passez superutilisateur et tapez :
# mknod -m 666 /dev/cua1 c 5 65
# chown root.root /dev/cua1
entendu tous ces circuits, ainsi que le 8250, qui fut le premier ERAU a equiper les
ordinateurs de type PC.
Dans la conguration par defaut, le noyau teste les quatre ports serie standard COM1
a COM4. Ils se verront assigner les nombres mineurs 64 a 67, comme nous l'avons vu
plus haut.
Si vous voulez congurer vos ports serie correctement, il vous faudra installer le pro-
gramme setserial de Ted Tso's, ainsi que le script /etc/rc.serial qui sera execute au
demarrage du systeme. Voici un exemple d'un tel script :
# /etc/rc.serial - script de configuration des ports s
erie.
#
# D
etection interruptions
/sbin/setserial -W /dev/cua*
# Configuration des p
eriph
eriques
/sbin/setserial /dev/cua0 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua1 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua2 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua3 auto_irq skip_test autoconfig
Consultez la documentation fournie avec setserial pour avoir une explication detaillee
des parametres a employer.
Si votre carte serie n'est pas detectee, ou si la commande setserial -bg montre une
conguration erronee, vous devrez forcer les valeurs correctes en les indiquant explici-
tement. Ce probleme se produit parfois avec des modems internes equipes de circuits
Rockwell. Si, par exemple, l'ERAU est detecte comme etant un NSC 16450, alors qu'il
s'agit en realite d'un compatible NSC 16550, vous devrez modier la conguration du
port en question ainsi :
Il existe des options similaires pour forcer le port de communication, l'adresse de base,
et la ligne d'IRQ utilisee. Lisez la page de manuel de setserial(8) pour plus de details.
Si votre modem supporte le contr^ole de
ux materiel, assurez-vous qu'il soit bien en
service. Les programmes de communications n'essaient pas de le valider par defaut ;
vous devez, aussi etonnant que cela puisse para^tre, le faire manuellement. La meilleure
solution est de le mettre en service au lancement du systeme en mettant dans le chier
rc.serial une commande stty comme ceci :
Cette commande vous achera le parametrage du port serie concerne avec tous les
details ; chaque drapeau est ache, avec un signe negatif s'il est invalide. Vous devrez
trouver dans la liste, crtscts. Si vous voyez -crtscts, c'est que le contr^ole de
ux
n'est pas en service.
59
Chapitre 5
Conguration du reseau
TCP/IP
Nous allons decrire dans ce chapitre toutes les etapes necessaires pour congurer
TCP/IP sur votre machine. En partant de l'assignation des adresses IP, nous verrons
la conguration des interfaces et, petit a petit, aboutirons a la description de quelques
outils tres pratiques pour traquer les eventuels problemes pouvant survenir sur votre
installation reseau.
Les dierentes operations que nous allons decrire ne seront a eectuer qu'une seule
fois, pour la majorite d'entre elles. Ensuite, vous n'aurez de modications a faire que
lors de l'ajout d'une nouvelle machine sur le reseau, ou si vous recongurez entierement
le systeme. Quelques commandes seront toutefois a executer a chaque demarrage de
Linux, on les invoque generalement depuis les scripts /etc/rc du systeme.
Tres souvent, la partie de cette procedure specique au reseau se trouve dans un
script appele rc.net ou rc.inet. Quelquefois, vous en trouverez deux, nommes rc.inet1 et
rc.inet2, le premier initialisant la partie reseau relative au noyau, le second s'occupant
de lancer les services et applications de base. Ici, nous adopterons cette derniere
solution, ces chiers rc.inet1 et rc.inet2 ayant l'avantage de bien clarier les choses.
Nous allons commencer par rc.inet1, et nous traiterons des applications dans les pro-
chains chapitres. Apres avoir assimile celui-ci, vous devriez avoir etabli une sequence
de commandes qui congurent proprement le reseau TCP/IP sur votre ordinateur.
Vous devrez alors remplacer tous les exemples contenus dans rc.inet1 par vos propres
commandes, et vous assurer que ce script est bien execute au demarrage du systeme.
Les scripts rc fournis dans votre distribution favorite de Linux devraient vous donner
un bon exemple de ce qu'il faut faire.
60 Chapitre 5. Conguration du reseau TCP/IP
5.1 Montage du systeme de chiers proc
Quelques outils de conguration de la version Net-2 ont besoin du systeme de chiers
proc pour communiquer avec le noyau. Il s'agit d'une interface qui permet d'acceder
a certaines informations internes par l'intermediaire de chiers. Lorsque /proc est
monte, vous pouvez lister son contenu comme n'importe quel autre systeme de chiers,
et acher par les methodes habituelles toutes les informations disponibles. Vous y
trouverez par exemple le chier loadavg, contenant la charge de la machine, meminfo,
qui montre l'utilisation instantanee de la memoire et de la zone de swap.
Le code reseau ajoute a tout cela le repertoire net. Il contient un certain nombre
de chiers montrant certaines choses comme les tables ARP du noyau, l'etat des
connexions TCP, les tables de routage, etc. La plupart des outils d'administration
reseau obtiennent leurs informations en lisant ces donnees.
Le systeme de chiers proc (connu aussi sous le nom de procfs) est generalement monte
dans /proc lors du demarrage du systeme. La meilleure methode pour qu'il le soit est
d'ajouter la ligne suivante dans le chier /etc/fstab :
# point de montage du procfs:
none /proc proc defaults
de recompiler l'ensemble, mais quelquefois il vous faudra quand m^eme changer tous
les programmes. L'ensemble est generalement distribue parallelement aux nouvelles
sources du noyau, dans des chiers appeles net-XXX.tar.gz, ou varXXX correspond au
numero de version. Pour Linux 1.0, il s'agit de 0.32b. Le dernier noyau, a l'heure ou
nous ecrivons ces lignes (1.1.72 et plus), necessite au minimum net-tools-1.1.56.tar.gz.
Si vous desirez compiler et installer les applications TCP/IP standard vous-m^eme,
vous en trouverez les sources sur la plupart des serveurs FTP ou BBS diusant Linux.
Ce sont des versions plus ou moins modiees des programmes de Net-BSD ou quelques
autres sources. D'autres grosses applications, comme Mosaic, Archie, Gopher ou IRC
doivent ^etre obtenues separement, comme pour tout autre systeme UNIX. La plupart
se compilent sans modication sous Linux si vous suivez correctement les instructions.
Le site FTP ociel de Net-3 est sunacm.swan.ac.uk, repris par sunsite.unc.edu
dans le repertoire system/Network/sunacm. Le code derive de BSD par Matthias Ur-
lich peut ^etre obtenu sur ftp.ira.uka.de dans /pub/system/linux/netbsd. En France,
allez d'abord voir sur ftp.ibp.fr, le repertoire /pub/linux contient des miroirs de
dierents sites ; vous ne devriez pas avoir besoin d'utiliser de co^uteuses liaisons inter-
nationales pour vous procurer du code source Linux.
# hostname nom
La pratique courante est d'indiquer ici le nom d'h^ote non qualie, c'est-a-dire sans
specier le nom de domaine. Par exemple, les machines de (( La biere virtuelle )) peuvent
s'appeler trappiste.bibine.com, kro.bibine.com, etc. Ce sont leurs noms ociels,
pleinement qualies. Leur noms d'h^otes locaux seraient alors uniquement la premiere
composante, comme trappiste. Toutefois, comme le nom local est frequemment utilise
pour trouver l'adresse IP de la machine, vous devez vous assurer que le resolver
soit capable de le faire ; cela signie que vous devez indiquer ce nom dans le chier
/etc/hosts.
Certains suggerent d'utiliser la commande domainname pour indiquer au noyau quel
est le nom de domaine, la partie restante du FQDN. Ainsi, il serait possible de com-
biner la sortie de hostname et de domainname pour obtenir le nom qualie. Pourtant,
cette solution n'est qu'a moitie correcte : la commande domainname est normalement
utilisee pour initialiser le domaine NIS de la machine, qui peut ^etre totalement die-
rent du domaine DNS auquel cet h^ote appartient.
191 72 0 0
191 72 1 0 191 72 2 0
monde exterieur, vous n'avez pas besoin de creer de sous-reseaux: nous expliquerons
pourquoi dans le chapitre 7.
Pour gerer les deux reseaux locaux Ethernet, l'administrateur des brasseurs virtuels
a decide d'utiliser 8 bits de la partie h^ote comme bits additionnels de sous-reseau.
Cela lui laisse 8 autres bits pour la partie h^ote, permettant 254 machines sur chacun
des sous-reseaux. Il assigne alors le sous-reseau numero 1 aux brasseurs, et donne le
numero 2 aux viticulteurs. Leurs adresses reseaux respectives sont alors 172.16.1.0
et 172.16.2.0. Le masque de sous-reseau vaut 255.255.255.0.
La machine kro, qui est la passerelle entre les deux reseaux, se voit attribuer un
nombre d'h^ote de 1 sur chacun d'eux, ce qui donne respectivement les adresses IP
172.16.1.1 et 172.16.2.1. La gure 5.1 illustre la situation, montrant la passerelle
et les deux sous-reseaux.
Notez que dans cet exemple, nous utilisons un reseau de classe B pour simplier les
choses ; une classe C serait plus realiste. Sous les versions recentes de Linux, les sous-
reseaux ne sont pas bornes sur 8 bits, par consequent m^eme un reseau de classe C peut
^etre tronconne en plusieurs sous-reseaux. Par exemple, vous pourriez utiliser 2 bits
de la partie h^ote pour le masque reseau, ce qui vous donnerait quatre sous-reseaux
possibles comportant chacun 64 machines 1 .
1 Le dernier nombre de chaque reseau est reserve a l'adresse de diusion, donc il ne s'agirait en
:
realite que de 63 machines possibles par sous-reseau.
5.7. Redaction des chiers hosts et networks 65
Tout comme avec les adresses IP des machines, vous aurez parfois besoin d'utiliser un
nom symbolique pour designer les adresses reseau. Par consequent, le chier /etc/hosts
est accompagne d'un chier semblable, /etc/networks, qui est son equivalent pour les
reseaux. Chez nos brasseurs, nous pourrions installer un chier networks comme celui-
ci 3 :
3 Les noms du chier networks ne doivent pas entrer en con
it avec ceux du chier hosts, sous
:
peine de reactions tres bizarres de certains programmes.
5.8. Conguration des interfaces reseau 67
Les arguments add et del determinent l'action a eectuer : add ajoute la route vers
cible, alors que del la supprime.
# ifconfig lo 127.0.0.1
Pour voir quelle est la conguration courante d'une interface, appelez simplement
ifcong en lui passant le nom de l'interface en argument :
$ ifconfig lo
lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast [NONE SET] Mask 255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU 2000 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0
La encore, vous pouvez indiquer le nom localhost au lieu de l'adresse IP.
Ensuite, vous devez tester que tout marche bien, par exemple en utilisant ping. Le
programme ping est un peu l'equivalent d'un sonar pour le reseau 4. On emploie ping
pour verier qu'il est bien possible d'atteindre une adresse donnee, et pour mesurer
le temps de propagation entre le moment ou l'on envoie un datagramme et ou il nous
revient. On appelle parfois ce delai le (( temps moyen de propagation )), ou (( round-trip
time )).
# ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=32 time=1 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=32 time=0 ms
^C
En appelant ping comme ci-dessus, il emettra des paquets indeniment jusqu'a ce qu'il
soit interrompu par l'utilisateur. Le ^C visible dans l'exemple correspond au moment
ou le programme a ete arr^ete par Ctrl-C 5 .
Notre exemple montre que les paquets a destination de 127.0.0.1 sont correctement
delivres et qu'une reponse nous est retournee quasi instantanement. Cela prouve que
nous avons reussi a congurer notre premiere interface reseau.
Si la sortie que vous obtenez de ping ne ressemble pas a ce qui est montre ci-dessus,
c'est que vous avez un probleme quelque part. Veriez que les programmes ifcong
et route que vous utilisez sont compatibles avec la version du noyau, et avant tout,
que ce noyau a bien ete compile avec le support du reseau (vous pouvez le verier
par la presence du repertoire /proc/net). Si vous obtenez le message d'erreur (( Net-
work unreachable )), signiant que le reseau est inaccessible, c'est que vous vous ^etes
probablement trompe en tapant la commande route. Veriez que vous utilisez bien la
m^eme adresse que celle indiquee a ifcong.
Les etapes que nous venons de voir sont susantes pour faire fonctionner des appli-
cations reseau sur une machine isolee. Apres avoir ajoute les lignes de conguration
4 Souvenez-vous... (( Echoes )), Pink Floyd...
:
5 Certaines implementations de ping necessitent la commande
: ping -s pour obtenir le m^eme
resultat, typiquement celles des systeme BSD.
5.8. Conguration des interfaces reseau 69
que nous avons vues dans le chier rc.inet1 et vous ^etre assure que ces scripts rc.inet
sont bien appeles depuis /etc/rc, vous pouvez reamorcer votre machine et essayer dif-
ferentes applications. Par exemple, (( telnet localhost )) devrait etablir une connexion
avec votre propre machine, en vous proposant une invite login.
L'interface loopback n'est pas utile qu'en tant qu'exemple dans les livres sur le reseau,
ou comme test de conguration. Elle est utilisee par quelques applications lors du
fontionnement normal 6 . Par consequent, vous devez toujours la congurer, que votre
machine soit connectee a un reseau ou non.
Vous pouvez voir que ifcong initialise automatiquement l'adresse de diusion (le
champ Bcast ci-dessus) selon la methode usuelle, en mettant a 1 tous les bits de la
partie h^ote de l'adresse reseau. De plus, le MTU ((( Maximum Transfer Unit )), la
taille maximale des trames Ethernet que le noyau generera pour cette interface) a
ete positionne a 1 500 octets. Toutes ces valeurs peuvent ^etre forcees par des options
speciales que nous decrirons plus tard.
Tout comme avec l'interface loopback, nous devons installer une entree dans la table
de routage pour informer le noyau de ce reseau accessible par eth0. Chez nos brasseurs
virtuels, il faudra donc taper la commande route suivante :
# route add -net 172.16.1.0
6 Par exemple, toutes les applications basees sur les RPC utilisent l'interface loopback pour s'en-
:
registrer aupres du demon portmapper au demarrage du systeme.
70 Chapitre 5. Conguration du reseau TCP/IP
A premiere vue, cela semble tenir de la magie, puisqu'il n'appara^t pas clairement
comment route peut detecter par quelle interface cette route doit passer. Pourtant,
le truc est simple : le noyau regarde toutes les interfaces qui ont ete congurees et
compare l'adresse de destination (172.16.1.0 dans ce cas) avec la partie reseau de
l'adresse de l'interface (c'est-a-dire, un (( ET )) bit a bit entre l'adresse de l'interface
et le masque reseau). La seule qui correspond est eth0.
Mais qu'est-ce que cette option -net est donc censee faire ? Elle est utilisee car route
peut traiter aussi bien des routes vers des reseaux que des routes vers de simples h^otes
(comme vous l'avez vu plus haut dans le cas de localhost). Lorsqu'on lui passe une
adresse en notation sur 4 octets, le programme tente de deviner s'il s'agit d'un reseau
ou d'un h^ote, en regardant les bits de la partie h^ote. Si cette partie h^ote de l'adresse
vaut zero, route considere qu'il s'agit d'un reseau ; et d'une adresse d'h^ote dans le cas
contraire. Par consequent, route penserait que 172.16.1.0 est un h^ote et non pas un
reseau, car le programme ne sait pas que nous utilisons un sous-reseau. Nous devons
donc lui indiquer explicitement qu'il s'agit d'un reseau, en lui passant l'option -net.
Bien s^ur, la commande ci-dessus est un peu penible a taper, et peut entra^ner des
fautes de frappe. Une approche plus pratique consiste a employer les noms de reseaux
que nous avons denis dans le chier /etc/networks auparavant. Du coup, notre com-
mande devient plus lisible ; et l'on peut m^eme supprimer l'option -net puisque route
sait maintenant que 172.16.1.0 correspond a un reseau.
# route add biere-net
Maintenant que nous avons termine les etapes de base de la conguration, nous al-
lons verier que notre interface Ethernet fonctionne correctement. Choisissez un h^ote
connecte a votre reseau local, par exemple kro, et tapez :
# ping kro
PING kro: 64 byte packets
64 bytes from 172.16.1.1: icmp_seq=0. time=11. ms
64 bytes from 172.16.1.1: icmp_seq=1. time=7. ms
64 bytes from 172.16.1.1: icmp_seq=2. time=12. ms
64 bytes from 172.16.1.1: icmp_seq=3. time=3. ms
^C
Si vous ne voyez pas quelque chose ressemblant a cela sur votre ecran, c'est sans
nul doute que quelque chose ne va pas. Si vous rencontrez un taux inhabituel de
paquets perdus, il s'agit probablement d'un probleme materiel, comme des resistances
de terminaison absentes, un c^ablage incorrect, voire... l'oubli de connecter la machine
au reseau. Si vous ne recevez aucun paquet, testez la conguration de l'interface par la
commande netstat. Les statistiques sur les paquets emis et recus aches par ifcong
devraient vous indiquer si, au moins, des datagrammes ont ete envoyes. Si vous avez
5.8. Conguration des interfaces reseau 71
un acces physique a la machine distante, allez voir egalement les statistiques qu'elle
indique. Vous pourrez ainsi determiner exactement ou les paquets se sont perdus. De
plus, veriez les informations de routage par la commande route pour voir si les deux
h^otes sont correctement congures a ce niveau. Invoquee sans arguments, route ache
la totalite de la table de routage du noyau (l'option -n lui fait acher les adresses IP
au lieu des noms des machines) :
# route -n
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.1 * 255.255.255.255 UH 1 0 112 lo
172.16.1.0 * 255.255.255.0 U 1 0 10 eth0
La signication detaillee de ces champs est expliquee plus loin, dans la section (( La
commande netstat )). La colonne Flag contient une liste des drapeaux positionnes pour
chaque interface : U signie qu'elle est active, et H indique que l'adresse de destination
est un h^ote. Si le drapeau H est mis alors que vous vouliez que cette route soit une route
reseau, il vous faut retaper la commande route avec l'option -net. Pour verier qu'une
route est utilisee, testez si la valeur indiquee dans le champ Use de l'avant-derniere
colonne s'incremente entre deux invocations de ping.
Bien entendu, chaque machine du reseau des viticulteurs a laquelle vous voudrez par-
ler devra comporter une route correspondante vers le reseau des brasseurs. Sinon,
vous ne pourriez qu'envoyer des donnees depuis gueuze vers, par exemple, gamay ;
mais aucune reponse de cette derniere ne pourrait revenir, les paquets etant irreme-
diablement perdus.
72 Chapitre 5. Conguration du reseau TCP/IP
Cet exemple ne decrit qu'une passerelle permettant l'echange de datagrammes entre
deux reseaux Ethernet isoles. Maintenant, supposons que kro soit aussi connectee a
l'Internet (disons, par une liaison supplementaire SLIP). Nous voudrions alors que les
datagrammes a destination de n'importe quel reseau autre que celui des brasseurs soit
passes a kro. On peut realiser cela en la declarant comme passerelle par defaut :
Le nom de reseau default est un raccourci pour indiquer 0.0.0.0, qui denote la route
par defaut. Vous n'avez pas besoin d'ajouter ce nom au chier /etc/networks, il est
integre directement dans la commande route.
Si vous constatez de nombreuses pertes de paquets en essayant ping vers une machine
situee a une ou plusieurs passerelles de la, ce peut ^etre le signe d'un reseau tres charge.
La perte de datagrammes n'est pas tellement le fait de deciences techniques, mais
elle est surtout liee aux exces momentanes de charge sur les passerelles, qui peuvent
entra^ner un temps de transfert inconsiderement long, voire l'omission de quelques
paquets.
La serie de commandes a invoquer pour congurer les deux interfaces devient alors :
# ifconfig eth0 kro-if1
# ifconfig eth1 kro-if2
# route add biere-net
# route add pinard-net
une liaison point-a-point, car ce type de liaison met en jeu deux h^otes ((( points ))),
par opposition aux grands reseaux.
Prenons un exemple. Admettons que l'un des employes de (( La biere virtuelle )) possede
un ordinateur portable, connecte a kro par PLIP. Le portable s'appelle lee et ne
possede qu'un seul port parallele. A l'amorcage, ce port parallele sera enregistre en
tant que plip1. Pour activer le lien, vous devrez congurer l'interface plip1 a l'aide des
commandes suivantes 7 :
# ifconfig plip1 leffe pointopoint kro
# route add default gw kro
La premiere commande congure l'interface, signalant au noyau qu'il s'agit d'une
liaison point-a-point, l'autre c^ote ayant l'adresse de kro. La seconde installe la route
par defaut, utilisant kro comme passerelle. Sur cette derniere, une commande ifcong
similaire sera necessaire pour activer la liaison (route n'est pas utile ici) :
# ifconfig plip1 kro pointopoint leffe
Ce qui est interessant ici, c'est que l'interface plip1 sur kro n'a pas une adresse IP
separee, mais peut aussi se voir attribuer l'adresse 172.16.1.1 8.
Nous avons donc maintenant congure le routage du portable vers le reseau des bras-
seurs ; mais il nous faut encore trouver une methode pour router les paquets de n'im-
porte quel h^ote de ce reseau vers lee. Une solution particulierement lourde consiste
a rajouter une route specique sur chaque h^ote de ce reseau, declarant kro comme
passerelle vers lee :
# route add leffe gw kro
Lorsque l'on est confronte a l'etablissement de routes temporaires comme ici, faire
appel au routage dynamique est une solution nettement meilleure. Pour cela, une me-
thode consiste a employer gated, un demon de routage, que vous devrez installer sur
chaque h^ote du reseau de maniere a distribuer les informations de routage dynami-
quement. Cependant, la meilleure solution est encore proxy ARP (Address Resolution
Protocol, protocole de resolution d'adresses). Avec proxy ARP, kro repond a n'im-
porte quelle requ^ete ARP pour lee en envoyant sa propre adresse Ethernet. Le
resultat est que tous les paquets a destination de lee arriveront en realite a kro, qui
les renverra alors a l'ordinateur portable. Nous reviendrons sur proxy ARP dans la
section (( Checking the ARP Tables )).
Les futures versions des utilitaires reseau pour Linux contiendront un outil nomme
plipcong, qui permettra de choisir la ligne d'IRQ a utiliser pour le port imprimante.
Plus tard, il pourrait m^eme ^etre remplace par une commande ifcong plus generale.
7 Notez bien que pointopoint n'est pas une faute typographique ; c'est vraiment le nom de
:
l'option.
8 Par precaution, ne congurez toutefois de liaisons PLIP, SLIP ou PPP que lorsque vous avez
:
completement initialise les tables de routages pour vos reseaux. Avec certaines anciennes versions de
Linux, votre route reseau pourrait se mettre a pointer sur le lien point-a-point.
74 Chapitre 5. Conguration du reseau TCP/IP
5.8.6 Les interfaces SLIP et PPP
Bien que SLIP et PPP ne soient pas autre chose que de simples liaisons point-a-point
comme les connexions PLIP, il y a beaucoup plus a dire a leur propos. Generalement,
l'etablissement d'une liaison SLIP implique l'appel d'un numero de telephone du site
distant par l'intermediaire d'un modem, et passer la ligne serie en mode SLIP. PPP
s'utilise de la m^eme maniere. Les outils necessaires pour realiser des liaisons SLIP ou
PPP seront decrits dans les chapitres 7 et 8.
Les champs MTU et Metric montrent respectivement le MTU et la valeur metrique pour
cette interface. La valeur metrique est utilisee par certains systemes d'exploitation
pour determiner le prix ou l'ecacite d'une route. Pour l'instant, Linux n'utilise pas
cette valeur, mais elle est denie pour des raisons evidentes de compatibilite.
Les lignes RX et TX montrent combien de paquets ont ete recus (RX) ou transmis
(TX) sans erreurs, combien d'erreurs se sont produites, combien de paquets furent
elimines (probablement par manque de memoire), et combien ont ete perdus en raison
de debit trop important. Ces (( overruns )) se produisent generalement lorsque les
paquets arrivent trop rapidement, et que le noyau n'a pas eu le temps de servir la
derniere interruption alors qu'une autre arrive. Les drapeaux aches par ifcong
correspondent plus ou moins aux noms des options de sa ligne de commande ; nous
allons les expliquer ci-dessous.
Voici la liste des parametres reconnus par la commande ifcong, avec les noms des
drapeaux correspondants. Les options qui ne sont que des bascules de conditions
particulieres permettent egalement de les supprimer si elles sont precedees du signe
(( moins )) (-).
l'Ethernet, la valeur par defaut est 1 500 ; pour les interfaces SLIP
c'est 296.
arp Il s'agit d'une option specique aux reseaux comme l'Ethernet ou le
packet-radio. Elle met en service le protocole de resolution d'adresses,
ARP, an de detecter les adresses physiques des machines attachees
au reseau. Pour les reseaux cites, elle est toujours en service par
defaut.
Si ARP est hors service, ifcong achera le drapeau NOARP.
-arp Supprime l'utilisation de ARP sur cette interface.
promisc Passe l'interface en mode global (promiscuous mode). Sur un reseau
Ethernet (par exemple), cela a pour eet de faire recevoir tous les
paquets a l'interface, qu'ils soient destines a un autre h^ote ou non. On
peut ainsi analyser le trac sur le reseau a l'aide de ltres de paquets
ou autres outils. Generalement, cette technique appelee (( Ethernet
snooping )) est une bonne methode pour traquer certains problemes
reseau quasi indetectables autrement.
D'un autre c^ote, elle permet aux personnes malintentionnees de son-
der ce qui passe sur le reseau, a la recherche de mots de passe ou
pour realiser d'autres actions illegales. Pour se proteger, une solution
consiste a ne laisser personne connecter impunement sa machine sur
votre reseau Ethernet. Une autre option est d'utiliser des protocoles
d'authentication securises, comme Kerberos, ou le login SRA 10 .
Cette option correspond au drapeau PROMISC.
-promisc Annule le mode global.
allmulti Les adresses multicast sont un genre d'adresses de diusion limitees
a un groupe de machines qui n'ont pas necessairement besoin de se
trouver sur le m^eme sous-reseau. Elles sont supportees sous Linux a
partir du noyau version 1.1.72, en alpha-test.
Cette option correspond au drapeau ALLMULTI.
-allmulti Invalide les adresses multicast.
# netstat -nr
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.1 * 255.255.255.255 UH 1 0 50 lo
172.16.1.0 * 255.255.255.0 U 1 0 478 eth0
172.16.2.0 172.16.1.1 255.255.255.0 UGN 1 0 250 eth0
L'option -n indique a netstat d'acher les adresses IP selon la notation sur 4 octets
plut^ot que d'indiquer les noms symboliques des h^otes et des reseaux. C'est particulie-
rement utile lorsque l'on veut eviter des recherches de noms a travers le reseau (via
un serveur DNS ou NIS).
La seconde colonne montre la passerelle vers laquelle pointe l'entree de la table. Si au-
cune passerelle n'est utilisee, un asterisque est ache a la place. La troisieme colonne
indique la (( generalite )) de la route. Lorsqu'on lui demande de trouver une route pour
une certaine adresse IP, le noyau regarde toutes les entrees de la table de routage,
faisant un ET bit a bit de l'adresse et de ce masque avant de la comparer a la cible
de cette route.
La quatrieme colonne indique les dierents drapeaux qui caracterisent cette route :
Les champs MTU et Met montrent le MTU et la valeur metrique courants pour
cette interface. Les colonnes RX et TX indiquent combien de paquets ont ete recus
(RX-OK) ou emis (TX-OK) sans erreurs, avec erreurs (RX-ERR/TX-ERR), combien
furent elimines (RX-DRP/TX-DRP) et combien furent perdus en raison de debit trop
haut pour le noyau (RX-OVR/TX-OVR).
La derniere colonne indique quels drapeaux sont positionnes. Ce sont les initiales des
noms qui sont aches lorsque vous demandez l'etat de la conguration de l'interface
par la commande ifcong.
B Une adresse de diusion est positionnee.
L Cette interface est un peripherique loopback.
M Tous les paquets sont recus (mode global).
O ARP est hors service.
P Il s'agit d'une connexion point-a-point.
R L'interface est en fonctionnement.
U L'interface est en service.
Nous voyons que la plupart des serveurs sont simplement en attente de connexion.
Toutefois, la quatrieme ligne indique une connexion SMTP en cours depuis gueuze,
et la sixieme nous apprend qu'il existe une connexion telnet sortante vers la machine
gamay 11 .
L'emploi de l'option -a seule achera toutes les sockets de toutes les categories.
Tous les arguments nom-de-machine peuvent ^etre soit des noms d'h^otes en clair, soit
des adresses IP en notation sur 4 octets.
La premiere invocation ache les entrees ARP pour les adresses IP ou h^otes species,
ou tous les h^otes connus si aucun nom-de-machine n'est donne. Par exemple, sur kro,
nous pourrions obtenir :
# arp -a
IP address HW type HW address
11 Vous pouvez savoir si une connexion est sortante ou entrante a partir des ports mis en jeu. Le
:
numero de port ache sur l'h^ote appelant sera toujours un simple entier, alors que sur la machine
appelee, un service connu sera actif, pour lequel netstat utilisera le nom symbolique trouve dans le
chier /etc/services.
5.11. Test des tables ARP 81
5.12 L'avenir
Le reseau sous Linux est en perpetuelle evolution. De profonds changements dans le
noyau apporteront une methode de conguration tres souple permettant de congurer
les peripheriques reseau en cours de route. Par exemple, la commande ifcong prendra
des arguments qui permettront de choisir l'IRQ et le canal DMA.
La commande route se verra ajouter bient^ot des options supplementaires, comme mtu
pour modier le MTU d'une route particuliere, qui modiera, pour cette route seule-
ment, le MTU specie pour l'interface correspondante. Vous utiliserez cette possibilite
pour les routes passant par des passerelles, lorsque la liaison entre la passerelle et la
machine de destination necessite un MTU tres faible.
Par exemple, supposons que la machine alambic soit connectee a kro par une liaison
SLIP. Lors de l'envoi de donnees depuis gueuze vers alambic, la couche reseau de
alambic utilisera des paquets allant jusqu'a 1 500 octets puisqu'ils sont emis sur
l'Ethernet. La liaison SLIP, elle, fonctionne avec un MTU de 296 octets, aussi il
faudrait que le code reseau de kro fragmente ces paquets IP en morceaux plus petits
tenant dans 296 octets. Si, au lieu de cela, vous aviez congure la route sur gueuze
pour utiliser depuis le debut 296 octets, cette fragmentation relativement co^uteuse
aurait pu ^etre evitee :
# route add alambic gw kro mtu 296
Notez que l'option mtu permet aussi de supprimer selectivement les eets de la regle
SNARL ((( les sous-reseaux sont locaux ))). Il s'agit de l'option de conguration du
noyau decrite dans le chapitre 3.
Enn, consultez les pages de manuel et les documentations de la version de Linux et
des commandes que vous possedez. A l'heure ou nous ecrivons ces lignes, certaines de
ces nouvelles caracteristiques sont deja operationnelles.
83
Chapitre 6
Conguration du serveur de
noms et du resolver
Nous avons vu dans le chapitre 2 que le reseau TCP/IP peut employer dierentes
methodes pour convertir les noms des machines en adresses IP. La plus simple, qui ne
tire aucun parti de la facon dont l'espace de noms est organise, utilise une table stockee
dans le chier /etc/hosts. Elle n'est utilisable que sur de petits reseaux locaux geres
par un seul administrateur, et n'ayant aucun acces au monde exterieur. Le format de
ce chier a ete decrit dans le chapitre 5.
L'autre alternative consiste a utiliser BIND, Berkeley Internet Name Domain, pour la
resolution de noms en adresses. La conguration de BIND peut ^etre un vrai pensum,
mais une fois qu'elle est terminee, les modications dans la topologie du reseau de-
viennent aisees. Sous Linux, tout comme dans beaucoup d'autres systemes UNIX, le
service des noms est realise par le programme appele named. Au demarrage, il charge
un ensemble de chiers de reference dans son cache interne et attend les requ^etes en
provenance des machines distantes ou des processus utilisateur locaux. Il y a plusieurs
facons de congurer BIND, et toutes ne necessitent pas la presence d'un serveur de
noms sur chaque h^ote.
Ce chapitre ne pourra pas faire beaucoup plus que vous donner une esquisse de la
maniere de faire fonctionner un serveur de noms. Si vous comptez employer BIND
dans un environnement plus important qu'un petit reseau local, avec probablement
un lien sur l'Internet, vous devrez acheter un bon livre traitant du sujet, comme (( DNS
and BIND )) de Cricket Liu (voir [AlbitzLiu92]). Pour une documentation a jour, vous
devrez prendre connaissance des informations contenues dans les sources de BIND.
En dehors des pages de manuel et des notes, vous y trouverez un guide complet,
(( BIND Operator's Guide )), ou BOG. Ne vous laissez pas tromper par ce titre : il
s'agit vraiment d'un document tres utile. Il existe egalement un forum Usenet dedie
aux questions relatives au DNS, dont le nom est comp.protocols.tcp-ip.domains.
84 Chapitre 6. Conguration du serveur de noms et du resolver
6.1 La bibliotheque resolver
Le terme (( resolver )) ne designe pas une application particuliere, mais une biblio-
theque de fonctions. Il s'agit d'un ensemble de routines contenues sous Linux dans la
bibliotheque C standard. Les principales sont gethostbyname(2) et gethostbyaddr(2),
qui recherchent toutes les adresses IP appartenant a un nom d'h^ote, et vice versa. Elles
peuvent ^etre congurees pour ne rechercher l'information que dans le chier hosts, in-
terroger un certain nombre de serveurs de noms, ou utiliser la base de donnees hosts
de NIS (Network Information Service). D'autres applications, comme smail, peuvent
inclure des pilotes pour chacune de ces methodes et leur conguration demande un
soin tout particulier.
Les parties s'occupant du DNS dans le resolver proviennent a l'origine des sources
de BIND, qui contiennent egalement le serveur de noms named que nous detaillerons
plus loin dans ce chapitre. A partir de la version 4.6.8 de la bibliotheque C de Linux,
le code de la derniere version de BIND (4.9 ou plus recent) est inclus en standard.
BIND-4.9 apporte une possibilite nouvelle au resolver, la liste de recherche, que nous
allons decrire. Pour tout le reste, les dierentes versions des bibliotheques devraient
avoir un comportement identique.
# /etc/host.conf
# Nous utilisons named, mais pas NIS (pas encore)
order bind hosts
# Autorise les adresses multiples
multi on
# Prevention des tentatives de spoofing
nospoof on
# Supprime domaine local (pas vraiment necessaire).
trim bibine.com.
Tout cela est tres bien, nous direz-vous ; mais des que l'on sort du Departement
Mathematiques, nous revoila avec ces noms pleinement qualies. Et bien s^ur, vous
voudriez aussi pouvoir utiliser des raccourcis comme quark.physique pour atteindre
les machines dans le domaine du Departement de Physique.
Et c'est ici que la liste de recherche entre en jeu : l'option search permet d'indiquer une
liste de recherche, qui correspond a une generalisation de la declaration domain. La
ou cette derniere n'autorise qu'un seul domaine par defaut, search permet de specier
toute une liste de domaines, chacun etant essayes jusqu'a ce que la recherche aboutisse.
Cette liste utilise des espaces ou des tabulations comme caractere de separation.
Les declarations domain et search sont mutuellement exclusives, et ne peuvent appa-
ra^tre plus d'une fois. Si aucune d'elles n'est indiquee, le resolver tentera de deviner le
domaine par defaut a partir du nom d'h^ote local, en utilisant l'appel systeme getdo-
mainname(2). Si le nom n'a pas de partie domaine, c'est le domaine racine qui sera
utilise par defaut.
} Si vous decidez de mettre une instruction search dans resolv.conf, vous devez faire
tres attention aux domaines que vous declarez dans la liste. Les bibliotheques resolver
de version anterieure a BIND-4.9 construisaient une liste de recherche par defaut a
partir du nom de domaine, si aucune liste n'etait precisee. Cette liste par defaut etait
constituee du domaine par defaut lui-m^eme, plus tous ses domaines parents, jusqu'a
la racine. Cela a pose quelques problemes car les requ^etes DNS aboutissaient a des
serveurs de noms qui n'auraient jamais d^u ^etre concernes.
Supposons que vous vous trouviez a (( La biere virtuelle )), et que vous vouliez vous
connecter a la machine foot.groucho.edu. Mais, ayant un peu abuse des productions
de cette honorable societe, vos doigts derapent sur le clavier et au lieu de taper foot,
vous mettez foo, qui n'existe pas. Le serveur de noms de GMU vous indiquera donc
qu'il ne conna^t aucun h^ote de ce nom. Avec l'ancienne implementation de la liste
de recherche, le resolver commencerait alors a rajouter bibine.com, puis com au
bout. Ce dernier cas pose un gros probleme car groucho.edu.com pourrait ^etre un
domaine valide. Leur serveur de noms pourrait m^eme trouver une machine foo dans
leur domaine, ce qui n'est pas du tout ce que vous vouliez 1 !
Dans certaines applications, ces recherches boguees peuvent poser des problemes de
securite. Par consequent, vous devez generalement limiter les domaines de votre liste
de recherche a votre organisation locale, ou equivalent. Au Departement de Ma-
thematiques de l'universite Groucho Marx, la liste de recherche serait initialisee a
maths.groucho.edu et groucho.edu.
Si vous trouvez que les domaines par defaut sont un peu diciles a apprehender,
regardez cet exemple de chier resolv.conf pour (( La biere virtuelle )) :
# /etc/resolv.conf
# Notre domaine
domain bibine.com
# /usr/sbin/named
Aussit^ot, named va lire le chier named.boot et tous les chiers de zone indiques
dedans. Il ecrit son numero de processus dans /var/run/named.pid sous forme ASCII,
telecharge des donnees depuis le serveur primaire si necessaire, puis se met a l'ecoute
du port 53 en attente de requ^etes DNS 3 .
;
; Fichier /etc/named.boot pour la machine kro.bibine.com
;
directory /var/named
;
; domaine fichier
;---------------------------------------------------
cache . named.ca
primary bibine.com named.hosts
primary 0.0.127.in-addr.arpa named.local
primary 72.191.in-addr.arpa named.rev
directory Designe un repertoire dans lequel resident les chiers de zone. Le nom
de ces chiers peut ensuite ^etre indique relativement a ce repertoire.
Il est possible d'avoir plusieurs repertoires en indiquant chaque fois
le mot-cle directory. Selon le standard adopte sous Linux, ce doit ^etre
en principe /var/named.
primary Prend deux arguments, un nom de domaine et un nom de fichier,
declarant le serveur de nom local comme ayant autorite pour le do-
maine indique. En tant que serveur primaire, named charge les infor-
mations de zone depuis le chier de reference specie.
Generalement, il y aura au moins une entree primary dans chaque
chier named.boot, pour la recherche inverse du reseau 127.0.0.0, qui
correspond au reseau loopback.
secondary Prend comme arguments un nom de domaine, une liste d'adres-
ses, et un nom de fichier. D eclare le serveur de noms local comme
etant le serveur ma^tre secondaire pour le domaine indique.
Un serveur secondaire contient aussi les donnees ayant autorite pour
le domaine, mais il ne les recupere pas dans des chiers ; il essaie de
les telecharger depuis le serveur primaire. L'adresse IP d'au moins un
serveur primaire doit ^etre fournie a named dans la liste d'adresses. Le
serveur de noms local contactera tour a tour chacune d'elles jusqu'a
ce qu'il ait reussi a transferer la base de donnees de la zone, qui sera
alors stockee dans le chier de sauvegarde specie dans le troisieme
argument. Si aucun des serveurs primaires ne repond, les informations
6.2. Utilisation de named 91
Les champs sont separes par des espaces ou des tabulations. Une entree peut s'etendre
sur plusieurs lignes s'il y a une parenthese ouvrante avant le premier caractere de saut
de ligne, et si le dernier champ est suivi d'une parenthese fermante. Tout ce qui se
trouve entre un signe point-virgule et le saut de ligne suivant est considere comme un
commentaire et donc ignore.
domaine Il s'agit du nom de domaine auquel s'appliquent les entrees. Si aucun
domaine n'est donne, le RR est considere comme s'appliquant au
domaine du precedent RR.
ttl An de forcer les resolvers a supprimer l'information au bout d'un
certain temps, chaque RR se voit attribuer une duree de vie maxi-
male, appele time to live, ou ttl. Le champ ttl specie le temps en
secondes pendant lequel l'information restera valide apres qu'elle a
ete recuperee sur le serveur. Il s'agit d'un nombre decimal comportant
8 chires au plus.
Si aucune valeur ttl n'est donnee, c'est la valeur du champ minimum
du precedent enregistrement SOA qui sera prise par defaut.
classe Il s'agit d'une classe d'adresses, comme IN pour les adresses IP, HS
pour des objets Hesiod. Pour le reseau TCP/IP, ce sera IN.
S'il n'y a aucun champ classe, c'est la classe du RR precedent qui
sera prise.
type Decrit le type du RR. Les types d'enregistrement les plus courants
sont A, SOA, PTR, et NS. Nous verrons bient^ot a quoi ils correspon-
dent.
donn
ees Contient les donnees associees avec le RR. Le format de ce champ
depend du type de l'enregistrement. Il sera decrit separement, avec
chaque type de RR.
Voici ci-dessous une liste non exhaustive des RR a utiliser dans les chiers de reference.
Il y en a d'autres, que nous ne decrirons pas : ils sont experimentaux et tres peu
employes.
6.2. Utilisation de named 93
nslookup nom-de-machine
;
; /var/named/named.hosts H^
otes locaux chez les brasseurs.
; L'origine est bibine.com
;
@ IN SOA kro.bibine.com. marcel.bibine.com. (
16 ; num
ero de s
erie
86400 ; rafra^
chissement une fois par jour
3600 ; tentatives: une heure
3600000 ; expiration: 42 jours
604800 ; minimum: 1 semaine
)
IN NS kro.bibine.com.
;
; le courrier local est distribue sur kro
IN MX 10 kro
;
; adresse loopback
localhost. IN A 127.0.0.1
; Ethernet des brasseurs
kro IN A 172.16.1.1
kro-if1 IN CNAME kro
; kro est aussi un serveur de News Usenet
news IN CNAME kro
gueuze IN A 172.16.1.2
trappiste IN A 172.16.1.3
; Ethernet des viticulteurs
kro-if2 IN A 172.16.2.1
gamay IN A 172.16.2.2
cahors IN A 172.16.2.3
brouilly IN A 172.16.2.4
;
; /var/named/named.local Recherche inverse de 127.0.0
; L'origine est 0.0.127.in-addr.arpa.
;
@ IN SOA kro.bibine.com. alfred.bibine.com. (
1 ; num
ero de s
erie
360000 ; rafra^
chissement: 100 heures
3600 ; tentatives: une heure
3600000 ; expiration: 42 jours
360000 ; minimum: 100 heures
)
IN NS kro.bibine.com.
1 IN PTR localhost.
lequel vous desirez des renseignements. Par defaut, il demande les enregistrements de
classe A, ceux contenant l'adresse IP relative au nom du domaine.
Vous pouvez changer ce comportement par la commande (( set type=type )) ou type
est l'un des RR decrits plus haut, ou bien (( ANY )), c'est-a-dire tous.
Voici un exemple de session nslookup :
$ nslookup
Default Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> sunsite.unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
Name: sunsite.unc.edu
Address: 152.2.22.81
Si vous recherchez un nom qui n'a pas d'adresse IP associee, mais d'autres enregistre-
ment dans la base de donnees DNS, nslookup retournera le message d'erreur (( No type
A records found )). Toutefois, vous pouvez lui faire querir d'autres enregistrements
que le type A par la commande set type. Par exemple, pour obtenir l'enregistrement
SOA de unc.edu, vous feriez :
6.2. Utilisation de named 99
> unc.edu
*** No address (A) records available for unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
unc.edu
origin = ns.unc.edu
mail addr = shava.ns.unc.edu
serial = 930408
refresh = 28800 (8 hours)
retry = 3600 (1 hour)
expire = 1209600 (14 days)
minimum ttl = 86400 (1 day)
Non-authoritative answer:
(root) nameserver = NS.INTERNIC.NET
(root) nameserver = AOS.ARL.ARMY.MIL
(root) nameserver = C.NYSER.NET
(root) nameserver = TERP.UMD.EDU
(root) nameserver = NS.NASA.GOV
(root) nameserver = NIC.NORDU.NET
100 Chapitre 6. Conguration du serveur de noms et du resolver
(root) nameserver = NS.NIC.DDN.MIL
Pour avoir une liste complete des commandes disponibles, dans nslookup, tapez la
commande help.
Chapitre 7
IP sur ligne serie | SLIP
Les protocoles SLIP et PPP permettent l'acces a l'Internet aux moins fortunes. En
dehors d'un modem et d'une carte serie equipee d'un bon circuit avec tampon FIFO,
aucun equipement supplementaire n'est necessaire. Leur utilisation n'est pas plus
compliquee que celle d'une bo^te aux lettres, et le nombre croissant de fournisseurs de
connectivite IP par telephone rend ce type d'acces abordable pour tout le monde 1 .
Linux supporte aussi bien SLIP que PPP. Ce dernier protocole, dont le pilote est
l'uvre de Michael Callahan et Alfred Longyear, sera decrit dans le chapitre suivant.
7.1 Generalites
Pour utiliser SLIP ou PPP, vous devez congurer un minimum de reseau comme nous
l'avons decrit auparavant dans cet ouvrage. Vous devez au moins posseder l'interface
loopback et orir une methode quelconque de resolution de noms. Si vous comptez vous
connecter a l'Internet, vous devrez bien entendu employer le DNS. L'option la plus
simple et neanmoins ecace est de mettre l'adresse d'un serveur de noms accessible
dans votre chier resolv.conf, puis d'ajouter l'option bind dans /etc/host.conf si elle
n'y est pas deja. Le serveur specie sera alors interroge des que le lien SLIP sera actif.
Plus ce serveur de noms sera proche du lieu ou vous ^etes connecte, plus rapide sera
la reponse.
Cette solution n'est toutefois pas optimale, car toutes les resolutions de noms pas-
seront par votre liaison SLIP/PPP. Si le debit demande vous inquiete, vous pouvez
aussi installer un serveur de noms cache seulement. Il ne gere pas vraiment un do-
maine, mais fonctionne comme un relais pour toutes les requ^etes DNS generees par
votre machine. Son avantage sera le cache, gr^ace auquel les requ^etes n'auront a passer
1 C'est encore loin d'^etre vrai en France.
:
102 Chapitre 7. IP sur ligne serie | SLIP
qu'une seule fois par la liaison serie. Un chier named.boot de serveur cache seulement
ressemble a ceci :
; Fichier named.boot pour serveur de noms cache seulement
directory /var/named
En plus de ce chier, il vous faudra initialiser db.cache par une liste valide de serveurs
de noms racine ; consultez la n du chapitre 6 pour cela.
chee a l'interface sl0 ; la seconde serait sur sl1, et ainsi de suite. Les noyaux actuels
supportent 4, 8 ou 16 liaisons SLIP simultanees.
L'encapsulation choisie par defaut par slattach est CSLIP. Vous pouvez choisir un
autre mode gr^ace a l'option -p ; pour le mode SLIP normal (sans compression) ce
serait :
D'autres modes sont disponibles : cslip, slip6, cslip6 (pour la version 6 bits),
et adaptive. Ce dernier mode laisse le noyau detecter automatiquement quel type
d'encapsulation SLIP est employe par le site distant.
Vous devez utiliser la m^eme encapsulation a chaque bout. Par exemple, si votre cor-
respondant emploie CSLIP, vous devez le faire aussi, sinon la liaison sera incorrecte.
Les sympt^omes sont en general qu'un ping ne revient pas, et l'autre c^ote de la liaison
peut acher le message d'erreur (( Can't build ICMP header )) sur la console. Il est
possible d'eviter cela en utilisant le mode adaptatif (option adaptive).
Pour tous renseignements, consultez la page de manuel de slattach(8).
Apres avoir passe la ligne en SLIP, vous devez congurer l'interface reseau. La encore,
il faut utiliser les commandes standards ifcong et route. Supposons que nous ayons,
a partir de la machine kro, appele un serveur nomme gogoslip. Nous devons taper
les commandes suivantes :
# ifconfig sl0 kro-slip pointopoint gogoslip
# route add gogoslip
# route add default gw gogoslip
La premiere commande congure l'interface en tant que liaison point-a-point avec
gogoslip, les deux autres ajoutent une route vers cette machine et positionne celle
par defaut a gogoslip tout en l'utilisant comme passerelle.
Il faut noter deux choses a propos de la commande ifcong montree dans cet exemple.
La premiere, c'est l'option pointopoint qui specie l'adresse de la machine distante, la
seconde etant l'utilisation de kro-slip comme adresse de l'interface SLIP locale.
Nous avons dit auparavant que l'on pouvait utiliser la m^eme adresse qui est assignee a
l'interface Ethernet de kro pour SLIP. Dans le cas present, kro-slip pourrait tres bien
n'^etre qu'un alias de 172.16.1.1. Toutefois, il peut arriver que l'on soit oblige d'utiliser
une adresse completement dierente pour la liaison SLIP ; c'est le cas par exemple
lorsque le reseau utilise une adresse IP de reseau non enregistree ociellement, comme
cela se passe a (( La biere virtuelle )). Nous reviendrons sur ce sujet en detail dans la
section suivante.
Jusqu'a la n de ce chapitre, nous utiliserons toujours kro-slip pour designer l'adresse
de l'interface SLIP locale.
104 Chapitre 7. IP sur ligne serie | SLIP
A la n de la session, vous devez d'abord supprimer toutes les routes vers gogoslip
par l'option del de la commande route, puis mettre l'interface hors service, et envoyer
le signal HUP a slattach (hangup, deconnexion de ligne). Ensuite, vous couperez la
liaison modem.
# route del default
# route del gogoslip
# ifconfig sl0 down
# kill -HUP 516
tout se fasse tout seul. C'est le r^ole du programme dip. 3 . La version actuelle, a l'heure
ou nous ecrivons ces lignes, est 3.3.7. Il a ete enormement modie par un grand nombre
de personnes, aussi il n'est plus possible de parler d'un unique programme dip. Ces
dierentes variantes de developpement aboutiront heureusement un jour a une seule
version denitive.
Le programme dip ore un petit langage script permettant de dialoguer avec le modem
et le serveur, passer en mode SLIP et congurer les interfaces. Il est tres primitif et
limite, mais susant dans la plupart des cas. Ce langage changera peut-^etre dans une
future version, plus elaboree.
Pour pouvoir congurer l'interface SLIP, dip a besoin des privileges root. Il serait
tentant de l'installer setuid a root, pour que tout utilisateur ordinaire puisse appeler
un service SLIP sans qu'il soit necessaire de lui donner l'acces superutilisateur. C'est
pourtant une methode extr^emement dangereuse, car congurer de mauvaises inter-
faces ou routes par defaut avec dip peut paralyser completement votre reseau. Pis, cela
autoriserait n'importe quel utilisateur a telephoner n'importe ou, entre autres choses.
Aussi, si vous avez vraiment besoin d'autoriser un utilisateur a initialiser lui-m^eme
des liaisons SLIP, la meilleure solution est d'ecrire un petit programme frontal pour
chaque serveur a connecter, qui lui seul realisera l'appel a dip en tant que root avec
les scripts adaptes a chaque cas, en toute securite. 4
3 dip signie Dialup IP, son auteur est Fred van Kempen.
:
4 Le programme diplogin peut (et doit) ^etre setuid root, egalement. Voyez la n de ce chapitre.
:
106 Chapitre 7. IP sur ligne serie | SLIP
# Pr
eparation de l'appel
send ATQ0V1E1X1\r
wait OK 2
if $errlvl != 0 goto error
dial 41988
if $errlvl != 0 goto error
wait CONNECT 60
if $errlvl != 0 goto error
# Voil
a, nous sommes connect
es
sleep 3
send \r\n\r\n
wait ogin: 10
if $errlvl != 0 goto error
send Skro\n
wait ssword: 5
if $errlvl != 0 goto error
send salut\n
wait running 30
if $errlvl != 0 goto error
error:
print La connexion SLIP avec $remote a
echou
e.
Dans le langage de script de dip, les mots cles prexes par le symbole dollar ($)
denotent les noms de variables. Le programme conna^t un certain nombre de va-
riables predenies, que nous allons detailler plus loin ; $remote et $local, par exemple,
contiennent les noms des deux machines, respectivement distante et locale, de la liai-
son point-a-point.
Les deux premieres instructions du script sont des commandes get, qui est la methode
par laquelle dip initialise une variable. Ici, la machine locale est kro-slip et la machine
distante gogoslip.
Les cinq instructions suivantes initialisent le terminal et le modem : reset envoie une
commande de remise a zero du modem ; pour les modems compatibles Hayes, il s'agit
de ATZ. La ligne suivante elimine le cas echeant tous les caracteres deja recus par le
modem an que le dialogue avec le serveur puisse s'etablir proprement. Cette sequence
de dialogue est tres simple : elle appelle le numero 41988, le numero de telephone
de gogoslip, et se connecte sous le compte utilisateur Skro avec le mot de passe
salut. La commande wait indique a dip d'attendre la cha^ne de caracteres donnee
comme premier argument pendant le nombre de secondes indique dans le second.
La condition if imbriquee dans la procedure teste qu'aucune erreur ne s'est produite
pendant l'execution de la commande.
Les dernieres commandes executees sont default, qui assigne la route par defaut a la
liaison SLIP, et mode, qui valide le mode SLIP sur la ligne serie et congure l'interface
et la table de routage pour vous.
DIP> help
DIP knows about the following commands:
DIP> echo
Usage: echo on|off
DIP> _
108 Chapitre 7. IP sur ligne serie | SLIP
Tout au long de la section suivante, les exemples qui achent l'invite DIP mon- >
trent comment entrer une commande en mode test et ce qu'elle ache a l'ecran. Les
exemples depourvus de cette invite doivent ^etre consideres comme des extraits de
scripts.
echo et term
La commande echo est une aide au deboguage. Dans ce mode, dip ache sur la console
tout ce qu'il envoie au port serie. L'eet peut ^etre annule par echo o.
Vous pouvez aussi quitter momentanement le mode script et passer en mode terminal.
Dans ce mode, vous pouvez utiliser dip comme n'importe quel autre programme de
terminal. Pour le quitter, entrez Ctrl-] (combinaison de touches peu pratique sur un
clavier francais).
7.4. Utilisation de dip 109
La commande get
C'est par elle qu'on initialise les variables. La forme la plus simple est l'assignation
d'une constante, comme nous l'avons fait dans gogoslip.dip. Vous pouvez egalement
demander a l'utilisateur de saisir la donnee, en speciant le mot cle ask au lieu d'une
valeur :
DIP> get $local ask
Enter the value for $local: _
Une troisieme methode consiste a obtenir la valeur depuis la machine distante. Aussi
bizarre que cela puisse para^tre, c'est tres utile dans certains cas. Beaucoup de serveurs
SLIP ne vous autoriseront pas a utiliser votre propre adresse IP sur cette liaison,
mais vous en assigneront une dynamiquement lorsque vous appellerez, en achant un
message vous informant de la valeur a prendre. Si ce message est de la forme (( Your
address: 192.168.5.74 )), ce qui est courant, alors le bout de code dip suivant saura
la recuperer tout seul :
# fin du dialogue login
wait address: 10
get $locip remote
La commande print
Elle est destinee a acher du texte sur le terminal ou dip a ete lance. N'importe quelle
variable peut ^etre utilisee dans le texte, comme ceci :
DIP> print Utilisation du port $port
a la vitesse de $speed
Utilisation du port cua3
a la vitesse de 38400
Noms de variables
Le programme dip ne comprend qu'un ensemble predeni de variables. Leur nom
commence toujours par le signe dollar ($) et doit ^etre en lettres minuscules.
Les variables $local et $locip contiennent le nom de la machine locale et son adresse IP.
Si l'on initialise le nom d'h^ote, dip stockera le nom canonique dans $local, et mettra
l'adresse correspondante dans $locip. La m^eme chose se passe pour $locip.
Les variables $remote et $rmtip ont la m^eme fonction, pour le nom de la machine
distante et son adresse ; et $mtu contient la valeur du MTU pour la connexion.
Ces cinq variables sont les seules qui peuvent se voir assigner des valeurs directement
par la commande get. Un h^ote, ou toute autre variable, ne peut ^etre initialise que par
les commandes correspondantes, mais peut ^etre utilise dans les instructions print ; ce
sont $modem, $port et $speed.
110 Chapitre 7. IP sur ligne serie | SLIP
Le resultat des commandes executees se trouve dans la variable $errlvl. Une valeur de
0 indique que tout s'est bien passe, une valeur non nulle denote une erreur.
if variable op
erateur valeur goto
etiquette
L'expression doit ^etre une simple comparaison entre l'une des variables $errlvl, $locip
et $rmtip ; variable doit ^etre un nombre entier ; l'operateur peut ^etre ==, !=, <, >,
<=, et >=.
La commande goto branche l'execution du script a la ligne suivant l'etiquette indiquee.
Une etiquette doit ^etre le premier mot sur la ligne et doit ^etre suivie immediatement
par le caractere deux-points (:).
mode et default
Ces commandes servent a basculer la ligne serie en mode SLIP et a congurer l'inter-
face.
La commande mode est la derniere que dip doit executer avant de passer en arriere-
plan. A moins qu'une erreur ne se produise, on ne revient pas de cette commande.
La commande mode prend un protocole en argument ; pour l'instant dip ne reconna^t
que SLIP et CSLIP. La version courante de dip ne conna^t pas le mode SLIP adaptatif.
Apres avoir passe la discipline de ligne en SLIP, dip execute ifcong an de congurer
7.5. Utilisation en mode serveur 111
l'interface pour une liaison point-a-point, et appelle route pour positionner la route
vers la machine distante.
Si, de plus, le script execute la commande default avant mode, dip fera aussi pointer
la route par defaut sur cette liaison.
Ensuite, il reste bien s^ur a positionner le mot de passe avec la commande passwd.
Maintenant, lorsque dugenou entre sur le systeme, dip se lance en tant que serveur.
Pour verier si l'utilisateur est autorise a utiliser SLIP, il regardera dans le chier
/etc/diphosts. Ce chier detaille les droits d'acces et les parametres de connexion
pour chaque utilisateur SLIP. L'entree de dugenou pourrait ressembler a ceci :
dugenou::dugenou.beta.org:Marcel Dugenou:SLIP,296
Chapitre 8
Le protocole Point-a-Point |
PPP
8.1 Sous les P, le protocole
Tout comme SLIP, PPP est un protocole permettant d'envoyer des datagrammes par
une connexion serie ; mais il est plus complet que le premier. Il autorise chaque partie
a negocier certaines options, comme l'adresse IP et le MTU, et comporte dierentes
methodes d'authentication. Chacune de ces possibilites fait l'objet d'un protocole
separe. Ici, nous ne decrirons que brievement ces dierentes (( briques )) qui composent
PPP, pour en savoir plus, nous vous conseillons de lire ses specications dans le
RFC 1548, et tous ceux qui y sont relatifs 1 .
La couche la plus basse de PPP s'appelle HDLC, qui est l'abreviation de (( High-Level
Data Link Control )) 2 , qui denit les trames PPP individuelles et ore un checksum
sur 16 bits. Contrairement a l'encapsulation plus primitive de SLIP, une trame PPP
est capable de contenir des paquets d'autres protocoles que IP, comme Novell IPX ou
Appletalk. PPP realise cela en rajoutant un champ protocole a la trame HDLC de
base qui identie le type de paquet transfere.
LCP, le protocole de contr^ole de liaison (Link Control Protocol), est utilise par-dessus
HDLC pour la negociation d'options relatives a la liaison, comme le MRU (Maximum
Receive Unit), qui indique la taille de datagramme maximale qu'un c^ote du lien est
capable de recevoir.
Au stade de la conguration, l'authentication client est une etape importante dans
l'etablissement de la liaison. Bien que facultative, c'est vraiment un plus pour les
1 Ces documents sont indiques dans la bibliographie presentee a la n de ce livre.
:
2 En fait, HDLC est un protocole bien plus general, deni par l'ISO (International Standards
:
Organization).
114 Chapitre 8. Le protocole Point-a-Point | PPP
serveurs accessibles sur appel telephonique. Generalement, la machine appelee (le ser-
veur) demande au client de s'identier en prouvant qu'il conna^t une cle secrete. Si
l'appelant echoue, la connexion se termine immediatement. Sous PPP, l'identication
est bidirectionnelle : l'appelant peut aussi demander au serveur de s'identier. Ces pro-
cedures sont totalement independantes les unes des autres ; il existe deux protocoles
permettant deux types distincts d'authentication, que nous decrirons plus loin. Ils
s'appellent PAP (Password Authentication Protocol) et CHAP (Challenge Handshake
Authentication Protocol).
Chaque protocole reseau route par la liaison serie, comme IP, Appletalk, etc., est
congure dynamiquement par un protocole de contr^ole reseau, (( Network Control
Protocol )), ou NCP. Par exemple, pour envoyer des datagrammes IP, les deux c^otes
de PPP doivent d'abord negocier quelle adresse IP chacun d'eux utilisera. Le protocole
de contr^ole utilise a cet eet est IPCP, le protocole de contr^ole de protocoles Internet,
(( Internet Protocol Control Protocol )).
Cette commande va basculer la ligne serie cua3 en mode PPP et etablir une liaison IP
avec l'h^ote pabo. La vitesse de transfert utilisee sur le port serie sera 38 400 bps.
L'option crtscts valide le contr^ole de
ux RTS/CTS, ce qui est indispensable avec des
vitesses superieures a 9 600 bps.
La premiere chose que fait pppd est de negocier plusieurs caracteristiques de la liai-
son par le protocole LCP. Generalement, les options par defaut fonctionneront, nous
n'entrerons donc pas dans les details.
Pour l'instant, nous allons egalement considerer que pabo ne demande aucune iden-
tication, et que par consequent la phase de conguration est terminee.
Le programme pppd va alors negocier les adresses IP a utiliser en employant IPCP, le
protocole de contr^ole IP. Puisque nous n'avons specie aucune adresse particuliere en
appelant pppd dans l'exemple ci-dessus, il va essayer de prendre les adresses obtenues
par le resolver sur les noms de chaque h^ote. Chacun annoncera alors son adresse a
l'autre.
116 Chapitre 8. Le protocole Point-a-Point | PPP
Generalement, ce comportement par defaut est parfait. M^eme si votre machine est
sur un reseau Ethernet, vous pouvez employer la m^eme adresse IP pour les deux
interfaces. Neanmoins, pppd permet d'utiliser une adresse dierente, ou m^eme de
demander a l'autre c^ote de vous en assigner une. Ces options sont decrites dans la
section (( Options de conguration IP )).
Apres la phase de conguration IPCP, pppd va preparer la couche reseau de votre
systeme a l'utilisation d'une liaison PPP. Tout d'abord, il congure l'interface PPP
comme un lien point-a-point, en prenant ppp0 pour la premiere interface active, ppp1
pour la seconde, et ainsi de suite. Ensuite, il va initialiser une entree dans la table
de routage qui pointe vers l'h^ote connecte a l'autre bout de la liaison. Dans l'exemple
ci-dessus, pppd mettra aussi la route par defaut sur pabo, car nous lui avons passe
l'option defaultroute 4 . Par consequent, tous les datagrammes a destination de ma-
chines hors de votre reseau local seront envoyes a pabo. Il existe dierents autres
schemas de routage rendus possibles par pppd, nous les verrons en detail un peu plus
loin.
4 La route par defaut ne sera mise que s'il n'en existe pas deja une.
:
8.5. Appel telephonique par le programme chat 117
Les deux premieres options concernent l'identication et seront decrites plus bas.
Le mot cle lock rend pppd compatible avec la methode UUCP pour le verrouillage
des peripheriques. Dans cette convention, chaque processus accedant a un port serie,
disons /dev/cua3, cree un chier nomme LCK..cua3 dans le repertoire spool/uucp
pour signaler que le peripherique est en cours d'utilisation. Cela permet d'eviter que
certains autres programmes tentent d'acceder au port serie au m^eme moment.
L'inter^et de mettre ces options dans le chier de conguration global, c'est qu'elles
ne pourront plus ^etre forcees par quiconque par la suite, orant ainsi un niveau de
securite raisonnable. Notez que quelques-unes n'obeissent pas a cette regle, la cha^ne
connect par exemple.
Ici, chat attendra que le systeme distant nous envoie l'invite de login, et nous lui
repondrons par le nom de l'utilisateur dugenou. Nous n'attendons que la cha^ne
ogin:. Ainsi, que la premi ere lettre soit majuscule ou minuscule, ou remplacee par
un malheureux parasite, sera sans importance. Ensuite, nous attendons que l'on nous
demande le mot de passe (ssword:), et nous envoyons la reponse.
Un script de dialogue n'est pas autre chose. Bien s^ur, pour etablir la communication,
il faut egalement y inclure les commandes necessaires au modem. Supposons que
vous disposez d'un modem Hayes (le contraire serait etonnant), et que le numero de
telephone du serveur est 318714. Pour appeler pabo, la commande chat complete est
alors :
$ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN
118 Chapitre 8. Le protocole Point-a-Point | PPP
Par denition, la premiere cha^ne doit ^etre une attente, mais comme le modem ne
dira jamais rien tant que nous ne lui avons pas adresse la parole, nous indiquons
une cha^ne vide pour que chat n'attende pas indeniment. Nous envoyons ensuite
ATZ, la commande de remise a zero des modems compatibles Hayes, et attendons sa
reponse (OK). La cha^ne suivante envoie la commande de numerotation et le numero
de telephone, et attend le message CONNECT en reponse. La encore, cette attente est
suivie d'une cha^ne vide car nous ne voulons rien envoyer pour l'instant, il nous faut
attendre l'invite du serveur. La suite de ce script fonctionne exactement comme nous
l'avons decrit plus haut.
L'option -v indique a chat d'enregistrer toutes les activites dans les chiers trace du
systeme, par le demon syslog ; c'est le niveau local2 qui est utilise 5.
Specier le script de dialogue sur la ligne de commandes presente un certain risque,
car tout utilisateur peut se servir de ps et visualiser cette ligne de commandes. Vous
pouvez eviter ce probleme en mettant ce script dans un chier, disons par exemple
appel-pabo. Il sura d'indiquer a chat, par l'option -f suivie du nom de chier, d'aller
lire le script dedans. Maintenant, l'appel a pppd se passe donc comme ceci :
# pppd connect "chat -f appel-pabo" /dev/cua3 38400 -detach \
crtscts modem defaultroute
En plus de l'option connect qui specie le script de dialogue, nous avons ajoute deux
autres options a la commande : -detach, qui demande a pppd de ne pas se detacher
de la console et passer en arriere-plan, et le mot cle modem, qui lui permet de gerer
la ligne serie dans le cas particulier d'un modem, par exemple en deconnectant la
ligne apres l'appel. Si vous n'utilisez pas ce mot cle, pppd ne testera pas la ligne DCD
(detection de porteuse) et ne detectera jamais la deconnexion eventuelle de la machine
distante.
Tous ces exemples sont plut^ot simples ; chat permet de faire des scripts bien plus
complexes. Il ore par exemple l'interessante possibilite de pouvoir abandonner la
session en retournant une erreur, en fonction des reponses obtenues. Les messages sur
lesquels on utilisera typiquement cette fonction sont BUSY ou NO CARRIER, que votre
modem indiquera si le numero appele est occupe ou ne repond pas. Pour que chat
reconnaisse immediatement ces messages, vous pouvez les indiquer au debut du script
par le mot cle ABORT :
$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ...
De m^eme, vous pouvez changer le temps d'attente maximal de toute partie du dialogue
en inserant l'option TIMEOUT. Consultez la page de manuel de chat(8) pour les details.
Quelquefois, vous aurez aussi besoin de conditions d'execution de certaines parties
du script. Par exemple, lorsque vous ne recevez pas l'invite de la machine appelee,
5 Si vous modiez syslog.conf pour rediriger ces traces dans un chier, assurez-vous qu'il ne soit
:
pas lisible par tout le monde, car chat enregistre tout le dialogue, tel quel, y compris les mots de
passe.
8.6. Deboguer votre conguration PPP 119
Maintenant, lorsque chat ne recoit pas l'invite login dans le temps prevu, le script
secondaire est execute et envoie un BREAK, puis attend a nouveau. Si l'invite appa-
ra^t, le script continue a se derouler normalement, sinon chat se termine en retournant
une erreur au systeme ou au programme qui l'a appele.
Si votre conguration PPP ne marche pas du premier coup, vous pourrez consulter
ce chier de trace pour avoir une idee de ce qui ne va pas. Si vous ne trouvez rien,
il faudra utiliser l'option debug de pppd, pour qu'il ajoute plus d'informations. Cette
option lui fera enregistrer le contenu de tous les paquets de contr^ole envoyes ou recus.
Tous les messages passent par syslog, au niveau daemon.
Enn, il est possible de valider le deboguage au niveau du noyau en invoquant pppd
avec l'option kdebug. Celle-ci doit ^etre suivie d'un argument numerique qui est un OU
avec les valeurs suivantes : 1 pour les messages generaux, 2 pour l'enregistrement du
contenu de toutes les trames HDLC entrantes, 4 pour celles sortantes. Pour capturer
les messages de deboguage du noyau, vous devez soit employer une version de syslogd
qui lit aussi le chier /proc/kmsg, soit le demon klogd. Tous deux dirigent les messages
de deboguage du noyau vers la (( facilite )) kernel de syslog.
Vous pouvez utiliser pour adresse locale et adresse distante, aussi bien des noms
de machines que des adresses IP en notation sur 4 octets 6 . Avec cette option, pppd
tentera d'utiliser la premiere adresse comme sa propre adresse IP, et la seconde pour
la machine distante. Si cette derniere rejette l'une ou l'autre pendant la negociation
IPCP, aucune liaison IP ne sera etablie 7.
Si vous ne desirez assigner que l'adresse locale et accepter toute adresse distante que
l'autre c^ote annoncera, il vous sut de ne rien mettre a l'emplacement de la variable
adresse distante. Par exemple, pour que kro utilise l'adresse 130.83.4.27 au lieu
de la sienne, vous passeriez l'option 130.83.4.27: sur la ligne de commandes. De
m^eme, pour n'assigner que l'adresse distante, vous laisseriez le champ adresse locale
en blanc. Par defaut, pppd utilisera alors l'adresse associee au nom de la machine.
Certains serveurs PPP gerant beaucoup de connexions assignent les adresses de ma-
niere dynamique : elles sont choisies lorsqu'un systeme se connecte, et liberees a la
deconnexion. Lors de l'appel de tels services, vous devez vous assurer que pppd ne
demande aucune adresse IP particuliere au serveur, mais qu'au contraire il est pr^et a
accepter celles qui lui seront imposees. Cela signie que vous ne devez pas specier
d'argument adresse locale, pour le moins. De plus, vous devrez utiliser l'option
noipdefault, qui indique au programme d'attendre que l'autre c^ ote lui indique son
adresse IP au lieu de prendre celle de la machine locale.
6 L'utilisation de noms de machines avec cette option a certaines consequences sur l'authenti-
:
cation CHAP. Consultez la section correspondante dans ce chapitre.
7 Vous pouvez autoriser la machine distante a vous imposer une adresse IP malgre tout
:
par l'option ipcp-accept-local, et vous pouvez accepter l'adresse qu'elle desire pour elle par
ipcp-accept-remote. Consultez la page de manuel pour plus de d etails.
8.7. Options de conguration IP 121
De la m^eme facon, /etc/ppp/ip-down est appele pour annuler toutes les actions de
ip-up lorsque la liaison est interrompue.
Toutefois, ce schema de routage n'est pas encore complet. Nous avons positionne des
entrees dans la table de routage de chaque h^ote PPP, mais, pour l'instant, aucune
autre machine de l'un ou l'autre des reseaux n'est au courant de cette liaison PPP.
Ce n'est pas un gros probleme si tous les h^otes de la succursale ont leur route par
defaut pointant vers province, et si tous les h^otes du reseau des brasseurs passent
par defaut par kro. Mais si ce n'est pas le cas, la seule solution sera d'employer un
demon de routage comme gated. Apres avoir cree la route reseau sur kro, le demon
de routage diusera cette nouvelle route a toutes les machines connectees aux reseaux
concernes.
que le caractere correspondant doit ^etre encode avant d'^etre envoye sur la ligne. Par
defaut, l'async map vaut 0xffffffff, c'est-a-dire que tous les caracteres de contr^ole
seront encodes.
Pour indiquer a votre correspondant qu'il n'a besoin d'encoder que quelques caracteres
de contr^ole, vous pouvez specier une nouvelle async map a pppd gr^ace a l'option
asyncmap. Par exemple, si seulement ^S et ^Q (ASCII 17 et 19, couramment utilis es
pour XON et XOFF) doivent ^etre traites, utilisez l'option suivante :
asyncmap 0x000A0000
CHAP n'a pas ces inconvenients. Avec lui, le serveur desirant l'authentication envoie
un (( de )) au client, sous forme d'une cha^ne de caracteres generee aleatoirement, en
m^eme temps que son nom de machine. Le client doit alors utiliser le nom pour trouver
le secret correspondant, le combiner avec la cha^ne, et encrypter la cha^ne par une
fonction de hachage. Le resultat est retourne au serveur avec le nom de machine du
client. Celui-ci eectue alors les m^emes calculs, et autorise l'acces au client s'il obtient
le m^eme resultat.
Un autre avantage de CHAP est qu'il ne demande pas seulement au client de s'iden-
tier au debut de la connexion, mais il envoie des des a intervalles reguliers pendant
la communication pour s'assurer que la machine n'a pas ete remplacee discretement
par un intrus, par exemple en commutant la ligne telephonique.
Le programme pppd conserve les cles secretes pour CHAP et PAP dans deux chiers
distincts, nommes respectivement /etc/ppp/chap-secrets et pap-secrets. En ajoutant
un nom de machine dans l'un ou l'autre de ces chiers, vous pouvez facilement choisir
quels systemes authentier avec quel protocole.
Par defaut, pppd ne demande aucune authentication de la machine distante, mais
sera d'accord pour s'identier lui-m^eme sur demande. Comme CHAP est plus puissant
que PAP, pppd tentera d'utiliser le premier chaque fois que possible. Si l'autre bout ne
le supporte pas, ou que pppd ne trouve pas de secret CHAP pour le systeme distant
dans son chier chap-secrets, il passera a PAP. S'il ne possede pas de secret PAP
pour son correspondant non plus, il refusera toute authentication. En consequence,
la connexion se terminera la.
Ce comportement peut ^etre modie de dierentes facons. Par exemple, avec le mot
cle auth, pppd demandera a son correspondant de s'authentier. Il acceptera aussi
bien CHAP que PAP, tant qu'il possede des informations concernant la machine
en question dans ses bases CHAP ou PAP. Il y a d'autres options permettant de
supprimer l'un ou l'autre protocole, mais nous ne les decrirons pas ici ; consultez la
page de manuel de pppd(8) si vous en avez besoin.
Si tous les systemes avec lesquels vous faites du PPP sont d'accord pour s'authentier
aupres de vous, vous devez mettre l'option auth dans le chier global /etc/ppp/options
et denir des mots de passe pour chaque systeme dans le chier chap-secrets. Si l'un
d'eux ne supporte pas CHAP, ajoutez son entree dans le chier pap-secrets. Ainsi,
vous serez assure qu'aucun systeme inconnu ne pourra realiser de connexion PPP
chez vous.
Les deux sections suivantes vont traiter des deux chiers secrets, pap-secrets et chap-
secrets. Ils resident dans le repertoire /etc/ppp et contiennent des triplets de clients,
serveurs, et mots de passe, suivis facultativement par une liste d'adresses IP. L'inter-
pretation des champs client et serveur est dierente selon qu'il s'agit de CHAP ou de
PAP, et depend egalement de quel c^ote provient la demande d'authentication.
126 Chapitre 8. Le protocole Point-a-Point | PPP
8.10.2 Le chier de secrets CHAP
Lorsqu'il doit s'identier aupres de quelque serveur utilisant CHAP, pppd cherche
dans le chier chap-secrets une entree dont le champ client est identique au nom de
machine local, et dont le champ serveur est identique au nom de l'h^ote distant recu
dans le de CHAP. Lorsque au contraire, il demande au correspondant de s'identier,
les r^oles sont simplement inverses: pppd recherchera alors une entree dont le champ
client est identique au nom de la machine distante (envoye dans la reponse client
CHAP), et dont le champ serveur est egal au nom local.
Voici ci-dessous un exemple de chier chap-secrets, pour la machine kro 8 .
# Fichier secrets CHAP de kro.bibine.com
#
# client serveur secret adresses
#----------------------------------------------------------------------
kro.bibine.com pabo.moche.com "Un Linux Sinon Rien" kro.bibine.com
pabo.moche.com kro.bibine.com "horreur, Boudinus" pabo.moche.com
* kro.bibine.com "MotDePasseIdiot" pub.bibine.com
Lors de l'etablissement d'une connexion PPP avec la machine pabo, celle-ci demande
a kro de s'authentier en envoyant un de CHAP. Alors, pppd cherche une entree dont
le champ client est kro.bibine.com et le champ serveur pabo.bibine.com 9, dans le
chier chap-secrets. Il trouve la premiere ligne du chier, comme nous le voyons dans
l'exemple ; il genere alors la reponse CHAP a partir de la cha^ne de de et du secret
correspondant (Un Linux Sinon Rien), et l'envoie a pabo.
Dans le m^eme temps, pppd compose un de CHAP pour pabo contenant une cha^ne
unique et son nom pleinement qualie kro.bibine.com. La machine pabo construit
alors la reponse comme nous venons de l'expliquer, et l'envoie a kro. Alors, pppd en
extrait le nom du client (pabo.moche.com) et cherche dans le chier chap-secrets
une ligne dans laquelle pabo est client et kro est serveur. La second ligne correspond,
aussi pppd combine-t-il le de CHAP et le secret (horreur, Boudinus), encrypte la
chose, et compare le resultat a la reponse CHAP de pabo.
Les 4 champs optionnels listent les adresses IP qui sont acceptables pour les clients
indiques dans le premier champ. Les adresses peuvent ^etre donnees en notation sur 4
octets, ou sous forme de noms qui seront resolus par le resolver. Par exemple, si pabo
demande, pendant la negociation IPCP, une adresse IP qui n'est pas dans cette liste,
la requ^ete sera rejetee. Dans l'exemple ci-dessus, pabo est par consequent limite a
l'emploi de sa propre adresse IP. Si le champ adresse est vide, n'importe laquelle sera
autorisee ; et la valeur (( - )) interdit toute liaison IP avec ce client.
La troisieme ligne de notre exemple de chier chap-secrets autorise n'importe quelle
machine a etablir une liaison PPP avec kro, car un champ client ou serveur conte-
nant * correspond a n'importe quel nom, il s'agit d'un caractere generique. La seule
8 Les double quotes (" ") ne font pas partie du mot de passe ; ces caracteres sont la pour preserver
:
l'espace contenu dans le mot de passe.
9 Ce nom est recupere dans le de CHAP.
:
8.10. Authentication sous PPP 127
Cela lui permettra d'ajouter ce domaine au nom kro, pour toutes les operations
d'identication. D'autres options permettent de changer l'idee que se fait pppd du
nom local de la machine : usehostname et name. Lorsque vous donnez l'adresse IP
locale sur la ligne de commande par adresse locale:adresse distante, et que
adresse locale est un nom au lieu d'une adresse IP, pppd l'utilisera comme nom
local. Pour plus de details, consultez la page de manuel de pppd(8).
La premiere ligne est utilisee pour nous identier lorsque nous communiquons avec
pabo. La seconde decrit comment un utilisateur nomme pabo doit s'identier aupres
de nous.
Le nom kro-pap, dans la premiere colonne, est le nom d'utilisateur que nous envoyons
a pabo. Par defaut, pppd prendra le nom de machine local comme nom d'utilisateur,
mais vous pouvez aussi indiquer un nom dierent en le passant par l'option user.
128 Chapitre 8. Le protocole Point-a-Point | PPP
Lorsqu'il prend une entree dans le chier pap-secrets pour authentication avec le
correspondant, pppd a besoin de conna^tre le nom de la machine distante. Comme il
n'a aucun moyen de le deviner, vous devez lui specier sur la ligne de commandes par
l'option remotename. Par exemple, pour utiliser l'entree ci-dessus pour une authenti-
cation avec pabo, nous devons rajouter l'option suivante lors de l'appel a pppd :
# pppd ... remotename pabo user kro-pap
Dans le quatrieme champ (et tous les suivants), vous pouvez indiquer quelles adresses
IP sont autorisees pour cette machine particuliere, exactement comme dans le chier
de secrets CHAP. Le correspondant ne pourra alors demander que des adresses faisant
partie de cette liste. Dans notre exemple, nous exigeons que pabo utilise sa propre
adresse IP.
Notez que PAP est une methode d'identication plut^ot legere, et il est fortement
conseille d'employer CHAP chaque fois que possible. Par consequent, nous n'entrerons
pas plus dans les details de PAP ici ; si vous en avez besoin vous pourrez trouver les
renseignements qui vous manquent dans le manuel de pppd(8).
Bien entendu, vous aurez des valeurs UID et GID dierentes de celles montrees ici
(500 et 200), et il vous faudra positionner le mot de passe avec la commande passwd.
Le script ppplogin pourrait ressembler a celui-ci :
#!/bin/sh
# ppplogin - script pour lancer pppd en serveur
mesg n
stty -echo
exec pppd -detach silent modem crtscts
La commande mesg interdit aux autres utilisateurs d'ecrire sur le tty par la com-
mande write, par exemple. La commande stty, elle, supprime l'echo des caracteres,
an que ce qu'envoie l'appelant ne lui soit pas retourne en echo. L'option la plus im-
portante est -detach, car elle emp^eche pppd de se detacher du terminal de contr^ole.
Si nous ne mettions pas cette option, il se placerait en arriere-plan, et le script se
8.11. Conguration d'un serveur PPP 129
terminerait, ce qui aurait pour consequence de faire raccrocher la ligne. L'option si-
lent indique au programme d'attendre jusqu'a ce qu'il recoive un paquet du systeme
appelant avant d'en envoyer lui-m^eme. Cela permet d'eviter des problemes avec cer-
tains systemes assez lents a lancer leur client PPP. L'option modem indique qu'il faut
prendre en compte les lignes de contr^ole du modem sur le port serie. Il faut toujours
mettre cette option quand on utilise pppd avec un modem. Enn, crtscts valide le
contr^ole de
ux materiel.
Parallelement a ces options, il est conseille de forcer une authentication quelconque,
par exemple en speciant auth sur la ligne de commandes ou dans le chier global.
La page de manuel indique aussi des options speciques permettant de valider ou de
supprimer individuellement chaque protocole d'authentication.
130 Chapitre 8. Le protocole Point-a-Point | PPP
131
Chapitre 9
Aspects importants du reseau
Apres avoir reussi a congurer IP et le resolver, vous allez devoir vous occuper des
services que vous desirez orir sur le reseau. Ce chapitre traite de la conguration
de quelques applications reseau simples, le serveur inetd et les programmes de la
famille rlogin y compris. L'interface RPC (Remote Procedure Call), qui permet des
services comme NFS (Network File System) ou NIS (Network Information System)
sera egalement rapidement presentee. La conguration de ces deux derniers services,
toutefois, prend beaucoup de place et sera donc traitee dans des chapitres separes,
ainsi que le courrier electronique et les News Usenet.
Bien entendu, il est impossible de decrire toutes les applications reseau possibles dans
ce livre. Si vous devez installer un service qui n'est pas decrit dans cet ouvrage, comme
talk, gopher ou Mosaic, consultez ses pages de manuel pour obtenir les informations
necessaires.
#
# services inetd
ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd -l
telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd -b/etc/issue
#finger stream tcp nowait bin /usr/sbin/fingerd in.fingerd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd /boot/diskless
login stream tcp nowait root /usr/sbin/rlogind in.rlogind
shell stream tcp nowait root /usr/sbin/rshd in.rshd
exec stream tcp nowait root /usr/sbin/rexecd in.rexecd
#
# services internes
a inetd
#
daytime stream tcp nowait root internal
daytime dgram udp nowait root internal
time stream tcp nowait root internal
time dgram udp nowait root internal
echo stream tcp nowait root internal
echo dgram udp nowait root internal
discard stream tcp nowait root internal
discard dgram udp nowait root internal
chargen stream tcp nowait root internal
chargen dgram udp nowait root internal
Si l'on ne rajoute aucun contr^ole d'acces, rien ne para^tra change sur la machine,
tout fonctionnera comme d'habitude, sauf que toutes les requ^etes seront tracees via
la facilite auth de syslog.
Ce contr^ole d'acces est implemente au moyen de deux chiers appeles /etc/hosts.allow
et /etc/hosts.deny. Ils contiennent des entrees autorisant ou refusant l'acces, respecti-
vement, a certains services et h^otes. Lorsque tcpd gere une requ^ete d'un service comme
nger en provenance d'un client nomme, par exemple, geneur.penible.com, il re-
garde dans hosts.allow et hosts.deny (dans cet ordre) si une entree correspond a la fois
a ce nom et au service demande. S'il la trouve dans hosts.deny, la requ^ete est rejetee
et la connexion immediatement fermee. Si rien n'est trouve, la requ^ete est acceptee.
:2 E crit par Wietse Venema, wietse@wzv.win.tue.nl.
3 Le terme semble consacre, inutile donc de fournir un equivalent francais.
:
9.3. Les chiers services et protocols 135
services est une liste de noms valides dans /etc/services, ou encore le mot cl e ALL
(tout). Pour designer tous les services sauf nger et tftp, vous pouvez mettre (( ALL
EXCEPT nger, tftp )).
hotes est une liste de noms de machines ou d'adresses IP, ou encore les mots-cl es ALL,
LOCAL ou UNKNOWN (inconnu). ALL indique n'importe quelle machine alors que
LOCAL designe uniquement celles dont le nom ne contient pas de point 4 . UNKNOWN
designe tous les h^otes dont la recherche de nom ou d'adresse a echoue. Un nom
commencant par un point correspond a tous les h^otes dont le domaine est identique a
cette cha^ne. Par exemple, .penible.com designera aussi bien geneur.penible.com
que lourd.penible.com. Il est possible aussi de traiter les adresses IP reseau et
sous-reseau; consultez la page de manuel hosts access(5) pour en savoir plus.
Pour interdire l'acces a nger et tftp a tout le monde sauf aux machines locales, mettez
ce qui suit dans /etc/hosts.deny, et laissez vide le chier /etc/hosts.allow :
Le champ facultatif commande peut contenir une commande shell a appeler lorsque
l'entree correspond. C'est tres utile pour poser des pieges permettant de mettre en
evidence les eventuels intrus :
in.ftpd: ALL EXCEPT LOCAL, .bibine.com : \
echo "Requete de %d@%h" >> /var/log/finger.log; \
if [ %h != "kro.bibine.com" ]; then \
finger -l @%h >> /var/log/finger.log \
fi
Les arguments %h %d sont traduits par tcpd sous forme du nom de machine eectuant
la requ^ete et de celui du service, respectivement. La encore, consultez la page de
manuel hosts access(5) pour plus de details.
# Le fichier /etc/services:
#
# Services bien connus
echo 7/tcp # Echo
echo 7/udp #
discard 9/tcp sink null # Discard
discard 9/udp sink null #
daytime 13/tcp # Date syst
eme
daytime 13/udp #
chargen 19/tcp ttytst source # G
en
erateur de caract
eres
chargen 19/udp ttytst source #
ftp 21/tcp # File Transfer Protocol
telnet 23/tcp # Virtual Terminal Protocol
smtp 25/tcp # Simple Mail Transfer Protocol
nntp 119/tcp readnews # Network News Transfer Protocol
#
# Services UNIX
exec 512/tcp # BSD rexecd
biff 512/udp comsat # notification du courrier
login 513/tcp # login distant
who 513/udp whod # who and uptime distants
shell 514/tcp cmd # commande distante, sans mot de passe
syslog 514/udp # syslog par r
eseau
printer 515/tcp spooler # spouleur d'imprimante
route 520/udp router routed # protocole RIP
est maintenue sur chaque machine ; elle se trouve dans un chier dont le nom est
/etc/services. Il comporte des entrees composees ainsi :
Ici, service et port denissent respectivement le nom du service et le port correspon-
dant, et protocole indique quel protocole de transport est utilise. En principe, c'est
soit udp, soit tcp. Il est possible qu'un service soit disponible par plus d'un protocole,
ou bien qu'un m^eme port soit utilise pour plusieurs services, tant que ces protocoles
sont dierents. Le champ alias permet de specier plusieurs noms pour un m^eme
service.
Generalement, il n'est pas necessaire de modier le chier services fourni avec la
partie reseau de votre systeme Linux. Neanmoins, vous trouverez un petit extrait de
ce chier dans la gure 9.2.
Par exemple, notez que le service echo est oert sur le port 7 a la fois pour TCP et
UDP, et que le port 512 sert a deux services dierents : execution distante (rexec(1))
utilisant TCP, et le demon COMSAT, qui indique aux utilisateurs que du nouveau
courrier est arrive, par UDP (voir xbi(1x)).
9.4. RPC : appel de procedure distante 137
#
# Protocoles Internet (IP)
#
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # internet group multicast protocol
tcp 6 TCP # transmission control protocol
udp 17 UDP # user datagram protocol
raw 255 RAW # RAW IP interface
Comme pour les services, les fonctions reseau ont besoin d'un moyen de traduire
les noms de protocoles | par exemple, ceux indiques dans le chier services | en
numeros de protocoles compris par la couche IP de toute autre machine. Il existe un
chier pour cela, /etc/protocols. Il contient une entree par ligne, composee du nom
du protocole, et de son numero associe. Vous n'aurez probablement jamais a modier
ce chier, dont un exemple est donne gure 9.3.
#
# /etc/rpc - divers services RPC
#
portmapper 100000 portmap sunrpc
rstatd 100001 rstat rstat_svc rup perfmeter
rusersd 100002 rusers
nfs 100003 nfsprog
ypserv 100004 ypprog
mountd 100005 mount showmount
ypbind 100007
walld 100008 rwall shutdown
yppasswdd 100009 yppasswd
bootparam 100026
ypupdated 100028 ypupdate
Sur les reseaux TCP/IP, les auteurs de RPC furent confrontes au probleme de faire
correspondre un service reseau generique aux numeros de programmes. Ils deciderent
que chaque serveur proposerait a la fois un port TCP et UDP pour chaque programme
et chaque version. Generalement, les applications RPC utiliseront UDP pour envoyer
des donnees, et ne prendront TCP que si les donnees a transferer ne tiennent pas dans
un seul datagramme UDP.
Bien s^ur, les clients doivent avoir un moyen de trouver a quel port correspond un
numero de programme donne. Un chier de conguration serait inadapte ; comme les
applications RPC n'utilisent pas de ports reserves, il n'y aurait aucune garantie qu'un
port utilise a l'origine pour notre application de base de donnees n'ait pas ete pris par
quelque autre processus. Par consequent, les applications RPC prennent n'importe
quel port possible et l'enregistrent par le biais du demon portmapper. Il agit comme
un concierge pour tous les serveurs RPC en fonctionnement sur sa machine. Un client
desirant contacter un service avec un numero de programme donne demandera d'abord
au portmapper de la machine serveur, qui lui indiquera les ports TCP et UDP par
lesquels le service peut ^etre atteint.
Cette methode a l'inconvenient d'introduire un point faible, un peu comme le fait
le demon inetd pour les services Berkeley standard. Mais ici, c'est encore pire car
lorsque le portmapper s'arr^ete pour une raison quelconque, toutes les informations
sont perdues ; ce qui signie que vous devez relancer manuellement chaque serveur,
ou reamorcer completement la machine.
9.5. Conguration des commandes en (( r )) 139
Le serveur commence par tester hosts.equiv 6 pour voir si Janet a droit a un acces
libre, et si la reponse est negative, il essaiera de le trouver dans le chier .rhosts du
repertoire personnel de joe.
Le chier hosts.equiv sur euler contient ceci :
gauss
euler
-public
quark.physique.groucho.edu andres
Une entree consiste en un nom de machine, suivi facultativement par un nom d'utili-
sateur. Si un h^ote appara^t seul, tous ses utilisateurs seront admis sous leurs comptes
locaux sans aucun test d'identication. Dans l'exemple ci-dessus, Janet aurait le droit
de se connecter sous son compte janet en arrivant de gauss, et ce serait vrai pour
tout autre utilisateur a l'exception de root. Toutefois, si Janet voulait entrer sous le
nom joe, il lui serait demande le mot de passe correspondant.
Si un nom d'h^ote est suivi par un utilisateur, comme dans la derniere ligne de
l'exemple, ce dernier possede alors un acces libre, sans mot de passe, a tous les comptes
excepte celui de root.
Le nom de machine peut aussi ^etre precede du signe moins, comme dans l'entree -
public. Cela a pour eet de demander l'authentication pour tous les comptes de
-public, quels que soient les droits que les utilisateurs pourraient s'octroyer via leur
chier .rhosts.
Le format de .rhosts est identique a celui de hosts.equiv, mais sa signication est un
peu dierente. Considerons le chier .rhosts de Joe, sur la machine euler :
chomp.cs.groucho.edu
gauss janet
La premiere entree autorise un acces libre a l'utilisateur joe lorsqu'il arrive de la ma-
chine chomp.cs.groucho.edu, mais ne change rien aux droits de tout autre compte
sur euler ou chomp. La seconde entree est une variante, en ce sens qu'elle donne un
acces libre du compte de Joe a janet, s'il arrive de gauss.
Notez que le nom de machine du client est obtenu par la recherche inverse sur son
adresse IP, et donc que cette possibilite ne fonctionnera pas avec des h^otes inconnus
6 Notez que le chier hosts.equiv n'est pas utilise si quelqu'un tente de se connecter sous root.
:
9.5. Conguration des commandes en (( r )) 141
du resolver. Ce nom d'h^ote est considere correspondre au nom contenu dans le chier
hosts dans l'un des cas suivants :
{ Le nom canonique du client (et non pas un alias) est identique a celui contenu
dans le chier.
{ Si le nom de la machine cliente est un nom pleinement qualie (comme le re-
tournera le resolver si vous utilisez le DNS), et qu'il n'est pas identique a celui
trouve dans le chier, il sera compare a ce dernier, augmente du nom de domaine
local.
142 Chapitre 9. Aspects importants du reseau
143
Chapitre 10
NIS : Network Information
System
Sur un reseau local, le but de votre travail d'administration est en principe d'orir un
environnement rendant le reseau transparent a vos utilisateurs. Il vous faudra alors un
moyen de conserver les informations vitales comme les comptes utilisateurs, en parfait
synchronisme sur toutes les machines. Nous avons deja vu que pour la resolution des
noms, nous avons un outil puissant et adapte : DNS. Pour d'autres t^aches, il n'y a
pas de service specialise. De plus, si vous ne gerez qu'un petit reseau non connecte a
l'Internet, l'utilisation du DNS est sans grand inter^et.
C'est pourquoi Sun a developpe NIS, le Network Information System (systeme d'in-
formation reseau). NIS ore des facilites d'acces de base de donnees utilisees pour
distribuer des informations, comme celles contenues dans les chiers passwd et groups,
a tous les h^otes de votre reseau. Celui-ci appara^t alors comme un unique systeme,
avec les m^emes comptes sur toutes les machines. De m^eme, vous pouvez utiliser NIS
pour distribuer les renseignements sur les noms contenus dans /etc/hosts a travers le
reseau.
NIS est base sur RPC, et comprend un serveur, une bibliotheque client, et dierents
outils d'administration. A l'origine, le systeme s'appelait les pages jaunes (Yellow
Pages), ou YP ; et ce nom est encore souvent employe. Or, (( Yellow Pages )) est une
marque deposee de British Telecom, qui imposa a Sun l'utilisation d'un autre nom.
C'est pour cette raison que YP reste le prexe de la plupart des commandes relatives
a NIS comme ypserv, ypbind, etc.
Aujourd'hui, NIS est disponible pour pratiquement tous les systemes Unix, et il en
existe m^eme des implementations gratuites. L'une d'elles provient de la distribution
Net-2 de BSD et est derivee d'une version de reference en domaine public, oerte par
Sun. Le code de la bibliotheque client de cette version fait partie de la bibliotheque
standard GNU libc depuis longtemps, mais les programmes d'administration n'ont ete
144 Chapitre 10. NIS : Network Information System
que tres recemment portes sous Linux, par Swen Thummler 1 . Il manque un serveur
NIS dans l'implementation de reference. Tobias Reber a realise un autre paquetage
NIS comprenant tous les outils et un serveur ; il s'appelle yps 2 .
Actuellement, une reecriture complete du code NIS, appelee NYS est en cours, ce
travail est eectue par Peter Eriksson ; 3 elle supportera aussi bien le NIS standard que
la nouvelle version tres amelioree de Sun, NIS+. NYS ore non seulement un ensemble
d'outils et un serveur, mais ajoute de toutes nouvelles bibliotheques de fonctions qui
l'ameneront sans doute a faire partie de la libc standard un jour. Cela comprend une
nouvelle methode de conguration pour la resolution de noms qui remplace l'actuelle,
avec host.conf. Nous decrirons les caracteristiques de ces fonctions.
Ce chapitre est oriente sur NYS plut^ot que les deux autres paquetages, que nous
appellerons le code NIS (( traditionnel )). Si vous avez l'intention d'utiliser l'une ou
l'autre implementation, les instructions contenues dans ce guide pourront peut-^etre
ne pas sure. Pour toute information supplementaire, consultez un ouvrage specialise
sur le sujet, comme NFS and NIS, par Hal Stern ([NFS and NIS]).
Pour l'instant, NYS est encore en cours de developpement, et par consequent les uti-
litaires standard de Linux comme les programmes reseau ou login n'ont pas encore
ete adaptes. Toutefois, NYS est integre a la bibliotheque C libc depuis sa version
4.6, vous pouvez par consequent facilement construire votre propre bibliotheque sup-
portant NYS au lieu du code NIS traditionnel 4 . Les responsables du projet GNU
semblent aussi avoir l'intention d'integrer NYS dans leur implementation ocielle de
la bibliotheque GNU libc, dont celle de Linux est derivee.
cherche dans le chier hosts pour un nom de machine, ou pour une adresse IP. Par
consequent, on va donc deriver de ce chier deux cartes NIS, nommees hosts.byname
et hosts.byaddr. Le tableau 10.1 enumere les cartes courantes et les chiers a partir
desquels elles sont generees.
# domainname canette
Les domaines NIS determinent quel serveur interroger. Par exemple, le programme
login d'une machine de nos viticulteurs ne doit, bien entendu, employer que le serveur
de leur domaine NIS (ou l'un d'eux s'il y en a plusieurs) pour demander le mot de
passe d'un utilisateur, et il en va de m^eme pour les brasseurs ; a chaque domaine NIS
son serveur.
Il nous reste un mystere a resoudre: comment un client peut-il trouver sur quel serveur
se connecter ? L'approche la plus simpliste serait d'avoir un chier de conguration
indiquant le nom de la machine a contacter. Ce n'est toutefois pas satisfaisant car
il serait impossible de contacter plusieurs serveurs (du m^eme domaine NIS, cela va
sans dire), selon leur disponibilite. Par consequent, les implementations traditionnelles
de NIS emploient un demon special appele ypbind pour detecter un serveur dans
leur domaine NIS. Avant de pouvoir eectuer des requ^etes NIS, une application doit
trouver, gr^ace a ypbind, le serveur a contacter.
Ce demon ypbind sonde les serveurs en emettant sur le reseau IP local un message
de diusion (broadcast) ; le premier qui repond est considere comme le plus rapide et
sera utilise pour toutes les requ^etes NIS qui suivront. Apres un certain temps, ou si
le serveur devient indisponible, ypbind recherche a nouveau les serveurs actifs.
10.2. NIS contre NIS+ 147
Cette methode est discutable sur un point ; vous n'en avez que rarement besoin, et
elle introduit un probleme de securite : ypbind croit aveuglement la premiere machine
qui repond, qui peut aussi bien ^etre un humble serveur NIS tout a fait correct, qu'un
malicieux intrus. Il n'est pas besoin de dire que c'est particulierement g^enant lorsque
vous gerez vos mots de passe par NIS. Pour se proteger, la bibliotheque NIS de Linux
n'utilise pas ypbind par defaut, mais recupere le nom du serveur depuis un chier de
conguration.
Il existe actuellement deux serveurs NIS disponibles sous Linux ; l'un se trouve dans
le paquetage yps de Tobias Reber, et l'autre dans l'ensemble ypserv de Peter Eriksson.
Celui que vous utiliserez n'a aucune importance, que vous preniez NYS ou le code NIS
standard qui est actuellement dans la bibliotheque libc. A l'heure ou nous redigeons ce
chapitre, le code gerant les serveurs esclaves NIS semble plus complet dans yps. D'un
autre c^ote, ypserv corrige un probleme de securite courant sous NIS (qui sera decrit
plus loin), ce que ne fait pas yps. Le choix depend donc entierement de vos besoins.
Apres avoir installe le programme serveur (ypserv) dans /usr/sbin, vous devrez creer
le repertoire destine a recevoir les cartes qui seront distribuees. Pour congurer le
domaine NIS canette, les cartes devront se trouver dans /var/yp/canette. Le serveur
determine s'il gere un domaine NIS particulier en testant l'existence de ce repertoire.
Si vous supprimez le service d'un domaine NIS, assurez-vous de supprimer egalement
ce repertoire.
An d'accelerer les recherches, les cartes sont souvent stockees au format DBM. Elles
sont creees a partir des chiers de reference a l'aide d'un programme appele makedbm
(pour le serveur de Tobias) ou dbmload (pour celui de Peter). Attention, ces com-
mandes peuvent ne pas ^etre interchangeables. Transformer un chier en une forme
comprehensible par dbmload necessite generalement un peu de magie awk ou sed, par
consequent le paquetage ypserv de Peter Eriksson contient un Makele (nomme yp-
Makele) qui eectue tout le travail pour vous. Vous devrez l'installer sous le nom
10.5. Securite du serveur NIS 149
Makele dans le repertoire ou se trouvent vos cartes et l'editer pour qu'il re
ete celles
que vous desirez distribuer. Vers le debut de ce chier, vous trouverez la cible all qui
indique les services que ypserv devra orir. Par defaut, la ligne ressemble a celle-ci :
all: ethers hosts networks protocols rpc services passwd group netid
Si par exemple vous ne voulez pas produire les cartes ethers.byname et ethers.byaddr,
il sut de supprimer le mot ethers de cette ligne. Pour tester votre conguration,
vous pouvez commencer avec juste une ou deux cartes, comme services.*.
Apres avoir edite ce Makele, restez dans le repertoire et tapez make. Les cartes seront
alors automatiquement generees et installees. Il ne faudra pas oublier de mettre a jour
ces cartes chaque fois que vous modierez les chiers de reference, faute de quoi les
modications resteraient invisibles sur le reseau.
La section suivante detaille la conguration de la partie client de NIS. Si rien ne
marche, essayez de voir si les requ^etes arrivent a votre serveur. En indiquant l'option
-debug sur la ligne de commandes de ypserv, vous obtiendrez des messages de d ebo-
guage sur la console, indiquant toutes les requ^etes NIS recues et le resultat qui est
envoye aux clients ; cela devrait vous permettre de localiser le probleme. Le serveur
de Tobias ne possede pas cette option.
ypserv: 172.16.2.
6 Pour valider cette option, il peut ^etre necessaire de recompiler le serveur. Lisez les instructions
:
contenues dans le chier README fourni dans la distribution.
150 Chapitre 10. NIS : Network Information System
Tous les h^otes du reseau IP 172.16.2.0 auraient acces au serveur NIS. Pour interdire
tous les autres, l'entree correspondante dans hosts.deny serait :
ypserv: ALL
Les numeros IP ne sont pas la seule facon de specier h^otes ou reseaux dans hosts.allow
et hosts.deny. Consultez la page de manuel hosts access(5) sur votre systeme pour
avoir plus de details. Toutefois, vous devez savoir qu'il est impossible d'utiliser des
noms d'h^otes ou de domaines dans l'entree ypserv : si vous y mettez un nom, le
serveur essaie de le resoudre, mais le resolver appelle a son tour ypserv, et vous entrez
dans une boucle innie.
Vous pouvez aussi utiliser le portmapper securise a la place de l'option securenets de
ypserv. Cette version (portmap-3.0) 7 emploie aussi la methode par hosts.allow, mais
ore cette securite pour tous les serveurs RPC, et non pas uniquement pour ypserv.
Mais n'essayez pas d'utiliser a la fois securenets et le portmapper securise, ce serait
inutile et la charge serait trop importante.
La premiere ligne indique a tous les clients NIS que cet h^ote appartient au domaine
NIS bouteille. Si vous omettez cette declaration, NYS utilisera le nom de domaine
que vous avez assigne au systeme par la commande domainname. La seconde ligne
indique le nom du serveur NIS a utiliser. Bien entendu, l'adresse IP correspondant a
gamay doit se trouver dans le chier hosts ; l'alternative etant de mettre directement
cette adresse IP au lieu du nom.
Dans la forme ci-dessus, la commande server indique a NYS d'utiliser le serveur spe-
cie, quel que soit le domaine NIS courant. Si, toutefois, vous deplacez votre machine
frequemment d'un domaine NIS a un autre, vous pouvez indiquer ces domaines dans
le chier yp.conf : il sut d'indiquer plusieurs serveurs, suivi du domaine NIS corres-
pondant. Par exemple :
Ce pourrait ^etre la conguration d'une machine portable, appelee a ^etre utilisee tour a
tour dans ces deux domaines NIS. Il sura d'initialiser le domaine desire au moment
du demarrage du systeme, par la commande domainname.
Apres avoir cree ce chier de conguration de base et avoir verie qu'il est lisible
par tout le monde, vous devez faire votre premier test pour voir si vous pouvez bien
vous connecter a votre serveur. Choisissez une carte que celui-ci distribue, comme
hosts.byname, et essayez de la recuperer avec l'utilitaire ypcat. Ce programme, comme
tous les autres outils d'administration NIS, doit se trouver dans le repertoire /usr/sbin.
# ypcat hosts.byname
172.16.2.2 brouilly.bibine.com brouilly
172.16.2.3 gamay.bibine.com gamay
172.16.1.1 kro.bibine.com kro
172.16.2.1 kro.bibine.com kro
172.16.1.2 gueuze.bibine.com gueuze
172.16.1.3 trappiste.bibine.com trappiste
172.16.2.4 cahors.bibine.com cahors
Vous devriez obtenir une sortie ressemblant a celle ci-dessus. Si vous avez un message
d'erreur disant (( Can't bind to server which serves domain )), c'est que soit le
domaine NIS que vous avez initialise n'a pas de serveur correspondant deni dans
le chier yp.conf, soit que le serveur est inaccessible pour une raison quelconque.
Dans ce dernier cas, veriez qu'un ping vers cette machine fonctionne bien, et qu'il y
existe bien un serveur NIS. Vous pouvez verier si un serveur NIS est present par la
commande rpcinfo, qui devrait vous acher :
Voici la liste complete des services susceptibles d'^etre utilises dans une entree de nss-
witch.conf. Les cartes, chiers, serveurs et objets utilises pour les recherches dependent
bien entendu du nom de l'entree.
nisplus ou nis+
Utilise le serveur NIS+ du domaine. Son adresse sera obtenue par le
chier /etc/nis.conf.
nis Interroge le serveur NIS du domaine. La machine a contacter est
conguree dans le chier yp.conf comme decrit dans la section pre-
cedente. Pour les entrees hosts, ce sont les cartes hosts.byname et
hosts.byaddr qui seront demandees.
dns Utilise le serveur de noms DNS. Ce type de service n'est utile qu'avec
10.8. Utilisation des cartes passwd et group 153
# /etc/nsswitch.conf
#
hosts: nis dns [NOTFOUND=return] files
networks: nis [NOTFOUND=return] files
Il est tres important d'executer ces commandes une fois le nouveau chier passwd
installe, et que tous les chiers ont ete trouves. La mise a jour des groupes se fait de
la m^eme maniere.
Apres cela, les numeros d'utilisateurs et de groupes sur votre systeme correspondront
a ceux des autres machines de votre domaine NIS. L'etape suivante sera d'ajouter les
lignes de conguration dans nsswitch.conf qui valideront les recherches NIS pour les
informations utilisateur et groupe :
# /etc/nsswitch.conf - traitement de passw et group
passwd: nis files
group: nis files
(( longue )), ls ache les noms des groupes et des utilisateurs propri etaires de chaque
chier. Pour chaque numero rencontre, elle devra donc interroger le serveur NIS. Cela
ralentira enormement les choses, surtout si votre reseau local est charge ; ne parlons
m^eme pas de la situation ou le serveur NIS n'est pas sur le m^eme reseau physique et
que les datagrammes doivent traverser un routeur.
Mais ce n'est pas tout ! Imaginez ce qui arrive si un utilisateur desire changer son mot
de passe. Il appellera la commande passwd le plus naturellement du monde, qui mettra
a jour le chier passwd local. Or c'est impossible avec NIS, puisque ce chier n'est
plus disponible localement, et il n'y a aucune option pour que les utilisateurs puissent
se connecter au serveur NIS pour changer leurs mots de passe. Par consequent, NIS
ore une commande de remplacement appelee yppasswd, qui est equivalente a passwd
lorsque NIS est disponible. Elle contacte le serveur NIS par RPC, et lui donne le
nouveau mot de passe. En general, on installe yppasswd a la place de la commande
passwd originale, en faisant quelque chose comme ceci :
# cd /bin
# mv passwd passwd.old
# ln yppasswd passwd
Vous devrez en m^eme temps installer rpc.yppasswdd sur le serveur et le lancer depuis
rc.inet2. Ainsi, toutes les complications induites par NIS seront totalement cachees
aux utilisateurs.
+:*:0:0:::
Elle marque l'endroit ou les fonctions de recherche (( inserent )) les cartes NIS. Une
ligne similaire dans le chier /etc/group a le m^eme eet pour les cartes group.*.
Pour utiliser les cartes hosts.* distribuees par votre serveur YP, changez la ligne
order du chier host.conf. Par exemple, pour utiliser NIS, DNS et /etc/hosts (dans
cet ordre), cette ligne doit appara^tre ainsi :
Contrairement a NYS, le code traditionnel necessite un demon ypbind pour trouver les
serveurs actifs, qui doit ^etre invoque au demarrage du systeme apres que le domaine
NIS a ete initialise et que le portmapper RPC a ete lance.
Jusqu'a il y a peu, ypbind cherchait les serveurs par diusion RPC. Comme nous
l'avons dit au debut, c'est une solution peu s^ure. C'est pourquoi la derniere version
des outils YP (de la distribution yp-linux) possede maintenant un demon ypbind qui
supporte le chier de conguration /etc/yp.conf. Si ce chier existe, le programme y
recherchera une ou plusieurs lignes de la forme :
# yp.conf - name YP server for ypbind.
ypserver gamay
Le demon ypbind recherche alors les serveurs actifs parmi ceux indiques 8. S'il ne trouve
pas de chier yp.conf, ou si aucun des serveurs ne repond, il reprendra l'ancienne
methode de diusion RPC, a la recherche d'un serveur qui veuille bien repondre.
Il y a eu recemment de nombreux rapports de bogue signalant que NIS echouait avec
les messages d'erreur :
8 Notez que le mot cle est dierent de celui utilise par NYS pour le nom du serveur.
:
10.10. Utilisation du code NIS traditionnel 157
Ils sont dus a une modication malencontreuse de la facon dont ypbind communique
avec les fonctions de la bibliotheque. Pour y remedier, il faut se procurer les dernieres
versions des sources des utilitaires NIS et les recompiler 9.
9: Le code source de yp-linux peut ^etre obtenu sur le site ftp.uni-paderborn.de dans le repertoire
/pub/Linux/LOCAL.
158 Chapitre 10. NIS : Network Information System
159
Chapitre 11
NFS, le systeme de chiers
par reseau
NFS, le systeme de chiers par reseau, est probablement le service le plus repandu
utilisant RPC. Il permet d'acceder aux chiers presents sur des machines distantes
exactement comme s'ils etaient locaux. Il est constitue d'un melange de fonctionnalites
integrees au noyau c^ote client et d'un serveur NFS de l'autre c^ote. Cet acces est
completement transparent pour le client, et fonctionne sur une grande variete de
serveurs et d'architectures.
NFS ore un certain nombre d'avantages :
{ Les donnees auxquelles tous les utilisateurs accedent peuvent resider sur un
h^ote central, chaque client montant ce repertoire au demarrage du systeme.
Par exemple, vous pouvez conserver tous les comptes des utilisateurs sur une
machine et faire que toutes les autres montent le repertoire /home depuis cet
endroit. Si, de plus, NIS est installe, les utilisateurs peuvent se connecter sur
n'importe quel h^ote et travailler toujours sur les m^emes chiers.
{ Les donnees occupant beaucoup de place disque peuvent ^etre stockees sur une
seule machine. Par exemple, tous les chiers et programmes relatifs a LaTEX et
METAFONT peuvent ^etre installes et maintenus en un seul endroit.
{ Les donnees administratives peuvent se trouver sur une unique machine. Il n'y a
pas besoin d'utiliser rcp pour installer le m^eme stupide chier sur 30 ordinateurs
dierents.
Sous Linux, NFS est en grande partie le travail de Rick Sladkey 1 , qui a ecrit le code
NFS du noyau et une bonne partie du serveur. Ce dernier est derive de unfsd (user
1 On peut joindre Rick a l'adresse jrs@world.std.com.
:
160 Chapitre 11. NFS, le systeme de chiers par reseau
space NFS server), realise a l'origine par Mark Shand, et de hnfs (Harris NFS server),
ecrit par Donald Becker.
Voyons le fonctionnement de NFS. Un client essaie de monter un repertoire d'une
machine distante sur un repertoire local, exactement de la m^eme maniere qu'il le fait
pour un peripherique physique. Mais la syntaxe a employer pour designer le repertoire
distant est dierente. Par exemple, pour monter le /home de kro sur le repertoire
users de trappiste, l'administrateur tape la commande suivante sur trappiste 2 :
sensiblement aectees en certaines circonstances 3. Cette limite est franchie les versions
Linux-1.1 recentes, et le code client a ete modie en consequence, bien entendu.
$ cat /proc/filesystems
minix
ext2
xiafs
msdos
nodev proc
nodev nfs
iso9660
Si vous ne voyez pas nfs dans la liste, vous devez recompiler votre noyau en validant
le support de NFS. Consultez la section (( Conguration du noyau )) du chapitre 3.
Dans le cas d'une ancienne version, anterieure a Linux 1.1, le meilleur moyen de savoir
si NFS est valide est d'essayer de monter un volume NFS. Pour cela, vous pouvez creer
un repertoire de test dans /tmp, et essayer de monter un repertoire local dessus :
# mkdir /tmp/test
# mount localhost:/etc /tmp/test
Si cette operation echoue avec un message d'erreur indiquant (( fs type nfs not
supported by kernel )), vous devrez vous compiler un nouveau noyau en validant
NFS. Tout autre message d'erreur est sans importance, puisque rien n'est encore
congure.
:3 Comme l'a explique Alan Cox : Les specications de NFS necessitent que le serveur termine
toute ecriture disque avant de renvoyer un acquittement. Comme les noyaux BSD ne sont capables
d'ecrire que des pages (4 Ko), ecrire quatre fragments de 1 Ko chacun sur un serveur NFS BSD
resulte en quatre operations d'ecriture de 4 Ko chacune.
162 Chapitre 11. NFS, le systeme de chiers par reseau
11.2 Monter un volume NFS
Les volumes NFS 4 sont montes presque de la m^eme facon que les systemes de chiers
traditionnels. Vous appelez la commande mount avec la syntaxe suivante :
# mount -t nfs volume nfs r
epertoire local options
Avec volume nfs indique comme h^ote distant:repertoire distant. Puisque cette
notation est unique aux systemes de chiers NFS, vous pouvez omettre l'option -t
nfs.
Il y a un certain nombre d'options additionnelles possibles que vous pouvez indiquer
a la commande mount. Elles peuvent ^etre donnees soit apres le commutateur -o sur
la ligne de commandes, soit dans le champ prevu a cet eet dans l'entree du chier
/etc/fstab correspondant a ce volume. Dans les deux cas, ces options sont separees
entre elles par des virgules. Celles speciees en ligne de commandes ont toujours
priorite sur celles du chier fstab.
Voici un exemple d'entree de /etc/fstab :
# volume point de montage type options
news:/usr/spool/news /usr/spool/news nfs timeo=14,intr
En l'absence d'une entree fstab, la commande a passer est un peu moins lisible. Par
exemple, supposons que vous montiez vos repertoires utilisateurs depuis une machine
appelee labas, qui utilise par defaut des blocs de 4 Ko pour les operations de lec-
ture/ecriture. Vous voulez reduire cette taille a 2 Ko parce que vous avez un ancien
noyau Linux ; la commande est alors :
# mount labas:/home /home -o rsize=2048,wsize=2048
La liste de toutes les options valides est decrite en totalite dans la page de manuel de
nfs(5) fournie avec la version de mount de Rick Sladkey (qui fait partie du paquetage
util-linux). En voici un extrait :
rsize=n et wsize=n
Specient la taille du datagramme utilisee par les clients NFS pour
les requ^etes de lecture et d'ecriture, respectivement. Actuellement,
leur valeur par defaut est de 1 024 octets pour les raisons evoquees
plus haut.
4 On ne dit pas systeme de chiers, car ce ne sont pas a proprement parler des systemes de
:
chiers.
11.2. Monter un volume NFS 163
Sauf pour rsize et wsize, toutes ces options concernent le comportement du client si le
serveur devient momentanement inaccessible. Elles s'organisent de la facon suivante :
Lorsque le client envoie une requ^ete au serveur NFS, il attend pendant un certain
temps (deni par l'option timeout) que l'operation soit terminee. Si aucune conr-
mation ne lui arrive pendant le temps imparti, un depassement de temps mineur est
compte, et il recommence l'operation en doublant cet intervalle de temps. Lorsque
cette valeur atteint 60 secondes, un depassement de temps majeur se produit.
Par defaut, un depassement de temps majeur provoquera l'achage d'un message sur
la console, et l'operation recommencera, en doublant encore une fois le temps imparti.
Le cycle peut durer eternellement. Les volumes montes ainsi, ou les operations seront
tentees jusqu'a ce que le serveur reponde, sont dits montes en dur. Dans le cas inverse,
le processus appelant recoit une erreur d'entree/sortie lorsqu'un depassement de temps
majeur se produit. En raison du cache, cette condition d'erreur n'est pas propagee
au processus avant son prochain appel a la fonction write(2), aussi dans ce cas de
montage, un programme ne peut jamais ^etre certain qu'une operation d'ecriture a
reussi.
Monter en dur ou non est une question de go^ut, mais depend aussi des donnees aux-
quelles vous comptez acceder par NFS. Par exemple, s'il s'agit de vos programmes X,
vous ne souhaitez sans doute pas que votre session de travail se termine anorma-
lement, uniquement parce que quelqu'un a momentanement surcharge le reseau en
lancant sept copies de xv simultanement, ou parce que la prise s'est debranchee. Avec
un montage en dur, vous serez s^ur que votre machine attendra jusqu'a ce que le contact
soit retabli avec le serveur NFS. D'un autre c^ote, les donnees non critiques, comme les
partitions de News Usenet ou les archives FTP, ne necessitent pas de montage en dur,
de sorte que les sessions ne restent pas en attente indeniment en cas de panne reseau
ou d'arr^et de la machine distante. Si votre reseau est souvent surcharge ou lent pour
des raisons diverses, vous pouvez augmenter le delai d'attente par l'option timeo, ou
monter les volumes en dur, mais autorisez l'interruption des appels NFS (intr) pour
ne pas rester bloque en cas de probleme.
Generalement, le demon mountd conservera d'une maniere ou d'une autre une trace
des repertoires qui ont ete montes, et par quels h^otes. Cette information peut ^etre
achee par la commande showmount, qui fait partie du paquetage serveur NFS. La
164 Chapitre 11. NFS, le systeme de chiers par reseau
version Linux, toutefois, n'implemente pas encore cette possibilite.
Les informations sur les proprietaires des chiers qu'un demon NFS fournit a ses
clients ne contiennent en principe que les valeurs numeriques d'utilisateur et de
groupe. Si le client et le serveur associent les m^emes valeurs aux m^emes personnes et
groupes, on dit qu'ils partagent le m^eme espace. C'est par exemple le cas lorsque vous
utilisez NIS pour distribuer les informations passwd a toutes les machines de votre
reseau.
Toutefois en certaines occasions ces valeurs ne correspondent pas. Plut^ot que de mo-
dier la conguration de l'un ou l'autre systeme, vous pouvez employer le demon
ugidd, qui s'occupera de parer au probleme. Gr^ace a l'option map daemon expliquee
plus loin, vous pouvez demander a nfsd de faire correspondre les valeurs utilisateur
et groupe du serveur a celles du client, a condition que ugidd soit en fonctionnement
sur ce dernier.
Il s'agit d'un serveur RPC qui est lance depuis rc.inet2, exactement comme nfsd et
mountd.
if [ -x /usr/sbin/rpc.ugidd ]; then
/usr/sbin/rpc.ugidd; echo -n " ugidd"
fi
un repertoire par NFS, ce repertoire doit ^etre exporte, c'est-a-dire indique dans le
chier exports. En voici un exemple :
# Fichier exports de kro.bibine.com
/home trappiste(rw) gueuze(rw) leffe(rw)
/usr/X11R6 trappiste(ro) gueuze(ro) leffe(ro)
/usr/TeX trappiste(ro) gueuze(ro) leffe(ro)
/ trappiste(rw,no_root_squash)
/home/ftp (ro)
Chaque ligne denit un repertoire et les h^otes autorises a le monter. Les noms de
machines sont en general pleinement qualies, mais peuvent egalement contenir les
caracteres generiques * et ?, qui ont la m^eme signication que dans le shell Bourne.
Par exemple, lab*.foo.com correspondra aussi bien a lab01.toto.com qu'a la-
beur.toto.com. Si aucun nom de machine n'est precise, comme pour le repertoire
/home/ftp dans l'exemple ci-dessus, n'importe quel h^ote pourra monter ce volume.
Lorsqu'il verie les permissions pour un client donne, mountd recherchera son nom
par l'appel gethostbyaddr(2). Avec le DNS, cet appel retournera le nom canonique,
aussi vous devez faire attention a ne pas utiliser d'alias dans le chier exports. Sans
DNS, le nom retourne est le premier trouve dans le chier hosts, qui correspond a
l'adresse du client.
Le nom de machine est suivi par une liste facultative de drapeaux, separes par des
virgules, entre parentheses. Ils peuvent prendre les valeurs suivantes :
insecure Autorise des acces non authenties.
unix-rpc Demande l'authentication RPC. Cela necessite simplement que la
requ^ete provienne d'un port reserve (un port dont le numero est
inferieur a 1024). C'est l'option par defaut.
secure-rpc Demande l'authentication RPC securisee. Ce n'est pas encore im-
plemente ; consultez la documentation de Sun pour plus de details.
kerberos Demande l'authentication Kerberos. Cette option n'est pas encore
implementee ; consultez la documentation du MIT pour plus de de-
tails sur le systeme Kerberos.
root squash Il s'agit d'une securite interdisant aux superutilisateurs des machines
speciees tout acces special, en transformant les requ^etes de l'utili-
sateur 0 sur le client en utilisateur 65534 (-2) sur le serveur, qui
correspond en principe a l'utilisateur nobody.
no root squash Ne change rien pour les requ^etes de superutilisateurs. C'est l'option
par defaut.
ro Monte la hierarchie de chiers en lecture seule. C'est l'option par
defaut.
166 Chapitre 11. NFS, le systeme de chiers par reseau
rw Monte la hierarchie de chiers en lecture et ecriture.
link relative Convertit les liens symboliques absolus (dont le contenu commence
par un slash) en liens relatifs en ajoutant ../ autant de fois que ne-
cessaire pour aller du repertoire contenant le lien a la racine sur le
serveur. Cette option n'a de sens que lorsque la totalite d'un systeme
de chiers d'un h^ote est monte ; autrement certains liens peuvent
pointer nulle part, ou pis, vers des chiers vers lesquels ils n'auraient
jamais d^u pointer. Cette option est en service par defaut.
link absolute Laisse tous les liens symboliques inchanges (le comportement normal
des serveurs NFS fournis par Sun).
map identity Cette option indique au serveur de considerer que le client utilise
les m^emes identicateurs d'utilisateurs et de groupes que le serveur.
Cette opion est en service par defaut.
map daemon Indique que les clients et le serveur n'ont pas les m^emes valeurs
d'identication utilisateurs et groupes. Le demon nfsd construira
alors une liste de correspondance entre les deux machines en interro-
geant le demon ugidd du client.
Une erreur de syntaxe dans le chier exports sera rapportee via la (( facilite )) daemon
de syslogd, au niveau notice, chaque fois que nfsd ou mountd sont lances.
Notez que les noms de machines correspondant aux adresses IP des clients sont ob-
tenus par recherche inverse, aussi le resolver doit ^etre congure proprement. Si vous
employez BIND et ^etes tres concernes par la securite, vous devez employer l'option
nospoof dans votre chier host.conf.
L'automonteur couramment utilise sous Linux s'appelle amd. Il a ete ecrit par Jan-
Simon Pendry et porte sous Linux par Mitch D'Souza. La version actuelle est amd-5.3.
Le fonctionnement de amd depasse le cadre de ce guide. Pour un bon manuel, consultez
les sources ; elles contiennent un chier Texinfo avec des informations tres detaillees.
168 Chapitre 11. NFS, le systeme de chiers par reseau
169
Chapitre 12
Ma^triser Taylor UUCP
UUCP fut developpe vers la n des annees soixante-dix par Mike Lesk aux labo-
ratoires AT&T Bell pour permettre des transmissions sur les lignes telephoniques
ordinaires. Puisque la plupart des personnes desirant avoir le courrier electronique et
les News Usenet a domicile communiquent par modem, UUCP est reste tres popu-
laire. Bien qu'il en existe de tres nombreuses implementations, sur une grande variete
d'architectures et de systemes d'exploitation, elles sont toutes compatibles entre elles.
Toutefois, comme avec tout logiciel devenu (( standard )) au l des annees, il n'y a
aucun UUCP que l'on pourrait appeler (( Le UUCP )), la reference. Son evolution est
permanente depuis que la premiere version vit le jour en 1976. Actuellement, il y a
deux types qui dierent dans leur support materiel et leur conguration. Plusieurs
implementations existent pour chacun, qui comportent egalement des variantes.
L'un s'appelle UUCP Version 2, et remonte a l'implementation de Mike Lesk, David
A. Novitz et Greg Chesson en 1977. Bien que tres ancienne, cette version est en-
core souvent utilisee. Ses implementations recentes orent beaucoup du confort des
nouvelles specications de UUCP.
Le second fut developpe en 1983 et on le nomme couramment BNU (Basic Networking
Utilities), ou HoneyDanBer UUCP que l'on abrege en HDB. Ce nom est derive de
celui des auteurs, P. Honeyman, D. A. Novitz et B. E. Redman. HDB a ete concu
pour parer a quelques deciences de UUCP Version 2. Par exemple, de nouveaux
protocoles de transfert ont ete rajoutes, et le repertoire de spoule est divise pour que
chaque site avec lequel il y a du trac UUCP possede son propre sous-repertoire.
L'implementation de UUCP qui est actuellement distribuee avec Linux est Taylor
UUCP 1.05 1 , c'est celle dont nous allons traiter dans ce chapitre. Taylor UUCP
version 1.05 est apparu en mai 1994. En plus des chiers de conguration traditionnels,
il peut aussi ^etre compile pour utiliser un nouveau style, la (( conguration Taylor )).
1 E crit par Ian Taylor, Copyright
: c 1993-1994
170 Chapitre 12. Ma^triser Taylor UUCP
Si vous ne disposez que de la version precedente (1.04), les dierences etant minimes
vous devriez pouvoir utiliser les renseignements contenus dans ce chapitre pour le
congurer.
Dans la plupart des distributions de Linux, Taylor UUCP est fourni precompile pour
la compatibilite BNU, ou Taylor, ou les deux. La methode Taylor est bien plus
exible
et probablement plus facile a comprendre que les chiers de conguration BNU parfois
assez obscurs, c'est donc celle-ci que nous allons decrire dans ce guide.
Le but de ce chapitre n'est pas de vous donner une description exhaustive de tout ce
que peut faire UUCP, mais plut^ot de vous apporter de bonnes bases pour l'installation
d'un site UUCP qui fonctionne. La premiere section est une petite introduction sur la
maniere dont UUCP implemente le transfert de chiers et l'execution de commandes
a distance. Si tout cela n'est pas nouveau pour vous, vous pouvez aller directement a
la section (( Fichiers de conguration )), qui detaille les dierents chiers utilises pour
la conguration de UUCP.
Nous considererons toutefois que vous connaissez les programmes utilisateurs mis en
jeu dans UUCP. Ce sont principalement uucp et uux ; vous en trouverez la description
dans le manuel en ligne.
A c^ote de ces deux commandes accessibles a tout le monde, UUCP en contient beau-
coup d'autres qui ne sont destinees qu'aux t^aches administratives. Elles servent a
suivre le trac UUCP, supprimer les vieux chiers de trace, ou calculer des statis-
tiques. Aucun de ces programmes ne sera decrit ici car ils ne concernent pas direc-
tement le fonctionnement de UUCP. De plus, ils sont tres bien documentes et tres
simples a utiliser. Il y a neanmoins une troisieme categorie de programmes, compre-
nant le cur de UUCP : uucico (ou cico signie copy-in copy-out, le programme de
communications), et uuxqt, qui execute les commandes recues des systemes distants.
Ils feront l'objet de ce chapitre.
Ceux qui ne trouveront pas ici tous les renseignements dont ils ont besoin devront
se reporter a la documentation fournie avec Taylor UUCP. Elle est composee d'un
ensemble de chiers Texinfo qui decrivent la conguration selon le schema Taylor, et
est extr^emement complete.
Si vous voulez utiliser la conguration BNU (ou m^eme la Version 2), il existe un excel-
lent livre sur le sujet : Managing UUCP and Usenet ([ManagUUCP]). Vous trouverez
egalement des informations tres utiles dans le document Linux UUCP-HOWTO de
Vince Skahan, poste regulierement dans comp.os.linux.answers, et disponible en
version francaise sur les sites diusant Linux en France.
Usenet comprend egalement un forum dedie aux discussions sur UUCP, qui s'ap-
pelle comp.mail.uucp. Si vous avez des questions speciques a Taylor UUCP, c'est
l'endroit ideal pour les poser, plut^ot que dans les groupes dedies a Linux.
12.1. Transferts UUCP et execution a distance 171
-s syst
eme Appelle systeme, sauf en cas de restriction horaire.
-S syst
eme Appel force de systeme, quelles que soient les conditions.
-r1 Lance uucico en mode ma^tre. C'est le mode par defaut avec les
options -s et -S. Utilisee seule, cette option provoque l'appel tour a
tour de tous les systemes connus, sauf en cas de restriction.
-r0 Lance uucico en mode esclave. C'est le mode par defaut lorsque au-
cune option -s ou -S n'est donnee. Dans ce mode, soit l'entree et la
sortie standard sont considerees comme etant connectees a un port
serie, soit le port TCP doit ^etre precise par l'option -p.
-x type, -X type
Met en route les traces de deboguage du type specie. Plusieurs types
peuvent ^etre donnes sous forme de liste separee par des virgules.
Les types suivants sont valides : abnormal, chat, handshake, uucp-
proto, proto, port, cong, spooldir, execute, incoming et outgoing. Le
mot cle all les valide tous. Pour rester compatible avec les autres
implementations de UUCP, on peut aussi specier un nombre, ce qui
valide alors le deboguage pour les n premiers items de cette liste.
Ces traces sont enregistrees dans le chier Debug, situe dans le re-
pertoire /var/spool/uucp.
Le suivant est le chier sys. Il contient toutes les informations speciques aux sites
auxquels vous ^etes relies par UUCP. Cela comprend le nom des machines et des infor-
mations sur le lien lui-m^eme, comme le numero de telephone, par exemple. Une entree
typique pour un site connecte par modem que nous appellerons pablo ressemblerait
a ceci :
# /usr/lib/uucp/sys - liste des voisins UUCP
# systeme: pablo
system pablo
time Any
phone 123-456
port serial1
speed 38400
chat ogin: gueuze ssword: lorca
3 Bien que la plupart des commandes UUCP doivent ^etre setuid uucp, vous devez faire tres
:
attention a ce que le programme uuchk ne le soit pas. Sinon, tous les utilisateurs auraient acces aux
mots de passe m^eme si les chiers ont un mode de 600.
12.2. Fichiers de conguration 175
Le mot cle port designe le port a utiliser, et time les heures auxquelles il peut ^etre
appele. La ligne chat decrit le script de dialogue necessaire pour permettre a uucico
d'entrer dans le systeme pablo ; nous reviendrons sur ces scripts un peu plus loin. La
ligne port indique simplement le nom d'une entree dans le chier port. Vous pouvez y
mettre le nom qui vous pla^t, tant que cette entree existe.
Ce chier port contient les informations speciques a la liaison. Pour les modems, il
decrit le chier de peripherique a utiliser, la gamme des vitesses supportees, et le type
de numeroteur connecte. L'entree ci-dessous decrit /dev/cua1 (COM 2), sur lequel est
connecte un modem NakWell capable de supporter la vitesse de 38 400 bps. Le nom
du port est choisi de maniere a correspondre a celui indique dans le chier sys.
# /usr/lib/uucp/port - ports UUCP
# /dev/cua1 (COM2)
port serial1
type modem
device /dev/cua1
speed 38400
dialer nakwell
La premiere chose que fait uucico est de chercher pablo dans le chier sys. Il voit
alors dans l'entree correspondante qu'il doit utiliser le port serial1 pour etablir la
connexion. Le chier port lui indique qu'il s'agit d'un port sur lequel est connecte un
modem NakWell.
Alors, uucico cherche dans le chier dial une entree decrivant ce modem NakWell, et
lorsqu'il l'a trouvee, ouvre le port serie /dev/cua1 et execute le dialogue de numero-
tation : ici, il envoie ATZ, attend la reponse OK, etc. Lorsqu'il rencontre la cha^ne \T,
il lui substitue le numero de telephone (123{456) extrait du chier sys.
176 Chapitre 12. Ma^triser Taylor UUCP
Le chier sys
Le chier port
system pablo
port serial1
port serial1
speed 38400
type modem
...
speed 38400
device /dev/cua1
dialer nakwell
...
dialer nakwell
chat "" ATZ ..
chat-fail BUSY
...
Le chier dial
Apres que le modem a retourne CONNECT, la connexion est etablie et le dialogue modem
est termine ; uucico retourne alors au chier sys et execute le dialogue d'entree dans
le systeme. Dans notre exemple, il attendra l'invite login: puis enverra son nom
d'utilisateur (neruda), attendra password: et repondra par le mot de passe, lorca.
Ensuite, la machine appelee lancera son propre uucico. Les deux programmes entreront
dans la phase de handshake decrite dans la section precedente.
La gure 12.1 symbolise les dependances entre les divers chiers de conguration.
5 La seule limitation est qu'il ne doit pas depasser sept caracteres, an de ne pas g^ener certaines
:
implementations fonctionnant sur des systemes d'exploitation imposant de telles limites. Les noms
plus longs sont souvent tronques par UUCP. Quelques versions les limitent m^eme a six caracteres !
6 Le projet de cartes UUCP enregistre tous les noms d'h^otes UUCP du monde entier et s'assure
:
qu'ils sont bien tous uniques. En ce qui concerne la France, ce projet est abandonne depuis 1994
et il en va de m^eme dans de plus en plus de pays ; le seul moyen d'obtenir une adresse valide est
maintenant de passer par un domaine gere par le DNS.
12.2. Fichiers de conguration 179
cong Il s'agit du chier de conguration principal. Vous pouvez y denir
votre nom de site UUCP.
sys Ce chier decrit tous les sites connus de vous. Pour chacun, il specie
son nom, a quelles heures il est possible de l'appeler, quel numero
de telephone composer (si necessaire), quel peripherique utiliser, et
comment se connecter.
port Contient les entrees decrivant chaque port disponible, avec la vitesse
supportee et le numeroteur a utiliser.
dial Decrit les numeroteurs employes pour etablir une communication
telephonique.
dialcode Contient les expansions pour les codes de numerotation symboliques.
call Contient le nom d'utilisateur et le mot de passe a employer pour se
connecter a un systeme. Rarement utilise.
passwd Contient les noms et mots de passe que les systemes doivent prendre
pour se connecter chez vous. Ce chier n'est utilise que lorsque uucico
s'occupe lui-m^eme de cette operation.
Ces chiers de conguration sont principalement composes de lignes contenant des
paires de mots cles/valeurs. Un signe diese introduit un commentaire qui s'etend
jusqu'a la n de la ligne. Pour utiliser ce caractere autrement que comme commentaire,
il faut l'echapper par un backslash, c'est-a-dire le coder comme ceci : \#
Vous pouvez encore ajuster un bon nombre d'options gr^ace a ces chiers. Nous ne
detaillerons pas tous les parametres possibles, mais uniquement les plus importants ;
vous devriez ensuite ^etre capable de faire fonctionner une liaison UUCP par modem.
Quelques sections supplementaires decriront les modications a eectuer pour utiliser
UUCP sur reseau TCP/IP ou par une ligne serie directe. Les documents Texinfo qui
accompagnent le code source de Taylor UUCP decrivent tout cela en detail.
Votre conguration terminee, vous pouvez la tester a l'aide de l'utilitaire uuchk (situe
dans /usr/lib/uucp). Il lit les chiers que vous avez redige avec soin et ache un
rapport detaille des valeurs qui seront utilisees pour chaque systeme.
180 Chapitre 12. Ma^triser Taylor UUCP
12.2.5 Options de conguration generale | le chier cong
Vous n'aurez en principe jamais besoin de ce chier pour autre chose que votre nom
UUCP. Par defaut, UUCP prend le nom que vous positionnez par la commande host-
name, mais il est possible de le preciser ici (s'il doit ^etre dierent, par exemple). Voici
un exemple de chier cong :
# /usr/lib/uucp/config - Fichier de configuration principal
hostname gueuze
Systeme distant
Le mot cle system designe le systeme distant. Vous devez specier le nom correct, et
non pas un alias de votre imagination, car uucico le veriera par rapport a ce que
cette machine lui indiquera lorsque vous serez connecte 7.
Chaque nom de systeme ne doit appara^tre qu'une fois. Si vous desirez plusieurs con-
gurations pour une m^eme machine (plusieurs numeros de telephone, par exemple),
vous pouvez employer le mot cle alternate, decrit plus loin.
Numero de telephone
Si le systeme distant doit ^etre atteint par une ligne telephonique, le champ phone
indique le numero que le modem doit appeler. Il peut contenir plusieurs codes sym-
boliques qui seront interpretes par la procedure de numerotation de uucico ; un signe
7 Les anciennes versions de UUCP Version 2 n'annoncent pas leur nom lorsqu'elles sont appelees ;
:
neanmoins les implementations recentes le font, ainsi que Taylor UUCP.
12.2. Fichiers de conguration 181
d'egalite (=) signie d'attendre une seconde tonalite, et un tiret (-) genere une pause
d'une seconde. Par exemple, certaines installations telephoniques necessitent une at-
tente entre certains prexes de numerotation speciaux et le numero a appeler 8 .
Toute cha^ne alphabetique peut ^etre utilisee pour cacher des informations dependantes
du site, comme des prexes d'appel. Ces cha^nes seront remplacees par le numero
indique dans le chier dialcode. Supposons que vous avez un chier dialcode comme
celui-ci :
# /usr/lib/uucp/dialcode - dialcode translation
Sirius 024881
Pluton 035119
Avec ces translations, vous pouvez utiliser un numero de telephone comme Pluton4722
dans le chier sys, ce qui rend les choses un peu plus lisibles.
Port et vitesse
Les options port et speed servent respectivement a selectionner le peripherique a utiliser
pour l'appel et la vitesse maximale a laquelle il doit ^etre initialise. Une entree system
peut utiliser soit l'une, soit l'autre, ou les deux options ensemble. Lors de la recherche
d'un peripherique dans le chier port, seuls ceux qui ont un nom correspondant et/ou
une vitesse sont selectionnes.
Generalement, l'option speed est susante. Si vous n'avez qu'un port serie deni
dans port, uucico prendra toujours celui-la de toute facon ; il sut donc d'indiquer a
quelle vitesse l'utiliser. Si vous avez plusieurs modems, il n'est pas non plus necessaire
d'indiquer un port particulier : si uucico trouve plusieurs possibilites, il essaiera tour
a tour chaque peripherique jusqu'a ce qu'il en trouve un qui soit libre.
Le script de dialogue
Nous avons deja rencontre ce script de dialogue, qui indique a uucico comment entrer
sur le systeme distant. Il consiste en une liste de cha^nes de caracteres attendues
et envoyees par le processus uucico local. Les cha^nes a attendre et a envoyer sont
inserees alternativement, et uucico rajoute automatiquement un retour-chariot (\r) a
la n de chaque envoi. Ainsi, un script de dialogue simple pourrait ressembler a ceci :
ogin: gueuze ssword: grqt22
Vous noterez que les cha^nes a attendre ne sont pas indiquees entierement. Cela permet
de s'assurer que, par exemple, Login: sera equivalent a login:, au cas ou.
8 La plupart des installations telephoniques privees necessitent que vous composiez le numero
:
0 ou 9 pour obtenir l'exterieur. On nous a indique que cela s'appelait un code d'acces secret. Sans
rire...
182 Chapitre 12. Ma^triser Taylor UUCP
Il est aussi possible d'obtenir une sorte d'execution conditionnelle avec uucico, dans le
cas ou le getty de la machine distante a besoin d'^etre recycle ou reinitialise avant qu'il
n'ache une invite. Pour cela, vous pouvez attacher un script secondaire a une cha^ne
d'attente, constitue de tirets. Ce script secondaire n'est execute que si l'attente echoue.
Une utilisation possible consiste a envoyer un BREAK si le site distant n'ache aucune
invite de login. L'exemple qui suit propose un script de dialogue general, qui devrait
aussi fonctionner s'il faut envoyer un retour-chariot pour reveiller un peu la machine
appelee. Le premier argument vide "" indique qu'il ne faut rien attendre et envoyer
directement la prochaine cha^ne de caracteres.
"" \n\r\d\r\n\c ogin:-BREAK-ogin: gueuze ssword: grqt22
Sur les cha^nes a envoyer, les sequences d'echappement suivantes sont valides, en plus
des precedentes:
EOT Caractere de n de transmission (^D).
BREAK (( Caract ere )) Break.
\c Suppression du rajout automatique du retour-chariot en n de cha^ne.
\d Pause d'une seconde.
\E Valide le test d'echo. Dans ce mode, uucico attend que l'echo de tout
ce qu'il ecrit lui revienne avant de continuer le dialogue. C'est surtout
utile pour les dialogues avec les modems (que nous rencontrerons plus
loin). Par defaut, ce mode est hors service.
\e Supprime le test d'echo.
12.2. Fichiers de conguration 183
\K Identique a BREAK.
\p Pause d'une fraction de seconde.
Entrees alternatives
Il est parfois necessaire d'avoir plusieurs entrees pour un m^eme systeme, par exemple
s'il peut ^etre joint par plusieurs lignes. Avec Taylor UUCP, vous pouvez realiser cela
en denissant des entrees alternatives, par le mot cle alternate.
Une entree alternative conserve tous les parametres de l'entree systeme principale et
ne modie que ceux qui y sont expressement indiques. Elles sont placees a l'interieur
d'une entree systeme et reperees par le mot alternate.
Pour utiliser deux numeros de telephone pour la machine pablo, il sut de modier
son entree dans le chier sys de la maniere suivante :
system pablo
phone 123-456
... entr
ees comme prec
edemment ...
alternate
phone 123-455
Cet exemple autorise les appels les lundis et mercredis de 3 heures a 7 heures 30, et
les vendredis entre 18 heures 05 et 20 heures. Lorsqu'un champ horaire s'etend apres
minuit, par exemple Mo1830-0600, cela signie lundi, entre minuit et 6 heures du
matin et entre 18 heures 30 et minuit.
Les mots cles speciaux Any et Never signient respectivement que les appels pourront
avoir lieu a toute heure, ou jamais.
La commande time prend un second argument facultatif qui indique un delai entre
plusieurs tentatives, en minutes. Lorsqu'un appel echoue, uucico n'autorisera aucun
autre appel de cette machine pendant un certain temps. Par exemple, si vous speciez
un intervalle de 5 minutes, il refusera d'appeler le systeme distant pendant 5 minutes
apres le dernier appel infructueux. Par defaut, ce temps est incremente chaque fois
qu'un appel echoue.
Le mot timegrade permet d'attacher un grade maximal a un horaire. Par exemple,
supposons que vous avez une entree comme ceci dans l'entree system :
timegrade N Wk1900-0700,SaSu
timegrade C Any
Elle autorise les jobs ayant un grade de C ou plus (generalement le courrier est spoule
avec le grade B ou C) a ^etre transferes chaque fois qu'une connexion est etablie, alors
que les News (qui ont usuellement le grade N) ne seront echangees que pendant la
nuit et les ns de semaine.
Tout comme time, la commande timegrade peut prendre un intervalle entre les tenta-
tives d'appel comme troisieme argument optionnel.
Il y a toutefois un piege ici : tout d'abord, l'option timegrade ne s'applique qu'a ce
que votre systeme envoie ; la machine distante peut toujours transferer ce qu'elle veut.
Vous pouvez employer l'option call-timegrade pour lui demander de n'envoyer que les
jobs dont le grade est d'un certain niveau ; mais il n'y a aucune garantie qu'elle obeisse
a cette requ^ete 9.
Il faut savoir aussi que le champ timegrade n'est pas teste lorsque c'est le systeme
distant qui vous appelle, et les jobs en attente seront tous transferes. Mais il peut,
bien s^ur, demander a votre uucico de se limiter a un certain grade, s'il sait le faire.
Il est constitue d'entrees separees commencant par le mot cle port suivi du nom qui
le designe. Ce nom peut ^etre utilise dans le chier sys, pour la declaration port. Il
n'a pas besoin d'^etre unique ; s'il y en a plusieurs, uucico les essaiera tous un par un
jusqu'a trouver le premier qui est disponible.
La commande port doit ^etre immediatement suivie par la declaration type, qui in-
dique de quel genre de port il s'agit. Les valeurs valides sont modem, direct pour les
connexions directes et tcp pour les sockets TCP. Si la commande port est absente,
c'est un modem qui sera considere par defaut.
Ici, nous ne decrirons que les ports modem ; les deux autres types feront l'objet de
sections separees un peu plus loin.
Pour les types modem et directs, vous devez specier le peripherique a utiliser par la
directive device. C'est generalement le nom d'un chier de peripherique du repertoire
/dev, comme /dev/cua1 10 .
Dans le cas d'un modem, l'entree determine aussi le type d'appareil connecte. Die-
rents types ou marques de modems peuvent demander une conguration particuliere;
m^eme ceux declares compatibles Hayes ne le sont pas toujours vraiment. Par conse-
quent, vous devez indiquer a uucico comment initialiser le modem et appeler le numero
de telephone desire. Taylor UUCP stocke les descriptions de tous les numeroteurs dans
le chier dial. Pour utiliser l'un deux, il faut specier son nom par la commande dialer.
Quelquefois, vous aurez besoin d'utiliser un modem de dierentes facons, selon le ser-
vice que vous appelez. Par exemple, certains modems archaques ne comprennent rien
lorsqu'un appareil recent tente de se connecter a 14 400 bps ou plus ; ils raccrochent
la ligne au lieu d'etablir la connexion a 9 600 bps, ou moins. Lorsque vous appelez
de tels sites, vous devez congurer votre modem dieremment pour que la commu-
nication aboutisse. Pour cela, vous aurez besoin d'une entree additionnelle dans le
chier port qui designera un numeroteur dierent. Vous pouvez donner a ce port un
nom dierent, comme par exemple serial1-lent, et la directive port dans l'entree du
systeme vieuxsite dans le chier sys.
Une meilleure methode consiste a faire la distinction des ports en fonction des vitesses
supportees. Par exemple, les deux entrees de la situation que nous venons d'evoquer
pourraient ^etre indiquees comme ceci :
# Modem NakWell; connexions hautes vitesses
port serial1 # nom du port
type modem # port modem
device /dev/cua1 # il s'agit de COM2
speed 38400 # vitesse support
ee
dialer nakwell # num
eroteur normal
10 Certains utilisent les peripheriques ttyS* a la place, qui sont concus specialement pour les appels
:
uniquement entrants, ce qui n'est pas une bonne idee en raison des con
its possibles et de la gestion
fort dierente de ces peripheriques.
186 Chapitre 12. Ma^triser Taylor UUCP
type modem # port modem
device /dev/cua1 # il s'agit de COM2
speed 9600 # vitesse support
ee
dialer nakwell-lent # ne tente pas de connexion haute vitesse
L'entree systeme pour ce site vieuxsite indiquerait maintenant serial1 comme nom de
port, mais demanderait de ne l'utiliser qu'a 9 600 bps. Le programme uucico utilisera
alors la seconde entree automatiquement. Tous les sites restants qui ont une vitesse
de 38 400 bps dans l'entree systeme seront appeles par la premiere entree port.
Le script de dialogue commence par "", la cha^ne d'attente vide. Par consequent,
uucico enverra directement la commande ATZ, qui est la commande Hayes de remise
a zero. Il attend ensuite la reponse OK et envoie la commande suivante, qui sup-
prime l'echo local et initialise certains registres. Apres que le modem a encore une
fois repondu OK, uucico lui envoie la commande de numerotation ATDT. La sequence
d'echappement \T sera remplacee par le numero de telephone pris dans le chier sys.
Ensuite, uucico attend que le modem lui ait annonce que la connexion est etablie par
la cha^ne CONNECT.
Souvent, la communication ne peut pas s'etablir, si par exemple la ligne de l'autre
systeme est occupee. Dans ce cas, le modem renvoie un message d'erreur indiquant la
12.2. Fichiers de conguration 187
situation. Les scripts de dialogue ne sont pas capables de detecter de tels messages ;
uucico continuera l'attente jusqu'a ce que le temps imparti soit ecoule. Le chier de
trace de UUCP indiquera alors le message (( timed out in chat script )) au lieu de
la raison reelle de l'echec.
Toutefois, Taylor UUCP vous permet d'informer uucico de ces messages d'erreur par la
commande chat-fail que nous avons vue plus haut. Lorsqu'il detecte une telle situation,
il arr^ete aussit^ot l'appel, et enregistre le message dans le chier de trace de UUCP.
La derniere commande de l'exemple ci-dessus indique a UUCP de basculer l'etat de
la ligne DTR avant de commencer le dialogue. Normalement, le pilote des ports serie
monte le signal DTR (Data Terminal Ready) lorsqu'un processus ouvre le port, pour
indiquer au modem qui y est connecte que quelqu'un veut lui parler. Avec le mot
cle dtr-toggle, la DTR sera baissee, puis remontee apres un petit delai. Beaucoup de
modems modernes peuvent ^etre congures pour reconna^tre cette manipulation et
eectuer dierentes actions, comme raccrocher la ligne, passer en mode commandes
ou se remettre a zero 11.
La commande address donne l'adresse IP de l'h^ote ou bien son nom pleinement qua-
lie. L'entree correspondante dans le chier port sera alors :
port tcp-conn
type tcp
service 540
Dans le chier port, vous devez decrire le port serie, mais une entree dialer n'est pas
necessaire puisqu'il n'y a aucun numero de telephone a composer.
port direct1
type direct
speed 38400
device /dev/ttyS1
^etre modie par la declaration command-path. Vous pouvez par exemple autoriser la
machine pablo a executer la commande rsmtp en plus de rmail et rnews 12 :
system pablo
...
commands rmail rnews rsmtp
12.3.3 Relais
UUCP ore un mecanisme permettant de demander a d'autres machines de transferer
des chiers pour vous. Cela permet par exemple de demander a la machine truc de
recuperer un chier sur bidule pour vous et de vous l'envoyer. Voici la commande
correspondante :
$ uucp -r truc!bidule!~/find-ls.gz ~/bidule.liste.gz
Cette technique faisant passer des jobs a travers plusieurs systemes s'appelle le relais,
ou encore le forwarding. Dans l'exemple ci-dessus, elle est employee car truc a un acces
UUCP sur machin, mais votre systeme n'en a pas. Mais en tant qu'administrateur,
vous devrez limiter cette possibilite sur votre systeme a quelques sites dans lesquels
vous avez une pleine conance, pour eviter que certains ne passent par vous pour
telecharger la derniere version de X11R6 et vous ruiner en notes de telephone.
Par defaut, Taylor UUCP interdit tout relais. Pour l'autoriser a un systeme donne,
vous disposez de la commande forward ; qui specie une liste de sites qui auront le droit
de vous demander de ramener des chiers pour eux. Par exemple, l'administrateur
du systeme truc devra ajouter la ligne suivante dans son chier sys pour autoriser
pablo a demander des chiers sur la machine bidule :
####################
# pablo
system pablo
...
forward bidule
####################
# bidule
system bidule
...
forward-to pablo
L'entree forward-to pour bidule est necessaire de sorte que tout chier qu'il retourne
soit passe a pablo, sinon UUCP le rejetterait. Cette entree utilise une variante de la
commande forward qui permet a bidule d'envoyer des chiers a pablo par l'interme-
diaire de truc, et uniquement dans ce sens.
Pour autoriser le relais vers n'importe quel systeme, il faut utiliser le mot cle special
ANY (les majuscules sont obligatoires).
12.4. Congurer votre systeme en serveur UUCP 191
Ensuite, vous devrez assigner un mot de passe a ce compte par la commande passwd.
Dans le cas des machines se connectant par TCP, vous devrez congurer inetd pour
qu'il gere les connexions sur le port uucp. Pour cela, il faudra rajouter la ligne suivante
dans le chier /etc/inetd.conf 13 :
uucp stream tcp nowait root /usr/sbin/tcpd /usr/lib/uucp/uucico -l
Bien entendu, ce chier doit appartenir a l'utilisateur uucp et avoir le mode 600 pour
que personne ne puisse en prendre connaissance.
Si cette methode vous pla^t tellement que vous voudriez pouvoir l'utiliser aussi pour les
acces ordinaires par port serie, vous devez savoir que c'est impossible actuellement, du
moins sans un certain bricolage. Tout d'abord, vous devez passer l'option -u a uucico,
suivi du nom d'utilisateur. Pour cela, vous devrez posseder ou (probablement) bricoler
un programme getty capable de passer ce nom d'utilisateur, et qui appelle uucico a la
place de la commande standard /bin/login.
Pour proteger vos utilisateurs UUCP des intrus donnant un faux nom de systeme et
piratant tout leur courrier, vous devrez ajouter la commande called-login dans chaque
entree du chier sys. Cette operation est decrite dans la section suivante.
quelqu'un d'autre pour telecharger le courrier destine a cet autre site. C'est parti-
culierement dangereux dans le cas ou vous orez des acces UUCP anonymes, pour
lesquels le mot de passe est public, ou absent.
A moins que vous ne soyez absolument s^ur de l'honn^etete de tous les sites qui vous
appellent, vous devez vous proteger de ce type d'imposture. Le remede consiste a
demander a chaque systeme d'utiliser un nom particulier pour la connexion, que vous
speciez par called-login dans le chier sys. Voici un exemple :
system pablo
... options habituelles ...
called-login uupablo
Le resultat est que chaque fois qu'un systeme arrive et pretend ^etre pablo, uucico
veriera s'il est bien entre sous le compte uupablo. Si ce n'est pas le cas, la connexion
sera immediatement coupee. Vous devez prendre l'habitude de congurer cette veri-
cation chaque fois que vous ouvrez un nouveau compte UUCP ; il est tres important
de le faire pour tous les systemes, qu'ils appellent votre site ou non. Pour ceux qui
ne vous appellent jamais, vous pourrez initialiser called-login a n'importe quoi, par
exemple yapadappel.
Vous devez aussi creer le chier contenant le numero initial. Taylor UUCP le place
dans un chier nomme .Sequence dans le repertoire de spoule du site distant. Il doit
appartenir a l'utilisateur uucp et avoir le mode 600 (lecture et ecriture uniquement au
proprietaire). Il vaut mieux initialiser ce nombre en se mettant d'accord avec l'autre
site sur une valeur arbitraire ; sinon quelqu'un pourrait arriver a le deviner en essayant
dierentes valeurs plausibles.
# cd /var/spool/uucp/pablo
# echo 94316 > .Sequence
# chmod 600 .Sequence
# chown uucp.uucp .Sequence
Bien s^ur, le site distant doit egalement valider ce test et commencer avec le m^eme
nombre que vous.
de chiers de trace). Les deux dernieres lignes autorisent les systemes inconnus a
executer la commande rmail ; mais le chemin de recherche est limite a un repertoire
prive nomme anon-bin. Cela permet d'y installer une commande rmail speciale qui,
par exemple, dirige tout courrier des sites anonymes vers la bo^te aux lettres du
superutilisateur. Cela autorise les utilisateurs anonymes a laisser un message a l'ad-
ministrateur (qui ne pourra pas leur repondre par ce m^eme chemin, bien s^ur), tout en
interdisant aux personnes malintentionnees de passer par la pour distiller du courrier
dans le monde entier.
Pour valider l'UUCP anonyme, vous devez au moins avoir une directive unknown dans
votre chier cong, sinon uucico rejettera tous les systemes inconnus.
correctement en des circonstances normales, mais il est des cas ou ils peuvent ^etre
inadaptes. Le protocole g, par exemple, emploie des fen^etres de 1 a 7, et des tailles
de paquet allant de 64 a 4 096 par puissances de 2 14 . Si votre ligne telephonique
est si mauvaise que vous perdez plus de 5% des paquets, vous devrez probablement
reduire leur taille ainsi que celle de la fen^etre. Toutefois, si votre liaison est excellente,
augmenter la taille de ces paquets a 512 voire 1 024 octets ameliorera l'ecacite du
protocole dans de grandes proportions.
Taylor UUCP ore la commande protocol-parameter du chier sys, qui permet d'ajus-
ter ces parametres selon vos besoins. Par exemple, pour passer la taille des paquets
du prococole g a 512 lors de communications avec pablo, vous rajouterez :
system pablo
...
protocol-parameter g packet-size 512
Les dierents parametres accessibles varient d'un protocole a l'autre. Pour en avoir la
liste complete, consultez la documentation fournie avec les sources de Taylor UUCP.
Cela aura pour eet de forcer l'utilisation des protocoles i, g ou G pour toute connexion
eectuee par ce port. Si le systeme distant ne conna^t aucun de ces protocoles, la
communication echouera.
14 Beaucoup de binaires fournis avec les distributions Linux ont une fen^etre par defaut de 7 et des
:
paquets de 128 octets.
198 Chapitre 12. Ma^triser Taylor UUCP
12.6 En cas de probleme...
Cette section tente de faire le tour des erreurs que vous pourrez rencontrer, et de
suggerer ou regarder pour trouver la solution au probleme. Malgre tout, nous avons
rassemble tout cela de t^ete et il y a sans doute beaucoup d'autres choses susceptibles
de ne pas marcher correctement.
Dans tous les cas, validez le deboguage par l'option -xall, et regardez attentivement
la sortie obtenue dans le chier Debug cree dans le repertoire de spoule. Vous devriez
rapidement trouver la cause du probleme. De plus, mettez toujours le haut-parleur
de votre modem en service, cela permet de se rendre compte si la communication
s'etablit. Avec un modem compatible Hayes, il vous sura de rajouter (( ATL1M1 OK ))
dans le script de dialogue du chier dial.
La premiere verication a eectuer doit toujours concerner les permissions des chiers
relatifs a UUCP. Le programme uucico doit ^etre setuid uucp, et tous les chiers conte-
nus dans /usr/lib/uucp, /var/spool/uucp et /var/spool/uucppublic doivent appartenir
a cet utilisateur uucp. Il existe egalement des chiers caches 15 dans le repertoire de
spoule qui doivent appartenir a uucp.
uucico persiste a acher (( Wrong time to call )) : ce n'est pas l'heure d'appeler le
site en question. Cela signie probablement que vous n'avez pas specie de commande
time dans le chier sys, detaillant quand le site peut ^etre joint, ou qu'eectivement il
n'est pas l'heure d'appeler. Si time n'est pas la, uucico considere que ce systeme ne
pourra jamais ^etre appele.
uucico se plaint que le site est deja verrouille (site already locked) : cela signie
qu'il detecte un chier de verrouillage pour le systeme en question dans /var/spool/uucp.
Il peut provenir d'un appel precedent qui ne s'est pas termine correctement. Toutefois,
il s'agit le plus souvent d'un autre processus uucico qui est en train d'essayer d'appeler
le site et qui est coince dans un script de dialogue, ou ailleurs. Si cet uucico n'arrive
pas a etablir la liaison, tuez-le avec un signal HUP et supprimez tous les chiers de
verrouillage qu'il pourrait oublier de nettoyer.
J'arrive a me connecter au site distant, mais le script de dialogue echoue :
regardez le texte que vous recevez de ce site. S'il est plein de parasites, ce peut ^etre
un probleme de vitesse inadaptee. Sinon, veriez qu'il correspond bien a ce qu'attend
votre script de dialogue. Souvenez-vous que ce script commence sur une attente. Si
vous attendez l'invite de login et que vous envoyez votre nom, mais que jamais l'autre
c^ote ne vous demande le mot de passe, inserez quelques delais d'attente avant votre
envoi, ou m^eme entre chaque lettre ; il se peut que l'envoi se fasse trop rapidement.
Mon modem ne compose pas le numero : s'il n'indique pas que la ligne DTR
a ete montee lorsque uucico appelle, il se peut que vous n'avez pas indique le bon
peripherique. Sinon, veriez avec un emulateur de terminal que vous pouvez bien
ecrire dessus. Si ca marche, mettez l'echo en service par \E au debut du script de
15: C'est-a-dire dont le nom commence par un point, et qui ne sont pas aches par la commande
ls si on ne lui precise pas.
12.7. Les chiers de trace 199
dialogue modem. S'il ne fait pas l'echo de vos commandes pendant ce dialogue, veriez
si la vitesse de votre ligne ne serait pas trop rapide ou trop lente pour ce modem. Si
vous voyez l'echo, veriez la validation des reponses du modem ou passez-les en mode
numerique. Veriez que le script de dialogue, lui-m^eme, est correct. Souvenez-vous
qu'il faut ecrire deux caracteres backslash pour en envoyer un au modem.
Mon modem essaie de numeroter mais cela n'aboutit pas : inserez une pause
dans le numero de telephone, particulierement si vous appelez d'un central prive.
Essayez les deux types de numerotation : vocale, puis decimale. Et veriez le numero
de telephone...
Mon chier de trace indique que je perds beaucoup de paquets : ce peut ^etre
un probleme de vitesse. Si la liaison entre votre ordinateur et votre modem est plus
lente que celle a laquelle la communication s'est etablie, remediez a cette situation.
Il se peut que votre equipement soit trop lent pour suivre le nombre d'interruptions
generees par les hautes vitesses. Dans ce cas, il faut employer un circuit NSC 16550A
sur votre port serie. Vous devez egalement verier que le contr^ole de
ux materiel est
en service, tant du c^ote du systeme que sur le modem.
Taylor UUCP n'a rien de prevu pour valider ce contr^ole de
ux, vous devez donc
le faire explicitement depuis le chier rc.serial (par exemple) en utilisant cette com-
mande :
$ stty crtscts < /dev/cua3
J'entre dans le systeme mais le handshake echoue : les causes peuvent ^etre
nombreuses. Le chier de trace vous sera d'un precieux secours. Regardez quels pro-
tocoles ore le site distant (il doit envoyer la cha^ne Pprotlist ). Il se peut que vous
n'en ayez aucun en commun (avez-vous selectionne des protocoles speciaux dans les
chiers sys ou port ?).
Si le systeme distant envoie RLCK, c'est qu'il y a la-bas un chier de verrouillage vous
concernant. Si ce n'est pas parce que vous y ^etes deja connecte par une autre ligne,
demandez a son administrateur qu'il corrige cette erreur.
S'il envoie RBADSEQ, c'est que l'autre c^ote a valide le test de sequence d'appels pour
votre site, mais que les valeurs ne correspondent pas. S'il envoie RLOGIN, c'est que
vous n'^etes pas autorise a vous connecter sous ce nom d'utilisateur.
Le chier suivant, par ordre d'importance, s'appelle Stats et indique les statistiques
des transferts de donnees. La section de Stats correspondant au chier de trace ci-
dessus ressemble a celle-ci (la encore, les lignes ont ete reformatees):
Le troisieme chier s'appelle Debug. C'est la que sont enregistrees les informations
de deboguage lorsqu'il est mis en service. Vous devez vous assurer que ce chier a le
mode 600, car en fonction du niveau de deboguage choisi, il peut contenir les mots de
passe utilises pour toutes les connexions.
Certains binaires fournis avec des distributions de Linux sont compiles avec le style
de trace HDB. Ce mode utilise une grande quantite de chiers de trace stockes dans
/var/spool/uucp/.Log. Ce repertoire contient trois autres sous-repertoires, nommes
uucico, uuxqt et uux. Ils contiennent la trace generee par chacun des programmes
correspondants, tries dans dierents chiers pour chaque site. Ainsi, la sortie de uucico
lors de l'appel du site pablo se trouvera dans .Log/uucico/pablo, et les invocations
de uuxqt qui resulteront de cet appel seront enregistrees dans .Log/uuxqt/pablo. Les
lignes ont, en revanche, le m^eme format que celles des traces du style Taylor.
12.7. Les chiers de trace 201
Chapitre 13
Le courrier electronique
Depuis que les premiers reseaux furent imagines, le courrier electronique en fait un
usage chaque jour plus important. Cela a commence par un simple service qui copiait
un chier d'une machine a une autre en le mettant dans le chier bo^te aux lettres du
correspondant. C'est d'ailleurs toujours le cas ; bien que par-dessus se soient greees
beaucoup de choses rendues necessaires par la complexite du reseau et l'augmentation
constante du
ux de messages.
Divers standards d'echange de courrier ont ete imagines. Les sites connectes a l'In-
ternet adherent a celui deni par le RFC 822, associe a d'autres documents RFC qui
decrivent une methode de transmission de caracteres speciaux ou autres informations,
independante des machines mises en jeu. On fait beaucoup de bruit depuis quelque
temps autour du courrier (( multimedia )), qui permet de transferer egalement des
images et du son avec le courrier. Il existe un autre standard, X.400, qui est deni
par le CCITT.
Vous trouverez beaucoup de programmes destines au transport du courrier pour les
systemes UNIX. L'un des plus connus et des plus utilises, toutes plates-formes confon-
dues, s'appelle sendmail ; c'est l'implementation de l'universite de Berkeley, l'auteur
est Eric Allman. Il y a actuellement deux portages de sendmail-5.56c sous Linux,
dont l'un sera decrit dans le chapitre 15. La version de developpement actuelle porte
le numero 8.6.9.
L'agent de transport de courrier le plus employe sous Linux est smail-3.1.28, realise
par Curt Landon Noll and Ronald S. Karr. Il est fourni dans la plupart des distribu-
tions binaires de Linux.
Compare a sendmail, smail est plus recent et plus simple. Pour gerer le courrier d'un
petit site sans routages tres compliques, ils sont quasi equivalents. Pour les grands
sites, sendmail gagne a tous les coups, en raison de ses possibilites et de sa souplesse
de conguration.
204 Chapitre 13. Le courrier electronique
Tous deux supportent un ensemble de chiers de conguration qui doivent ^etre adaptes
a chaque cas. En dehors des informations necessaires pour que le sous-systeme de
courrier fonctionne (comme le nom de la machine), il y a beaucoup d'autres parametres
congurables. Le chier de conguration principal de sendmail est tres dicile a
comprendre au premier abord ; ceux de smail sont plus structures et beaucoup plus
clairs, mais n'orent pas autant de possibilites pour ajuster le comportement du
programme. Quoi qu'il en soit, pour les petits sites UUCP ou Internet, le travail
demande par la conguration est sensiblement le m^eme pour tous les deux.
Ce chapitre va presenter le courrier electronique et les t^aches qui vous attendent en
tant qu'administrateur. Les chapitres 14 et 15 vous permettront ensuite d'eectuer
votre premiere conguration de l'un de ces agents de transfert de courrier. Vous
devriez trouver toutes les informations necessaires pour le fonctionnement d'un petit
site, mais il y a beaucoup plus d'options possibles, et vous pourrez plus tard occuper
de longues soirees en essayant passionnement de mettre au point une conguration
bien plus personnelle.
Vers la n du chapitre, nous presenterons rapidement la conguration de elm, une
interface utilisateur destinee au courrier electronique, tres courante sur de nombreux
systemes UNIX, y compris Linux.
Pour plus d'informations sur le courrier electronique sous Linux, consultez le docu-
ment de Vince Skahan, (( Electronic Mail HOWTO )), poste regulierement sur Usenet.
Les distributions originales de elm, smail et sendmail contiennent egalement beaucoup
de documentations tres detaillees ou vous devriez trouver la reponse a la plupart de
vos questions concernant leur conguration. Si vous voulez vous informer sur le cour-
rier electronique d'une maniere plus generale, un certain nombre de RFC traitent de
ce sujet, ils sont indiques dans la bibliographie fournie a la n de ce guide.
qui est appele l'en-t^ete. Il est separe du corps du message par une ligne vide 1 .
La plupart des logiciels de transport de courrier du monde UNIX utilisent le format
d'en-t^etes deni dans le RFC 822. Son but etait a l'origine de denir un standard
sur le reseau ARPANET, mais puisqu'il est prevu pour ^etre independant de tout
environnement, il a ete tres vite adapte a d'autres reseaux, y compris ceux bases sur
UUCP.
RFC 822 n'est toutefois que le plus petit denominateur commun ; d'autres formats
ont recemment ete concus pour faire face aux besoins grandissants d'encryptage de
donnees, de caracteres internationaux, et d'extensions multimedia (MIME).
Dans tous ces standards, l'en-t^ete est constitue de plusieurs lignes, separees par des
caracteres de saut de ligne. Chaque ligne est constituee d'un nom de champ, com-
mencant sur la premiere colonne, et de la valeur de ce champ, separee par le caractere
(( : )) suivi d'une espace. Le format et la s emantique de chaque champ varient selon
leur nom. Un champ peut s'etendre sur plusieurs lignes, si la suivante commence par
le caractere de tabulation. Les champs peuvent appara^tre dans n'importe quel ordre.
Voici un exemple d'en-t^ete de courrier :
From brewhq.swb.de!ora.com!andyo Wed Apr 13 00:17:03 1994
Return-Path: <brewhq.swb.de!ora.com!andyo>
Received: from brewhq.swb.de by monad.swb.de with uucp
(Smail3.1.28.1 #6) id m0pqqlT-00023aB; Wed, 13 Apr 94 00:17 MET DST
Received: from ora.com (ruby.ora.com) by brewhq.swb.de with smtp
(Smail3.1.28.1 #28.6) id <m0pqoQr-0008qhC>; Tue, 12 Apr 94 21:47 MEST
Received: by ruby.ora.com (8.6.8/8.6.4) id RAA26438; Tue, 12 Apr 94 15:56 -0400
Date: Tue, 12 Apr 1994 15:56:49 -0400
Message-Id: <199404121956.PAA07787@ruby>
From: andyo@ora.com (Andy Oram)
To: okir@monad.swb.de
Subject: Re: Your RPC section
Generalement, tous les champs necessaires sont generes par l'interface de courrier
que vous utilisez, comme par exemple elm, pine, mush ou mailx. Toutefois, certains
sont facultatifs et peuvent ^etre rajoutes par l'utilisateur. L'interface elm, par exemple,
permet d'editer une partie de l'en-t^ete du message. D'autres sont places par l'agent de
transport de courrier. Voici une liste des champs les plus courants et leur signication :
From: Contient l'adresse electronique de l'expediteur, ainsi que son (( vrai
nom )) (facultatif). Il existe beaucoup de formats standards pour ce
champ.
To: Il s'agit de l'adresse du destinataire.
Subject: Le sujet, qui decrit le contenu du courrier en quelques mots. Du
moins, c'est ce qu'il devrait faire.
1 Il est courant de rajouter une signature ou .sig aux courriers, contenant des informations sur
:
l'auteur, souvent suivies d'un dicton ou d'une plaisanterie. Elle est separee du corps du message par
une ligne contenant (( -- )) suivi d'une espace.
206 Chapitre 13. Le courrier electronique
Date: La date a laquelle le courrier a ete expedie.
Reply-To: Specie l'adresse a laquelle l'expediteur veut que les reponses even-
tuelles lui soient envoyees. Ce peut ^etre tres utile si vous possedez
plusieurs adresses, mais que vous ne voulez recevoir le courrier qu'a
celle que vous utilisez le plus souvent. Ce champ est optionnel.
Organization:
Decrit l'organisme, societe, universite, ou autres, qui est proprietaire
de la machine d'ou provient le courrier. Ce champ est facultatif ; s'il
s'agit de votre ordinateur personnel, omettez-le ou mettez ce que
vous voulez.
Message-ID: Il s'agit d'une cha^ne generee par l'agent de transport de courrier du
systeme ou le message a ete genere ; cet identicateur est propre au
message, unique dans le monde entier.
Received: Chaque site traitant votre courrier (y compris ceux d'origine et de
destination) insere ce champ dans l'en-t^ete, indiquant son nom, un
identicateur, la date et l'heure de reception, de quel site le message
est arrive, et quel logiciel de transport a ete utilise. Ainsi, vous pouvez
suivre facilement la route parcourue par le message et vous plaindre
a la personne responsable si quelque chose ne s'est pas bien passe.
X-nom-quelconque:
Aucun programme relatif au courrier ne doit se plaindre d'en-t^etes
commencant par X-. Ce champ sert a ajouter des informations supple-
mentaires concernant toute possibilite nouvelle qui n'est pas encore
denie dans un document RFC, ou ne le sera jamais. Les listes de
diusion (( Linux Activists )) utilisent par exemple cette possibilite
pour la selection du canal approprie, repere par X-Mn-Key: canal.
La seule exception a cette structure concerne la toute premiere ligne. Celle-ci com-
mence par le motcle From suivi d'une espace au lieu du caractere (( deux-points )). An
de la distinguer du champ ordinaire From:, on la reference souvent par From . Elle
contient le chemin que le message a emprunte selon la syntaxe UUCP (expliquee plus
loin), la date et l'heure a laquelle il a ete recu par la derniere machine qui l'a traite,
et une partie optionnelle speciant de quel h^ote il est arrive. Puisque ce champ est
reecrit par chaque systeme voyant passer le message, il est parfois considere comme
faisant partie de l'enveloppe.
Le champ From est necessaire pour des raisons de compatibilite avec d'anciens agents
de transport ; il n'est pratiquement plus utilise, sauf par certaines interfaces qui s'en
servent pour marquer le debut d'un message dans la boite aux lettres de l'utilisateur.
Pour eviter des ennuis potentiels dus a la confusion possible avec les lignes du corps
du message pouvant aussi commencer par (( From )), il est de coutume de modier
chaque occurrence de ces lignes en la faisant preceder du caractere . >
13.2. Comment le courrier est-il delivre ? 207
2 L'espace disque est generalement alloue par blocs de 1 024 octets. Aussi, m^eme un message de
:
400 octets utilisera 1 Ko d'espace disque
208 Chapitre 13. Le courrier electronique
13.3 Adresses electroniques
Pour le courrier electronique, une adresse est constituee au minimum du nom d'une
machine gerant le courrier du destinataire, et de l'identication de ce dernier, reconnue
par son systeme. Ce peut ^etre son nom d'utilisateur, aussi bien que tout autre chose.
D'autres methodes d'adressage, comme X.400, emploient un ensemble plus general
d'(( attributs )) pour retrouver la machine du destinataire dans le repertoire d'un
serveur X.500.
La maniere dont le nom de machine est interprete, c'est-a-dire sur quel site votre
message nira par arriver, et la facon de combiner ce nom avec celui du destinataire
dependent etroitement du reseau sur lequel vous ^etes connecte.
Les sites Internet respectent le standard RFC 822, qui necessite une notation de type
utilisateur@h^ote.domaine, ou h^ote.domaine est le nom pleinement qualie de la
machine. Le signe du milieu, le (( A commercial )), se prononce (( at )) dans ce cas 3.
Puisque cette notation ne met en jeu aucune route vers l'adresse de destination, et
ne donne que le nom (unique) de la machine, on la designe par adresse absolue.
Dans l'environnement UUCP original, la forme dominante des adresses etait che-
min!h^ote!utilisateur, chemin decrivait une sequence de machines par lesquels le
message devait passer avant d'atteindre sa destination. Cette construction s'appelle
la notation bang, tout simplement parce qu'un point d'exclamation est familierement
appele un (( bang )), chez les informaticiens anglophones. Aujourd'hui, la plupart des
reseaux bases sur UUCP ont adopte le standard RFC 822 ou comprennent au moins
ce type d'adressage.
Maintenant, il faut savoir que ces deux types d'adresses n'aiment pas trop ^etre melan-
ges. Considerons par exemple l'adresse machineA!utilisateur@machineB. Il n'est
pas du tout evident de savoir si le signe @ a priorite sur le bang, ou vice versa : devons-
nous envoyer le message a machineB, qui le transmettra a machineA!utilisateur ou
bien alors faut-il le passer a machineA, qui l'expediera a utilisateur@machineB ?
Les adresses comme celle-ci, qui melangent les deux types de notations, sont appelees
adresses hybrides. Notre exemple est un cas d'ecole, il est generalement resolu en
donnant la priorite au signe @, ce qui signiera ici que le message sera transmis
d'abord a machineB.
Toutefois, il existe un moyen de specier des routes en restant conforme au RFC 822 :
< @machineA,@machineB:utilisateur@machineC denote l'adresse de utilisa-
>
teur sur l'h^ote machineC, machine qui peut ^etre jointe en passant par machineA
et machineB, dans l'ordre. Ce type d'adresse est une adresse de routage, nommee
souvent route-addr.
Enn, il y a l'operateur % (le signe pour cent) : user%machineB@machineA sera
d'abord envoye a machineA, qui changera le signe pour cent le plus a droite (ici, c'est
3 Traduisez (( at )) par (( chez )) et vous constaterez que cette notation n'est pas si compliquee a
:
comprendre, cela donne utilisateur chez h^ote.domaine.
13.4. Le routage du courrier 209
Cette entree indique que la machine renux se connecte deux fois par jour a frmug,
et sur keltia une fois par semaine. Nous reviendrons en detail sur ce format un peu
plus loin.
Gr^ace aux informations sur la connectivite contenues dans ces cartes, vous pouvez
generer automatiquement le chemin d'acces complet depuis votre machine vers n'im-
porte quel site. Ces informations sont generalement stockees dans le chier paths,
appele aussi la base de donnees pathalias. Supposons que les cartes indiquent que
vous pouvez joindre keltia via imladris ; une entree pathalias pour renux creee a
partir de l'extrait de carte montre plus haut pourrait ressembler a ceci :
renux imladris!keltia!renux!%s
arrivant pour les machines de orcnet a moria. L'asterisque dans *.orcnet.org est
un caractere generique qui correspondra a tous les h^otes de ce domaine qui ne sont
associes a aucun autre enregistrement ; c'est generalement ce qui doit ^etre fait pour
les domaines uniquement UUCP.
Il reste un probleme : les programmes de transport par UUCP ne savent pas gerer les
noms pleinement qualies. La plupart des programmes furent prevus pour traiter des
noms ne depassant pas huit caracteres, parfois moins, et l'utilisation de caracteres
non alphanumeriques comme de simples points est hors de question avec la plupart
d'entre eux.
Par consequent, il est necessaire de pouvoir eectuer la correspondance entre les noms
RFC 822 et UUCP. La facon dont cela est realise depend entierement de l'implemen-
tation. Une methode courante consiste a utiliser le chier pathalias :
moria.orcnet.org ernie!bert!moria!%s
Cette entree produira un chemin purement UUCP avec la notation par bangs a partir
d'une adresse speciant un nom pleinement qualie. Certains MTA proposent un
chier special destine a ces operations; sendmail, par exemple, utilise un chier appele
uucpxtable.
La transformation inverse (qu'il est courant d'appeler (( domainisation ))), est parfois
necessaire lors de l'envoi d'un courrier depuis un reseau UUCP vers l'Internet. Tant
que l'expediteur utilise un nom pleinement qualie pour l'adresse de destination, ce
probleme peut ^etre evite en ne supprimant pas le nom du domaine de l'adresse d'en-
veloppe lors de l'envoi du message au smart host. Toutefois, il reste encore quelques
sites UUCP qui ne font partie d'aucun domaine. Ils sont alors domainises en leur
rajoutant le pseudo-domaine uucp.
Cette entree fera que tout message pour moria sera delivre en passant par ernie et
bert. Il faut indiquer a la fois le nom pleinement qualie et le nom UUCP de moria
si le MTA ne sait pas faire la correspondance de l'un a l'autre.
Si vous voulez diriger tous les messages pour les h^otes d'un domaine particulier vers
son relais de courrier, vous pouvez aussi specier un chemin dans la base de donnees
pathalias, indiquant le domaine comme une cible, precede d'un point. Par exemple,
214 Chapitre 13. Le courrier electronique
si toutes les machines de sub.org peuvent ^etre atteintes par swim!smurf, l'entree
pathalias s'ecrira comme ceci :
.sub.org swim!smurf!%s
La realisation manuelle d'un chier pathalias n'est acceptable que si votre site n'a pas
trop de routages a eectuer. Sinon, il vaut mieux utiliser la commande pathalias qui
creera le chier a partir des cartes UUCP. Ces cartes peuvent ^etre maintenues bien
plus facilement, car il vous sut de rajouter ou de supprimer l'entree d'un systeme
dans la carte et de relancer la commande pour recreer le nouveau chier. Bien que
les cartes publiees sur Usenet ne soient pratiquement plus utilisees pour le routage,
certains reseaux plus petits peuvent proposer leur propre jeu de cartes a cette n.
Un chier de cartes consiste principalement en une liste de sites, contenant les ma-
chines avec lesquelles le systeme est regulierement connecte par UUCP, soit comme
appelant, soit comme appele. Le nom du systeme commence en premiere colonne, et
est suivi par une liste de liens, separes par des virgules. Cette liste peut s'etendre sur
plusieurs lignes a condition que la suivante commence par une tabulation. Chaque
lien est constitue du nom du site suivi du co^ut imaginaire de la connexion, indique
entre parentheses. Il s'agit d'une expression arithmetique, faite de valeurs et de prix
symboliques. Les lignes commencant par un diese sont ignorees.
Par exemple, considerons moria, qui appelle swim.twobirds.com deux fois par jour
et bert.sesame.com une fois par semaine. De plus, la liaison avec bert ne se fait
qu'avec un vieux modem 2 400 bps, tres lent. La carte publiee par moria serait alors
la suivante :
moria.orcnet.org
bert.sesame.com(DAILY/2),
swim.twobirds.com(WEEKLY+LOW)
moria.orcnet.org = moria
La derniere ligne la ferait conna^tre aussi sous son nom UUCP. Notez que DAILY/2
correspond a deux appels par jour, alors que DAILY*2 signierait un appel tous les
deux jours.
Avec ces informations, la commande pathalias est capable de determiner les routes
optimales a destination de tout site cite dans le chier paths, et de produire une base
de donnees pathalias qui pourra alors ^etre utilisee pour le routage vers ces sites.
Le programme pathalias ore plusieurs autres possibilites, consultez sa page de ma-
nuel, ainsi qu'une liste complete des prix symboliques.
Dans la carte, les commentaires contiennent generalement des informations supple-
mentaires sur les sites decrits. Il existe un format tres strict pour la specication de
ces renseignements, de maniere a pouvoir les recuperer par programme. Par exemple,
la commande uuwho utilise une base de donnees realisee a partir de ces cartes pour
acher toutes les informations selon un format agreable a lire.
13.6. Conguration de elm 215
Lorsque vous enregistrez votre site aupres d'un organisme qui distribue des cartes a
ses membres, vous devrez en principe remplir une telle entree.
Voici un exemple d'entree dans les cartes UUCP (en fait, il s'agit de celle du site de
l'auteur) :
#N monad, monad.swb.de, monad.swb.sub.org
#S AT 486DX50; Linux 0.99
#O private
#C Olaf Kirch
#E okir@monad.swb.de
#P Kattreinstr. 38, D-64295 Darmstadt, FRG
#L 49 52 03 N / 08 38 40 E
#U brewhq
#W okir@monad.swb.de (Olaf Kirch); Sun Jul 25 16:59:32 MET DST 1993
#
monad brewhq(DAILY/2)
# Domains
monad = monad.swb.de
monad = monad.swb.sub.org
Le blanc suivant les deux premiers caracteres doit ^etre une tabulation. La signication
des champs est evidente ; vous recevrez tout le detail lorsque vous vous enregistrerez.
Le champ L est le plus dicile a remplir : il donne votre position geographique en
latitude/longitude, et n'est plus utilise que pour dessiner la carte au format PostScript
qui montre tous les sites de chaque pays 6.
Ces options determinent la notion qu'aura elm de votre systeme. Bien que ces in-
formations ne soient que rarement utilisees, vous devez les indiquer par precaution.
Notez qu'elles n'ont d'eet que lorsqu'elles se trouvent dans ce chier de conguration
global. Il est impossible de modier ces valeurs depuis le chier personnel, pour des
raisons de securite evidentes.
metamail sont indiques par un M dans la toute premiere colonne de la liste du courrier
proposee par elm.
Comme le jeu de caracteres natif de Linux est l'ISO-8859-1, il n'est pas necessaire
d'appeler metamail pour acher des messages utilisant ces caracteres. Si l'on indique
a elm que l'achage conna^t l'ISO-8859-1, il l'achera instantanement, sans appeler
de programme externe. Il sut pour cela de positionner l'option suivante dans le
chier global elm.rc :
displaycharset = iso-8859-1
Notez que vous devez indiquer cette option m^eme si vous n'allez jamais recevoir ou
emettre de messages comportant ces caracteres: les personnes qui postent de tels
courriers congurent leurs programmes pour qu'ils mettent le champ Content-Type
par defaut, qu'ils utilisent ces caracteres ou ne postent que de l'ASCII.
Toutefois, cette option n'est pas susante. Le probleme est que lorsqu'il ache le
message avec son visionneur interne, elm appelle une fonction de bibliotheque pour
chaque caractere, pour determiner s'il est achable ou pas. Par defaut, cette fonction
ne reconna^t que les caracteres purement ASCII, et ache un point d'interrogation
pour tous les autres. Vous pouvez modier ce comportement en positionnant la va-
riable d'environnement LC CTYPE a la valeur ISO-8859-1, ce qui indiquera a la
bibliotheque que ces caracteres sont achables. Sous Linux, le support pour l'inter-
nationalisation est present depuis la bibliotheque libc-4.5.8.
Lorsque vous postez des messages contenant des caracteres speciaux du jeu ISO, vous
devez vous assurer de positionner deux autres variables dans le chier global elm.rc :
charset = iso-8859-1
textencoding = 8bit
Ainsi, elm indiquera correctement dans les en-t^etes de tous les courriers diuses que
le jeu de caracteres est ISO-8859-1, et les enverra sur 8 bits (par defaut, le huitieme
bit est mis a zero pour tout transformer en 7 bits).
Bien s^ur, toutes ces options peuvent aussi ^etre positionnees dans le chier de con-
guration personnel elmrc de chaque utilisateur.
218 Chapitre 13. Le courrier electronique
219
Chapitre 14
Mise en route de smail
Ce chapitre sera une rapide initiation a la conguration de smail et vous donnera un
apercu des fonctionnalites oertes. Bien que ce programme soit largement compatible
avec sendmail dans son comportement, ses chiers de conguration sont completement
dierents.
Le chier de conguration principal s'appelle /usr/lib/smail/cong. Vous devrez obli-
gatoirement editer ce chier pour y placer les valeurs speciques a votre site. Si vous
n'^etes qu'un petit systeme UUCP, vous n'aurez pratiquement jamais rien d'autre
a faire. D'autres chiers permettant la mise au point des options de routage et de
transport peuvent aussi ^etre utilises, nous en parlerons brievement.
Par defaut, smail traite et delivre immediatement tout le courrier. Si vous avez beau-
coup de trac, vous prefererez sans doute lui indiquer de rassembler tous les messages
dans ce que l'on appelle une queue, et de ne les traiter qu'a intervalles reguliers.
Lorsque le courrier passe par un reseau TCP/IP, smail est tres souvent utilise en mode
demon : au demarrage du systeme, il est invoque depuis rc.inet2 et se place en t^ache
de fond, ou il attend des connexions TCP sur le port SMTP (le port 25, en principe).
Cette methode est a preferer chaque fois que vous attendez un trac important, car le
programme n'a pas a ^etre lance separement a chaque connexion. L'alternative serait
de laisser inetd gerer le port SMTP, il appellerait alors smail chaque fois qu'une
connexion sur se port se presenterait.
Smail possede plusieurs options contr^olant son comportement ; les decrire en detail ici
ne vous serait pas tres utile. Heureusement, il supporte un certain nombre de modes
de fonctionnements standards, qui sont valides lorsque vous l'invoquez sous des noms
particuliers, comme par exemple rmail ou smtpd. Generalement, ces alias sont des
liens symboliques vers l'unique binaire smail. Nous rencontrerons la plupart d'entre
eux lorsque nous aborderons les dierentes possibilites oertes par ce programme.
220 Chapitre 14. Mise en route de smail
En toute circonstance, vous devrez avoir au moins deux liens pointant sur le pro-
gramme smail : /usr/bin/rmail et /usr/sbin/sendmail 1 . Lorsque vous redigez puis
expediez un courrier avec une interface comme elm, le message sera passe a rmail
pour ^etre delivre, avec la liste des destinataires sur la ligne de commandes. La m^eme
chose se passe avec le courrier arrivant par UUCP. Quelques versions de elm invoquent
toutefois /usr/sbin/sendmail, au lieu de rmail, aussi est-il plus prudent de disposer des
deux commandes. Par exemple, si votre binaire de smail se trouve dans /usr/local/bin,
tapez ce qui suit pour creer les liens corrects :
# ln -s /usr/local/bin/smail /usr/bin/rmail
# ln -s /usr/local/bin/smail /usr/sbin/sendmail
Si vous voulez entrer dans le detail de la conguration de smail, referez-vous aux
pages de manuel smail(1) et smail(5). Si vous ne les possedez pas, vous les trouverez
dans les sources du programme.
1 Il s'agit de l'emplacement standard de sendmail sous Linux, si l'on suit les recommandations
:
du projet du (( Linux File System Standard )). Sur beaucoup d'autres systemes, sendmail se trouve
traditionnellement dans /usr/lib.
14.2. Conguration reseau 221
La premiere instruction renseigne smail sur les domaines auxquels votre site appar-
tient. Mettez leurs noms, separes par le caractere (( : )). Si le nom de votre site est
enregistre dans les cartes UUCP, vous devez egalement ajouter le pseudo-domaine
uucp. Lorsqu'il traite un message, smail determine le nom de votre machine par l'ap-
pel systeme hostname(2), et teste l'adresse du destinataire pour la comparer a ce
nom, en y rajoutant tour a tour tous ces domaines. Si l'adresse correspond a l'un des
cas (ou au nom non qualie), le courrier est considere comme local et sera delivre a
l'utilisateur ou l'alias correspondant sur votre machine. Sinon, il est considere comme
etant distant, et smail tentera de l'expedier a la machine de destination.
La ligne visible name doit contenir un unique nom pleinement qualie, c'est celui que
vous voulez voir appara^tre dans tout le courrier emis. Vous devez ^etre certain que
le nom utilise est reconnu par smail comme celui de l'h^ote local (par exemple, l'une
des combinaisons donnees avec l'attribut visible domain). Sinon, les reponses a vos
messages ne vous arriveraient jamais...
La derniere ligne indique le chemin a utiliser pour atteindre le smart host (decrit dans
le chapitre precedent). Avec cet exemple, smail enverra tout le courrier non local au
smart host. Le nom de cette machine doit ^etre connu par UUCP, puisque c'est le
protocole utilise pour la liaison. Pour cela, consultez le chapitre 12.
Il reste une option dont nous n'avons pas encore parle : uucp name. Par defaut, smail
prend la valeur retournee par hostname(2) pour indiquer les informations speciques
a UUCP, comme le chemin de retour donne dans la ligne From de l'en-t^ete. Si votre
nom de machine n'est pas enregistre dans les cartes UUCP, vous devez dire a smail
d'y mettre votre nom pleinement qualie a la place 2 . Il sut pour cela de l'ajouter
gr^ace a l'option uucp name du chier cong.
Vous trouverez aussi dans /usr/lib/smail un autre chier, paths.sample. Il s'agit d'un
exemple de chier paths ; mais vous n'en aurez pas besoin, a moins que vous n'ayez
des liaisons avec plusieurs sites pour la distribution du courrier. Si vous devez utiliser
ce chier, il faudra de toute facon le rediger vous-m^eme, ou le creer a partir des cartes
UUCP. Ce chier paths sera decrit plus loin.
Il est tres semblable a ce que nous avons utilise pour un site uniquement UUCP. La
plus grosse dierence, c'est le transport utilise pour envoyer les messages vers le smart
host, qui est ici SMTP. L'attribut visible domain indique a smail d'ecrire le nom de
domaine specie dans tout le courrier emis, au lieu du nom local de la machine depuis
laquelle le message est poste.
Sur la passerelle UUCP geuze, le chier cong est un petit peu dierent :
#
14.2. Conguration reseau 223
Ici, la methode pour indiquer a smail quel est notre nom local est dierente. Au lieu
de lui donner une liste de domaines et de le laisser trouver le nom de machine par un
appel systeme, nous lui indiquons explicitement ce qu'il en est. La liste contient a la
fois le nom pleinement qualie et celui non qualie, et le nom du domaine lui-m^eme.
Ainsi, smail reconna^tra marcel@bibine.com comme une adresse locale et delivrera
le message a l'utilisateur marcel.
La variable auth domains indique les domaines pour lesquels gueuze est considere
comme ayant autorite. C'est-a-dire que si smail recoit un courrier adresse a ma-
chine.bibine.com, ou machine ne correspond a aucun h^ote local, il refusera le
message et le renverra a son expediteur. Si cette entree n'est pas presente, tout mes-
sage de ce type serait envoye au smart host, qui le renverrait a son tour a gueuze,
cette partie de ping-pong pouvant durer indeniment. (Heureusement, il est possible
de xer une limite maximale a ce genre de boucle et le message sera nalement perdu.)
Elle denit le port TCP que smail devra utiliser pour les conversations SMTP. Le
port 25 est le standard deni par le RFC (( Assigned Numbers )).
224 Chapitre 14. Mise en route de smail
En mode demon, smail se place en t^ache de fond et attend les connexions sur le port
SMTP. Pour chacune, il cree un nouveau processus par l'appel systeme fork() pour
le temps de la conversation. Le demon smail est generalement lance au demarrage du
systeme depuis le script rc.inet2 a l'aide de la commande suivante :
/usr/local/bin/smail -bd -q15m
L'option -bd indique le mode demon, et -q15m lui demande de traiter tous les messages
eventuellement accumules dans la queue de courrier toutes les 15 minutes.
Si vous preferez qu'il soit gere par inetd, votre chier /etc/inetd.conf devra contenir
une ligne comme celle-ci :
smtp stream tcp nowait root /usr/sbin/smtpd smtpd
Le programme smtpd devra ^etre un lien symbolique vers le binaire de smail. Souvenez-
vous que pour toute modication de ce chier, vous devez demander a inetd de le relire
en lui envoyant un signal HUP, pour que les modications soient prises en compte.
Le mode demon et le mode inetd sont mutuellement exclusifs. Si vous utilisez smail en
demon, vous devez vous assurer de bien mettre en commentaire toute ligne relative au
service smtp dans le chier inetd.conf. Inversement, si vous l'utilisez par inetd, veriez
que rc.inet2 ne lance pas le demon smail.
Nous y voyons qu'un message de l'utilisateur root ayant pour adresse de destination
root@gueuze.bibine.com a ete correctement delivre a la machine gueuze par le
protocole SMTP.
14.3. Si le courrier ne passe pas 225
Les courriers que smail ne peut pas delivrer generent une entree similaire, mais avec
un message d'erreur a la place de la partie delivered :
04/24/94 07:12:04: [m0puwU8-00023UB] received
| from: root
| program: sendmail
| size: 1468 bytes
04/24/94 07:12:04: [m0puwU8-00023UB] root@gueuze.bibine.com ... deferred
(ERR_148) transport smtp: connect: Connection refused
L'erreur ci-dessus est typique lorsque smail reconna^t correctement que le message
doit ^etre delivre a gueuze, mais qu'il n'arrive pas a se connecter sur le service SMTP
de cette machine. Si cela se produit, vous devez avoir un probleme de conguration,
ou le support de TCP est absent dans votre binaire de smail.
Ce cas n'est pas si rare. Il a circule des versions precompilees de smail, y compris dans
certaines distributions de Linux, sans support pour le reseau TCP/IP. Si vous ^etes en
possession de l'une d'elles, vous devrez recompiler correctement le programme. Pour
verier, vous pouvez tester si smail supporte TCP en connectant par telnet le port
SMTP de votre machine. Voici a quoi ressemble une connection reussie :
Si ce test n'ache pas la banniere SMTP (la ligne commencant par le code 220),
veriez d'abord que votre conguration est vraiment correcte avant de vous lancer
dans la compilation de smail, que nous allons maintenant decrire.
Si vous rencontrez un probleme que vous n'arrivez pas a situer dans les messages
d'erreurs generes par smail, vous pouvez mettre en route les messages de deboguage.
Il sut d'employer l'option -d suivie d'une valeur facultative, speciant le niveau
de verbosite desire (ne mettez pas d'espace entre l'option et la valeur). Toutes les
operations qu'eectuera smail s'acheront alors a l'ecran, ce qui pourra vous aider a
situer a quel moment le probleme se produit.
Si vraiment rien ne va plus, vous pouvez invoquer le mode Rogue de smail en lui
passant l'option -bR sur la ligne de commandes. La page de manuel dit a peu pres
ceci : (( Entrez dans le monde hostile des messages geants, ou delent les standards
RFC. Tente de descendre au niveau de protocole 26, et de revenir a la normale. ))
Cette option ne reglera s^urement pas vos problemes, mais elle vous apportera peut-
^etre quelque consolation. :-)
226 Chapitre 14. Mise en route de smail
14.3.1 Compilation de smail
Si vous ^etes certain que le support reseau manque dans votre version de smail, vous
devrez vous procurer les sources. Vous les trouverez sur tous les sites diusant Linux,
et bien d'autres serveurs FTP. Si vous avez obtenu Linux sur un CD-ROM, elles se
trouvent sans aucun doute dessus 3 .
Pour compiler smail, vous devez partir de l'ensemble des chiers de conguration four-
nis avec la distribution newspak de Vince Skahan (vous gagnerez un temps precieux,
m^eme si vous ^etes un programmeur conrme). Pour valider le support du reseau
TCP/IP, vous devez positionner la macro DRIVER CONFIGURATION du chier
conf/EDITME soit a bsd-network, soit a arpa-network. La premiere valeur est cor-
recte pour une utilisation sur reseau local, mais pour l'Internet il faudra choisir la
seconde. La dierence est que l'option arpa-network inclut un pilote pour le service
BIND, capable de reconna^tre les enregistrements MX, ce que bsd-network ne sait pas
faire.
Elle montre ici qu'un seul message est en attente. La trace de transaction (qui ne
sera achee que si vous appelez mailq avec l'option -v) peut donner la raison pour
laquelle il est toujours en attente d'^etre delivre. Si aucune tentative de distribution
n'a encore ete faite, aucune trace de transaction ne sera indiquee.
M^eme si vous n'employez pas de le d'attente, smail l'utilisera quand m^eme en cer-
taines occasions, lorsqu'il ne peut delivrer un message en raison d'un probleme mo-
mentane. Dans le cas de connexions SMTP, ce peut ^etre une machine injoignable,
mais le courrier sera aussi stocke si le systeme de chiers est plein. Il faut donc impe-
rativement traiter la queue au moins toutes les heures, sinon les eventuels messages
en attente y resteraient pour l'eternite.
h^otes du domaine titi.com, alors qu'un autre a des informations sur toto.titi.com.
Dans ce cas, comme c'est le dernier qui est le plus specique, c'est lui qui sera choisi.
Si deux routeurs arrivent a egalite, c'est le premier rencontre dans le chier routers
qui sera selectionne.
Maintenant, ce routeur specie un transport a utiliser, par exemple UUCP, et ge-
nere une nouvelle adresse de destination. La nouvelle adresse est passee au mo-
dule de transport avec le nom de la machine a laquelle renvoyer le message. Dans
notre exemple ci-dessus, smail pourra trouver que toto.titi.com peut ^etre atteint
par UUCP en utilisant le chemin ernie!bert. Il generera alors une nouvelle cible,
bert!toto.titi.com!alfred, qui sera l'adresse d'enveloppe pour le transport UUCP
qui sera passee a ernie.
Avec la conguration par defaut, sont disponibles les modules routeurs suivants :
{ Si l'adresse de la machine de destination peut ^etre resolue par les fonctions
gethostbyname(3) ou gethostbyaddr(3), le message sera delivre par SMTP. La
seule exception sera lorsque cette adresse correspondra a la machine locale ; il
sera alors passe au module directeur.
Les adresses IP sont egalement reconnues comme noms legaux, tant qu'elles
peuvent ^etre resolues par la fonction gethostbyaddr(3). Par exemple, duge-
nou@[149.76.12.4] est une adresse valide, bien que peu habituelle ; elle cor-
respond selon nos exemples a l'adresse de l'utilisateur dugenou sur la machine
quark.physique.groucho.edu.
Si votre machine est sur l'Internet, ces routeurs ne sont pas ceux qu'il vous faut
car ils ne reconnaissent pas les enregistrements de type MX. Nous verrons plus
loin ce qu'il faut faire dans ce cas.
{ Si /usr/lib/smail/paths, la base de donnees pathalias, existe, smail essaiera de
trouver la machine destinataire (amputee de tout pseudo-domaine .uucp) dans
ce chier. Le courrier a destination d'une adresse trouvee par ce routeur sera
delivre par UUCP en utilisant le chemin indique dans la base de donnees.
{ L'adresse (amputee de tout pseudo-domaine .uucp) sera comparee a la sortie
de la commande uuname pour tester si la cible est en fait un voisin UUCP. Si
c'est le cas, le message sera delivre par UUCP.
{ Si l'adresse n'a pu ^etre geree par aucun des routeurs precedents, le message sera
delivre au smart host. Le chemin vers cette machine, et le transport a utiliser,
sont congures dans le chier cong.
Ces valeurs par defaut fonctionnent pour beaucoup de petits sites, mais echouent
des que le routage necessaire est un peu plus complique. Si vous ^etes confronte a
l'un des problemes que nous allons expliquer ci-dessous, vous devrez installer votre
propre chier routers pour modier ces comportements par defaut. Vous en trouverez
un exemple dans l'annexe B, qui pourra vous servir de point de depart. Certaines
230 Chapitre 14. Mise en route de smail
distributions de Linux sont fournies avec un ensemble de chiers de conguration
etudies pour contourner ces dicultes.
Le pire des cas est probablement lorsque votre machine est reliee a l'exterieur a la fois
par des liaisons UUCP et des connexions IP temporaires, avec PPP ou SLIP. Vous
aurez dans votre chier hosts, le nom de certains h^otes avec lesquels vous communiquez
de temps en temps en IP, et smail tentera de delivrer tout courrier pour ces machines
par SMTP. Ce n'est s^urement pas ce que vous desirez, car m^eme si la liaison SLIP est
regulierement active, le transfert par SMTP est bien plus lent que par UUCP. Avec
la conguration par defaut, il n'y a pas de solution.
Pour eviter ce probleme, il va falloir que smail teste le chier paths avant d'interroger
le resolver, et que vous mettiez tous les h^otes pour lesquels vous voulez forcer un
transport UUCP dans ce chier. Si vous ne voulez jamais utiliser SMTP, vous pou-
vez egalement mettre en commentaire tout ce qui concerne les routeurs bases sur le
resolver.
La conguration par defaut soure d'un autre probleme : elle ne peut faire de reel
routage Internet, car le routeur ne sait pas evaluer les MX. Pour remedier a cela,
vous devez mettre entre commentaires le routeur par defaut et supprimer les com-
mentaires de celui qui utilise BIND. Il existe cependant des distributions de Linux qui
fournissent un binaire de smail dans lequel le support de BIND n'est pas compile. Si
vous validez le bon routeur, mais que vous obtenez dans le chier paniclog un message
disant : (( router inet hosts: driver bind not found )), vous devrez recompiler
smail (voyez la section (( Conguration reseau )) plus haut).
Enn, l'utilisation du pilote uuname est en general une mauvaise idee. D'une part,
il generera une erreur de conguration si vous n'avez pas installe UUCP, car il ne
trouvera pas la commande uuname. D'autre part, vous pouvez avoir plus de sites
indiques dans votre chier Systems de UUCP, que vous n'avez de liaisons pour le
courrier. Il peut s'agir de machines avec lesquelles vous n'echangez que des chiers ou
des News Usenet, par exemple.
Pour contourner le premier probleme, il est facile de substituer un shell-script a la
commande uuname, qui fera un simple exit 0. La solution la plus propre est toutefois
d'editer le chier routers pour supprimer ce pilote.
tabulation. Les bases de donnees pathalias sont presentees avec un peu plus de details
dans le chapitre 13.
Si vous realisez ce chier a la main, vous devez faire bien attention d'y mettre tous les
noms legaux d'un site. Par exemple, si une machine est connue a la fois par un nom
purement UUCP et un nom pleinement qualie, il faudra une entree pour les deux
cas. Le chier peut ^etre trie par la commande standard sort(1).
Si votre site est juste un petit site UUCP isole en bout de cha^ne, aucun chier paths
ne sera necessaire; il sut de congurer le smart host dans le chier cong, et laisser
cette machine s'occuper de router tous vos messages pour vous.
dans la premiere ligne de son chier de bo^te aux lettres. Tout son courrier sera alors
envoye aux destinataires indiques. L'autre solution est de creer un chier .forward
dans son repertoire personnel, contenant la liste des destinataires, separes par des
virgules. Avec cette methode, toutes les lignes du chier sont lues et interpretees.
N'importe quel type d'adresse peut ^etre utilise. Un exemple pratique de chier .for-
ward pendant la periode des vacances pourrait ^etre :
marcel, "|vacation"
Ou destinataires est une liste d'adresses, separees par des virgules, qui seront sub-
stituees a cet alias. La liste peut s'etendre sur plusieurs lignes si la ligne suivante
commence par une tabulation.
Une possibilite supplementaire oerte par smail consiste a pouvoir gerer des listes
de diusion directement depuis le chier d'alias : si vous speciez :include:fichier
comme destinataire, smail lira le chier indique et son contenu sera considere comme
une liste de destinataires.
Le chier d'alias principal se nomme /usr/lib/aliases. Si vous choisissez de rendre ce
chier modiable par tout le monde, smail ne delivrera aucun message aux commandes
shell qu'il y rencontrera, par securite. Voici un exemple de chier /usr/lib/aliases :
# bibine.com fichier /usr/lib/aliases
hostmaster: marcel
postmaster: marcel
usenet: alfred
# La liste de diffusion des developpeurs.
developpement: rene, remy, roberto, boudinus
/var/mail/log/developpement
owner-developpement: roberto
# Les annonces d'int
er^
et g
eneral sont envoy
ees
a tout
# le staff
annonces: :include: /usr/lib/smail/staff,
/var/mail/log/annonces
owner-annonces: root
# Envoie la liste de diffusion ppp vers un forum local.
ppp-list: "|/usr/local/lib/monfiltre local.listes.ppp"
Si une erreur se produit sur une adresse generee depuis le chier aliases, smail ten-
tera d'envoyer une copie du message d'erreur a l'alias (( owner )) (le proprietaire).
Par exemple, si lors de la repartition de la liste de diusion de developpement, il est
impossible de delivrer le courrier a boudinus, une copie du message d'erreur sera
postee a l'expediteur, aussi bien qu'a postmaster et owner-developpement (ro-
berto dans cet exemple). Si cette derniere adresse n'existe pas, aucun message d'erreur
supplementaire ne sera genere.
Lorsqu'il delivre du courrier dans des chiers ou lorsqu'il invoque des programmes
indiques dans le chier aliases, smail devient l'utilisateur nobody le temps de l'ope-
ration, par securite. Ce peut ^etre tres g^enant, particulierement lorsque la destination
est un chier. Dans l'exemple ci-dessus, les chiers du repertoire log doivent pouvoir
^etre ecrits par nobody et doivent lui appartenir, sinon rien n'y sera delivre.
234 Chapitre 14. Mise en route de smail
14.8.4 Listes de diusion
Au lieu d'utiliser le chier aliases, les listes de diusion peuvent aussi ^etres gerees
par des chiers situes dans le repertoire /usr/lib/smail/lists. Une liste de diusion
nommee restaurants sera decrite par le chier lists/restaurants, qui devra contenir les
adresses des membres de cette liste, separees par des virgules. Il peut y avoir plusieurs
lignes, et on peut y introduire des commentaires par le traditionnel signe diese.
Pour chaque liste de diusion, un utilisateur (ou un alias) dont le nom est de la
forme owner-nom-de-la-liste doit exister ; toute erreur se produisant lors de la
resolution des adresses sera rapportee a cet utilisateur. C'est aussi l'adresse qui sera
utilisee comme etant celle de l'expediteur sur tous les messages emis, par le champ
Sender de l'en-t^ete.
dernier utilise aussi smail, vous devrez creer un lien nomme rsmtp vers le programme
smail. S'il s'agit de sendmail, vous devrez installer un shell-script que vous appellerez
/usr/bin/bsmtp, qui fera tout simplement (( exec rsmtp )) (un lien symbolique ne
marchera pas).
Chapitre 15
Sendmail+IDA
15.1 Introduction a Sendmail+IDA
On dit souvent que celui qui n'a jamais edite un chier sendmail.cf n'est pas un
veritable administrateur UNIX. La legende dit aussi qu'il ne faut jamais le faire deux
fois, sous peine de devenir fou.
Sendmail est un programme orant des possibilites incroyables. Pour la plupart des
gens, il est aussi incroyablement dicile a apprendre et a comprendre. Tout pro-
gramme dont la reference absolue (sendmail, par Brian Costales, Eric Allman et Neil
Rickert) fait 792 pages, a de quoi epouvanter les plus temeraires.
Sendmail+IDA est dierent. Avec lui, plus besoin d'editer le redoutable chier send-
mail.cf, il permet a l'administrateur de denir le routage et la conguration speciques
au site par des chiers relativement simples a comprendre, appeles tables. Passer a
Sendmail+IDA peut vous faire economiser beaucoup d'heures de travail et de stress.
Compare aux principaux autres agents de transport de courrier, il n'y a probablement
rien qui ne puisse ^etre fait plus rapidement et simplement qu'avec Sendmail+IDA.
Les t^aches classiques consistant a congurer un site UUCP ou Internet deviennent
simples a accomplir. Les congurations qui sont normalement longues et complexes
sont faciles a creer eta maintenir.
A l'heure ou nous ecrivons ces lignes, la version courante, sendmail5.67b+IDA1.5, est
disponible par FTP anonyme sur le site vixen.cso.uiuc.edu. Elle se compile sous
Linux sans aucune modication 1 .
1 La version courante, a l'heure ou ces lignes sont traduites, est sendmail 8.6.9, qui est fournie sous
:
forme binaire dans les distributions de Linux et utilisee sur bien d'autres systemes. Elle est beaucoup
plus simple et universelle, et sa conguration n'a plus rien a voir avec sendmail5.67b+IDA1.5 qui,
bien que decrit dans ce livre, est obsolete.
238 Chapitre 15. Sendmail+IDA
Tous les chiers de conguration requis pour la compilation de Sendmail+IDA, son
installation et son utilisation sous Linux sont inclus dans l'archive newspak-2.2.tar.gz,
disponible par FTP anonyme sur le site d'archivage sunsite.unc.edu, dans le reper-
toire /pub/Linux/system/Mail.
Il contient quelques denitions, et ne fait essentiellement que pointer vers les tables,
ou le vrai travail se fait. En general, il sut de specier les informations suivantes :
Toute une variete de parametres peuvent ^etre denis pour etablir le comportement
du site local ou pour forcer la conguration compilee par defaut. Ces options sont
identiees dans le chier ida/cf/OPTIONS, dans le repertoire source.
Un chier sendmail.m4 destine a une conguration minimale (UUCP ou SMTP avec
tout le courrier non local envoye a un smart-host directement connecte) peut ne pas
depasser 10 a 15 lignes, commentaires exclus.
LIBDIR denit le repertoire dans lequel Sendmail+IDA ira chercher les chiers de
conguration, les dierentes tables dbm, et les denitions locales speciales. Dans une
distribution binaire typique, ce parametre est compile dans le programme et n'a pas
besoin d'^etre explicitement indique dans le chier sendmail.m4.
240 Chapitre 15. Sendmail+IDA
La ligne de l'exemple commence par les trois lettres dnl, ce qui signie qu'il s'agit
d'un commentaire.
Pour modier l'endroit ou vous desirez placer les chiers de conguration, supprimez
la cha^ne dnl, indiquez le chemin d'acces voulu, puis reconstruisez et reinstallez le
chier sendmail.cf.
Il existe aussi une valeur par defaut pour deliver dans le chier Sendmail.mc qui
est inclus dans sendmail.cf. Pour le specier, vous ne devez pas utiliser le chier
mailers.linux mais denir a la place, dans votre chier sendmail.m4, ce qui suit :
dnl --- (in sendmail.m4) ---
define(LOCAL_MAILER_DEF, DELIVER)dnl # prog. pour courrier local
Beaucoup de sites considerent qu'il est tres important d'assurer les envois et receptions
de courrier avec un taux de reussite proche de 100 %. Bien que l'examen des traces
de syslogd(8) soit utile, l'administrateur a generalement besoin de voir les en-t^etes
des messages rejetes an de pouvoir determiner s'ils n'ont pu ^etre delivres en raison
d'une erreur de l'utilisateur ou d'un probleme de conguration sur l'un des systemes
mis en jeu.
Denir POSTMASTERBOUNCE permettra d'envoyer une copie de chaque message
rejete a l'utilisateur deni comme Postmaster du systeme.
Helas ! positionner ce parametre a pour consequence d'envoyer egalement le texte du
message non delivre au postmaster, ce qui est une atteinte a la vie privee des personnes
utilisant le courrier sur son systeme.
Les administrateurs de site doivent par principe tenter de se retenir de lire des mes-
sages prives qui ne leur sont pas adresses (ou le faire par des moyens techniques, par
exemple a l'aide de shell-scripts qui suppriment le contenu des courriers rejetes dont
ils recoivent une copie).
Il existe plusieurs reseaux bien connus qui sont souvent references dans des adresses de
courrier pour des raisons historiques, mais qui ne sont pas valides lors d'une recherche
par le DNS. Denir PSEUDODOMAINS evite d'inutiles requ^etes aux serveurs de
noms, qui echoueront toujours.
Souvent, les systemes doivent cacher leur vraie identite, servir de passerelle de courrier,
ou recevoir et traiter des messages adresses a d'anciens noms, sous lesquels ils etaient
connus auparavant.
PSEUDONYMS specie la liste de tous les noms pour lesquels le systeme local ac-
ceptera du courrier.
15.3. Le chier sendmail.cf 243
DEFAULT HOST specie le nom qui appara^tra dans les messages emis depuis le
systeme local. Il faut absolument que ce parametre soit positionne a une valeur valide,
sinon toutes les reponses aux courriers ne pourront ^etre delivrees.
Tres souvent, les systemes sont connus sous un nom pour le DNS et sous un autre pour
UUCP. UUCPNAME vous permet de denir un nom d'h^ote dierent, qui appara^tra
dans les en-t^etes du courrier emis par UUCP.
UUCPNODES denit les commandes qui retournent une liste de machines avec les-
quelles vous ^etes directement en liaison UUCP.
BANGIMPLIESUUCP et BANGONLYUUCP assurent que le courrier adresse avec
la notation par bangs UUCP sera traite selon la methode UUCP plut^ot que par celle
du DNS utilisee de nos jours sur l'Internet.
Beaucoup d'administrateurs systeme ne veulent pas passer tout leur temps a con-
gurer leur machine pour s'assurer qu'elle peut vraiment atteindre tous les h^otes de la
planete. Ils preferent envoyer tout le courrier dont la destination est inconnue vers une
machine relais, qui saura prendre ce routage en charge, que l'on appelle le smart-host.
RELAY HOST denit le nom UUCP d'une telle machine.
RELAY MAILER denit l'agent de transport utilise pour relayer les messages.
Il est important de noter que positionner ces parametres aura pour consequence d'en-
voyer tout votre courrier sortant vers ce systeme distant, ce qui aectera la charge de
cette machine. Assurez-vous auparavant d'avoir obtenu l'accord de son administrateur
avant de lui envoyer tout ce travail.
Avec ces macros, vous pouvez changer l'endroit ou Sendmail+IDA recherche les di-
verses tables dbm qui denissent le comportement (( reel )) du systeme. Il est raisonnable
de les laisser dans LIBDIR.
Supposons maintenant que vous desirez que tout le courrier pour le gros domaine
groucho.edu aille vers un h^ote relais dierent (grostas) pour la resolution des
adresses et la distribution. La table mailertable deviendra alors comme ceci :
# (extrait de mailertable)
#
# renvoie tout le courrier pour le domaine .cs.groucho.edu
# par UUCP sur la machine ada.
UUCP-A,ada .cs.groucho.edu
#
# renvoie tout le courrier pour le domaine groucho.edu par UUCP
# vers la machine grostas.
UUCP-A,grostas .groucho.edu
246 Chapitre 15. Sendmail+IDA
Comme nous l'avons dit plus haut, l'ordre des entrees est important. Si les deux regles
ci-dessus apparaissaient dans le sens inverse, tout le courrier vers .cs.groucho.edu
serait dirige par la regle generale vers grostas au lieu d'^etre traite par la regle plus
specique devant l'envoyer vers ada.
Dans l'exemple de mailertable ci-dessus, UUCP-A indique a sendmail de delivrer le
courrier par UUCP avec des en-t^etes domainises.
La virgule entre la methode et le nom du systeme lui indique d'envoyer le message a
ada pour la resolution d'adresses et l'expedition (ce n'est pas qu'un caractere sepa-
rateur, il peut avoir plusieurs valeurs, nous allons voir ca).
Les entrees mailertable ont le format suivant :
m
ethode d
elimiteur h^
ote-relais ote ou domaine
h^
Cette methode est utilisee lorsque vous ^etes une passerelle courrier pour un site,
ou lorsque vous voulez envoyer directement des messages vers une liaison UUCP
directe plut^ot que de passer par la liaison par defaut et plusieurs autres systemes
intermediaires.
Les sites UUCP qui sont connectes a vos voisins UUCP utilisant des en-t^etes do-
mainises utiliseront ce chier pour forcer l'envoi du courrier par la liaison UUCP
directe entre les deux systemes, plut^ot que d'utiliser la route moins directe par RE-
LAY MAILER et RELAY HOST ou via DEFAULT MAILER.
Les sites Internet qui n'utilisent pas UUCP n'auront pas besoin de uucpxtable.
Supposons que vous orez le renvoi du courrier a un systeme appele sesame.com dans
le DNS et sesame dans les cartes UUCP. Vous aurez besoin de l'entree suivante dans
uucpxtable pour forcer le courrier pour cette machine a passer par votre connexion
UUCP directe :
#============== /usr/local/lib/mail/uucpxtable ============
# Le courrier pour utilisateur@sesame.com est r
e
ecrit sous
# la forme sesame!utilisateur et par cons
equent sera d
elivre
# par UUCP
#
sesame sesame.com
#
#----------------------------------------------------------
{ Orir des raccourcis ou des noms plus connus pour ecrire a une ou plusieurs
personnes.
{ Appeler un programme en lui passant le message sur l'entree standard.
{ Envoyer un courrier dans un chier.
Pour ^etre conforme aux RFC, tous les systemes necessitent au moins deux alias :
Postmaster et MAILER-DAEMON.
15.4. Presentation des tables de Sendmail+IDA 249
Soyez toujours vigilant sur la securite lorsque vous denissez des alias qui appelleront
des programmes ou ecriront dans des chiers car sendmail fonctionne avec un setuid
a root.
Les modications eectuees dans le chier aliases ne prennent eet qu'apres avoir
execute la commande :
# /usr/lib/sendmail -bi
Cette commande reconstruit la table dbm necessaire. Vous pouvez egalement employer
la commande newaliases, que l'on fait souvent executer a intervalles reguliers par cron.
Tous les details concernant les alias peuvent se trouver dans la page de manuel
aliases(5). Ci-dessus, gure 15.2, un exemple de chier aliases.
Si vous avez une commande tar (( moderne )), vous pourrez probablement obtenir le
m^eme resultat par la simple commande tar -zxvf fichier.tgz.
Une fois ce traitement termine, vous aurez obtenu un repertoire portant le nom
de sendmail5.65b+IDA1.5+mailx5.3b. Vous y trouverez une installation complete de
Sendmail+IDA plus un binaire du programme utilisateur mailx. Toute l'arborescence
15.5. Installation de sendmail 251
en dessous de ce repertoire re
ete l'emplacement exact ou les chiers doivent ^etre
installes. Vous pouvez donc en toute securite les mettre en place ainsi :
# cd sendmail5.65b+IDA1.5+mailx5.3b
# tar cf - . | (cd /; tar xvvpoof -)
A ce stade, votre systeme sendmail est pr^et a fonctionner. Mettez la ligne suivante
dans le script qui lance les demons sur votre machine (generalement /etc/rc.inet2) ;
vous pouvez aussi l'executer a la main pour ne pas avoir a relancer Linux :
# /usr/lib/sendmail -bd -q1h
Les tests qui suivent verient que sendmail est capable de delivrer tout le courrier a
vos utilisateurs. Dans tous les cas, le resultat du test doit ^etre le m^eme et pointer vers
le systeme local, avec le transport LOCAL.
Tout d'abord, regardons comment un courrier pour un utilisateur local sera delivre :
La sortie montre comment sendmail traite une adresse de maniere interne. Elle est
passee a dierentes regles qui l'analysent, et en appellent d'autres tour a tour, et
toutes ses composantes sont isolees.
Dans notre exemple, nous avons donne l'adresse moi aux regles 3 et 0 (d'ou le nombre
3,0 entr e avant l'adresse). La derniere ligne montre l'adresse analysee telle que re-
tournee par la regle 0, contenant la methode par laquelle le message serait delivre
ainsi que l'h^ote et l'utilisateur qui lui seront passes.
Ensuite, verions ce que donne un message a un utilisateur du systeme, avec une
syntaxe UUCP.
Vous devez recommencer les tests ci-dessus avec chacun des noms que vous avez
254 Chapitre 15. Sendmail+IDA
indique dans les parametres PSEUDONYMS et DEFAULT NAME de votre chier
sendmail.m4.
Enn, verions que vous pouvez envoyer du courrier vers votre relais :
Si vous avez des voisins UUCP autres que votre RELAY HOST, vous devrez verier
que le courrier qui leur est destine est bien route comme vous l'avez prevu. Les mes-
sages adresses avec la syntaxe UUCP vers un h^ote avec lequel vous ^etes directement
connecte par UUCP doivent lui ^etre envoyes directement (sauf si vous l'emp^echez
explicitement par une entree dans domaintable). Considerons que swim est un de vos
voisins UUCP directs. Passer a sendmail un message adresse a swim!fred devrait
produire le resultat suivant :
Si vous avez des entrees uucpxtable destinees a forcer l'envoi UUCP vers certains
voisins qui postent leur courrier avec le style Internet et des en-t^etes domainises, il
faudra aussi verier ceci :
256 Chapitre 15. Sendmail+IDA
Ces problemes font souvent du tort a l'administrateur local, car les utilisateurs se
moquent generalement que vous n'administriez pas personnellement tous les systemes
du monde (ou ne puissiez pas joindre leurs responsables pour qu'ils corrigent leurs
erreurs). Tout ce qu'ils voient, c'est que leurs messages n'aboutissent pas a leurs
destinataires et que vous ^etes la personne ideale sur laquelle passer leur colere.
La conguration d'un site distant n'est pas votre probleme. Dans tous les cas, ne
tentez pas de deregler votre systeme pour arriver a communiquer avec une machine
mal conguree. Si vous ne pouvez pas joindre son responsable an qu'il corrige ce
qu'il faut en temps voulu, vous avez deux options :
{ Il est generalement possible de forcer le systeme distant a accepter du courrier,
mais puisqu'il n'est pas correctement congure, les reponses ne reviendront sans
doute pas ; mais la, c'est le probleme de son administrateur.
Vous pouvez corriger les mauvais en-t^etes de l'enveloppe de vos messages sor-
tants, uniquement en utilisant une entree domaintable pour leur h^ote ou do-
maine, qui fera que les informations non valides seront corrigees pour tout le
courrier provenant de votre site :
malade.correct.domaine.com malade.incorrect.domaine.com
{ Souvent, les sites mal congures rejettent le courrier en le renvoyant vers la
machine expeditrice en disant sans honte (( ce courrier ne nous est pas destine )),
simplement parce qu'ils n'ont pas leur PSEUDONYMNS ou equivalent congure
proprement. Il est alors possible de supprimer tout nom d'h^ote et de domaine
de l'enveloppe des messages partant de votre site vers le leur.
Le point d'exclamation ! dans le chier mailertable ci-dessous delivre les mes-
sages a leur site en les faisant appara^tre a leur sendmail comme s'ils arrivaient de
leur systeme local. Notez que cela ne change que l'adresse d'enveloppe, l'adresse
de retour correcte sera toujours presente dans le message.
TCP!malade.correct.domaine.com malade.incorrect.domaine.com
Neanmoins, m^eme si vous arrivez a leur poster du courrier, il n'y a aucune garantie
qu'ils puissent vous repondre (ce sont des nuls, ne l'oubliez pas) ; mais au moins, leurs
utilisateurs casseront les pieds a leur administrateur, et vous serez tranquille de votre
c^ote.
Le resultat sera que sendmail determinera (via UUCPNODES dans le chier send-
mail.m4) que vous ^etes directement connecte au systeme distant, et mettra le courrier
en attente dans la queue UUCP, pour qu'il soit delivre a la prochaine connexion de
ce type avec ce site.
#
evite le courrier direct pour un voisin UUCP
voisin.com voisin
Cela remplacera toute occurrence du nom UUCP par le nom pleinement qualie, et
par consequent evitera qu'il soit trouve par la ligne UUCPNODES du chier send-
mail.m4. Le resultat sera generalement que le courrier partira via le RELAY MAILER
et RELAY HOST (ou DEFAULT MAILER).
{ sendmail est fourni avec un utilitaire appele mailstats qui lit un chier appele
/usr/local/lib/mail/sendmail.st et rapporte le nombre de messages et la taille
qui ont ete transferes par chaque methode declaree dans le chier sendmail.cf.
Ce chier de statistiques doit ^etre cree manuellement par l'administrateur pour
que sendmail commence a y enregistrer des traces. Les resultats sont remis a
zero en eacant puis recreant ce chier sendmail.st ; il sut par exemple de
faire :
# cp /dev/null /usr/local/lib/mail/sendmail.st
4 Ce document est disponible en version francaise sur les sites diusant Linux en France.
:
261
Chapitre 16
Les News Usenet
16.1 L'histoire de Usenet
L'idee de diuser des (( nouvelles )) par reseau date de 1979, lorsque deux etudiants
americains, Tom Truscott et Jim Ellis, eurent l'idee d'utiliser UUCP dans le but
d'echanger des informations entre les utilisateurs de plusieurs machines UNIX. Ils
etablirent alors un petit reseau de trois systemes, en Caroline du Nord.
Tout au debut, le trac etait gere par quelques shell-scripts (reecrits plus tard en
langage C), mais aucun code ne fut jamais diuse. Cet ensemble fut rapidement
remplace par (( A news )), la premiere version publique des logiciels de (( News )).
Cette version n'etait pas prevue pour gerer plus de quelques articles par groupe et
par jour. Lorsque le volume se mit a augmenter, Mark Horton et Matt Glickman
realiserent une nouvelle version des programmes, qu'ils baptiserent la version (( B )),
soit (( Bnews )). La premiere version publique de Bnews portait le numero 2.1, c'etait
en 1982. Depuis, elle a continuellement evolue, subissant de profondes evolutions.
Actuellement, Bnews en est a la version 2.11, qui devient obsolete; le responsable de
sa maintenance etant passe a INN.
Une autre reecriture fut entreprise et diusee en 1987 par Geo Collyer et Henry
Spencer ; il s'agit de la version (( C )), ou C News, la plus courante etant la ver-
sion (( C News Performance )). Sur les sites qui transportent un tres grand nombre
de groupes, la surcharge due a l'appel frequent de relaynews, qui est le programme
distribuant les articles vers les autres machines, est assez importante. La version (( Per-
formance )) ajoute une option a ce programme permettant de l'utiliser en mode demon,
dans lequel il fonctionne en t^ache de fond. Cette version, tres repandue, est fournie
avec beaucoup de distributions binaires de Linux.
Jusqu'a la version C, cet ensemble etait etudie pour une utilisation sur des reseaux
UUCP, bien que son emploi dans d'autres environnements rest^at possible. Mais obte-
262 Chapitre 16. Les News Usenet
nir des transferts ecaces sur des reseaux performants comme TCP/IP ou DECnet
demandait une nouvelle orientation du projet. Aussi, en 1986, fut introduit NNTP, le
Network News Transfer Protocol (protocole de transfert de News par reseau). Il est
base sur des connexions reseau et specie un certain nombre de commandes interac-
tives permettant le transfert et la lecture des articles.
Il existe beaucoup d'applications basees sur NNTP sur l'Internet. Le paquetage nntpd
de Brian Barber et Phil Lapsley, que vous pouvez employer pour orir un service de
lecture des News a des h^otes d'un reseau local, est l'un des plus connus. Il est prevu
pour completer les ensembles de gestion de News comme Bnews ou C News, en leur
apportant le support du protocole NNTP.
INN, ou Internet News, en est un autre. Ce n'est pas qu'un simple frontal, mais un
systeme a part entiere. Il comprend un demon tres sophistique qui peut supporter de
multiples liaisons NNTP concurrentes, et est devenu le serveur de News ideal employe
sur un nombre de plus en plus grand de sites Internet.
Les articles sont postes dans un ou plusieurs newsgroups. On peut considerer un news-
group comme un forum destine a recevoir des articles concernant un sujet particulier.
On utilise indieremment les termes newsgroups, groupes, forums, voire conferences
pour les designer; a l'etranger seuls les deux premiers termes sont employes dans le
cadre de Usenet. Tous les groupes sont organises en hierarchies, leur nom indiquant
leur emplacement dans cette arborescence ; ce qui permet souvent de savoir facilement
quel est le sujet traite, au vu du nom. Par exemple, tout le monde comprendra que le
groupe appele comp.os.linux.announce sert aux annonces concernant un systeme
d'exploitation (os) d'ordinateurs (computers) nomme Linux.
Ces articles sont alors echanges entre tous les sites Usenet qui ont l'intention de trans-
porter les messages de ce groupe. Lorsque deux sites se mettent d'accord pour echanger
des News, ils sont libres de transporter les groupes qu'ils desirent, et peuvent m^eme
creer de nouvelles hierarchies locales a leurs systemes. Par exemple, groucho.edu
peut avoir un lien avec barnyard.edu, qui est un site Usenet important, et plusieurs
liaisons avec des sites plus petits auxquels il fournit certains groupes (vous verrez
souvent designer la fourniture de News par le terme anglais feed). Maintenant, bar-
nyard.edu peut recevoir toute les hierarchies Usenet, alors que GMU n'en desire que
quelques-unes comme sci, comp, rec, etc. Certains petits sites, disons par exemple
une machine UUCP appelee brewhq, ne voudront prendre que quelques forums, pour
des raisons de lenteur de liaison et de ressources limitees. De plus, brewhq peut vou-
loir recuperer une hierarchie locale fj, que GMU ne possede pas. Il sera par consequent
oblige d'etablir une autre liaison avec gargleblaster.com, qui transporte ces groupes,
et qui les fournira a brewhq. Le
ux de News correspondant a cette situation est
illustre dans la gure 16.1.
Les reperes inscrits a c^ote des
eches en provenance de brewhq necessitent toutefois
une explication. Par defaut, ce site veut que tous les articles generes localement soient
envoyes a groucho.edu. Mais comme groucho.edu ne transporte pas les groupes
fj, il n'y a aucun inter^et a les leur envoyer, ils seront rejetes. Par consequent, le
ux
allant de brewhq a GMU est repere all,!fj, signiant que tous (all) les groupes sauf
ceux de la hierarchie fj sont transmis.
Usenet
barnyard.edu gargleblaster.com
comp,sci,
fj
rec fj
all
all,!fj
groucho.edu brewhq
comp.os,
comp.periphs
but, il s'agissait de UUCP ; mais de nos jours le plus gros du trac se fait par des
sites Internet. L'algorithme de routage utilise est base sur la redondance : chaque site
maintient un certain nombre de liens (les fameux feeds de News) avec d'autres. Tout
article genere ou recu par le systeme local leur est expedie, sauf s'il est deja passe
par eux. Il est possible de savoir par ou est passe un article gr^ace au champ Path de
l'en-t^ete, qui contient la liste de tous les systemes qu'il a traverses, separes par un
point d'exclamation (bang-path).
Pour distinguer les articles et reconna^tre les doublons, chacun d'eux doit comporter
dans son en-t^ete un identicateur unique, appele le Message-ID, qui est realise a partir
du nom du site associe a un numero de serie unique sur cette machine, presente sous
la forme numero@site . Le systeme de News enregistre chaque article traite par
< >
ce numero dans un chier appele history, qui est teste a chaque fois qu'un nouveau
message se presente.
Le
ux entre deux sites quelconques peut ^etre limite selon deux criteres. D'une part, il
existe un champ indiquant l'etendue de sa distribution (Distribution dans l'en-t^ete),
permettant eventuellement de ne le transmettre qu'a un nombre limite de sites accep-
tant cette distribution particuliere. D'autre part, le nombre de groupes echanges peut
^etre limite par l'un ou l'autre des systemes. L'ensemble des groupes et distributions
autorises a ^etre transmis est generalement congure dans le chier sys.
La grande quantite d'articles a traiter necessite generalement quelques ameliorations
de la methode precedente. Sur les reseaux UUCP, il est naturel de collecter les mes-
sages sur une certaine periode puis de les combiner ensemble en un seul gros chier,
qui est compresse puis envoye sur le site distant. C'est la diusion par lots.
Une autre technique fait appel au protocole ihave/sendme qui evite aux articles du-
pliques d'^etre transferes avant d'^etre nalement rejetes. Au lieu de mettre tous les
articles dans des lots et de les expedier tels quels, ce ne sont que les message-ID qui
sont utilises pour constituer un enorme message nomme (( ihave )) (je possede) expedie
au site distant. Celui-ci en prend connaissance, le compare a son chier d'historique,
et retourne la liste des articles pour lesquels il desire un message appele (( sendme ))
(envoie-moi). Seuls ces articles seront alors transferes.
Bien s^ur, ce protocole ihave/sendme n'a d'inter^et que s'il met en jeu deux gros sites
qui recoivent les News depuis plusieurs
ux independants les uns des autres, et qui
sont connectes susamment souvent pour obtenir des echanges ecaces.
Les sites connectes a l'Internet utilisent generalement des programmes bases sur
TCP/IP faisant appel au protocole NNTP 4 . Il permet de transferer les articles et
d'orir des acces individuels a Usenet a tout utilisateur se trouvant sur une machine
distante et possedant un programme de lecture adequat.
NNTP permet le transfert de trois facons dierentes. La premiere est une version
temps reel de ihave/sendme, aussi connue sous le nom de methode du pushing (on
(( pousse )) les articles). Dans la deuxi eme, le client demande une liste d'articles dans
4 Decrit dans le RFC 977.
:
266 Chapitre 16. Les News Usenet
une hierarchie ou un groupe donne, qui sont arrives sur le serveur apres une certaine
date, et choisit ceux qu'il ne peut pas trouver dans son chier d'historique. C'est
le pulling (on (( tire )) les articles). La troisieme methode est destinee a la lecture
interactive et permet de recuperer des articles depuis les groupes species, aussi bien
que d'en poster, le plus souvent a l'aide de programmes conviviaux appeles (( lecteurs )).
Sur chaque site, les News sont stockees dans une arborescence de repertoires situee
sous /var/spool/news, chaque article faisant l'objet d'un chier separe. Le nom du
repertoire est constitue du nom du groupe, ses composants etant ceux du chemin
d'acces. C'est-a-dire que, par exemple, les messages de comp.os.linux.misc se trou-
veront dans le repertoire /var/spool/news/comp/os/linux/misc. Ils se voient assigner
un numero, dans l'ordre ou ils arrivent, qui sert de nom de chier. L'etendue de ces
numeros est conservee dans un chier nomme active, qui sert en m^eme temps de liste
des groupes connus sur le site en question.
Puisque l'espace de stockage oert par les disques durs est encore de nos jours une
ressource nie 5 , il faut penser a eliminer regulierement les articles devenus trop vieux :
c'est le processus d'expiration. En principe, il est possible de congurer cela de ma-
niere souple, les articles de certains groupes ou certaines hierarchies etant elimines un
certain nombre de jours apres leur arrivee sur le systeme. L'expediteur peut lui-m^eme
decider de la date a partir de laquelle son message pourra ^etre supprime, en speciant
une date d'expiration dans le champ Expires de l'en-t^ete.
5 Certains arment que Usenet est le fruit d'un complot ourdi par les constructeurs de modems
:
et les fabricants de disques durs.
267
Chapitre 17
C News
C News est l'un des ensembles de logiciels de News les plus connus. Il est destine aux
sites transportant les articles par UUCP. Ce chapitre traitera de son fonctionnement,
decrira son installation et les t^aches de maintenance necessaires a son fonctionnement
correct.
Les chiers de conguration de C News se trouvent dans /usr/lib/news, et l'essentiel
de ses programmes executables se situent dans le repertoire /usr/lib/news/bin. Les
articles sont stockes dans /var/spool/news. Vous devez verier, car c'est tres impor-
tant, que tous les chiers contenus dans ces repertoires appartiennent a l'utilisateur
news et au groupe news. La plupart des problemes rencontres sont dus a des chiers
inaccessibles a l'application. Vous devez prendre l'habitude de passer sous le compte
utilisateur news (par la commande su) avant de toucher a quoi que ce soit dans la
gestion des News. La seule exception a cette regle concerne le programme setnew-
sids, qui est utilise pour positionner le numero d'identication utilisateur de certains
utilitaires : il doit appartenir a root et avoir le bit setuid positionne.
17.2 Installation
Pour installer C News, mettez en place les chiers contenus dans l'archive si ce n'est
pas encore fait, et editez les chiers de conguration indiques ci-dessous. Ils se trouvent
1 Il peut y avoir une dierence entre les groupes qui existent sur votre site, et ceux qu'il desire
:
recevoir. Par exemple, la liste de souscription peut specier comp.all, ce qui signie tous les groupes
de la hierarchie comp, mais seule une partie de ces groupes peut ^etre indiquee dans votre chier
active. Les articles pour les groupes absents de ce chier seront places dans junk.
2 Il est tres important que ce soit le crontab de l'utilisateur news, an de ne pas modier les
:
permissions des dierents chiers.
17.2. Installation 269
article
relaynews
history
ME ponderosa moria
courrier
tous dans /usr/lib/news, et leurs dierents formats vont ^etre decrits dans les sections
suivantes :
sys Vous devrez sans doute modier la ligne ME qui decrit votre systeme,
bien que l'emploi de all/all soit une solution qui fonctionne toujours.
Il faudra aussi ajouter une ligne pour chaque site a qui vous enverrez
des articles.
Si vous ^etes un site UUCP isole en bout de cha^ne, il vous sura d'une
ligne qui renvoie tous les articles generes localement a votre fournis-
seur. En supposant que ce soit moria, votre chier sys ressemblera
simplement a ceci :
ME:all/all::
moria/moria.orcnet.org:all/all,!local:f:
Si vous possedez une version recente de C News, il vous faudra aussi creer le repertoire
news/out.master.
Si vous utilisez des programmes lecteurs de provenances diverses, vous vous ren-
drez compte que certains recherchent le spoule dans /usr/spool/news au lieu de
/var/spool/news, et dans ce cas, ils seront incapables de trouver les articles. Si c'est le
cas, il vous sura de creer un lien symbolique de /usr/spool/news vers /var/spool/news.
Vous ^etes maintenant equipe pour recevoir des News. Notez que vous n'aurez pas
besoin de creer d'autres repertoires que ceux mentionnes ci-dessus, C News s'occupera
de le faire automatiquement lorsque des articles arriveront.
En particulier, cela se produit pour tous les groupes dans lesquels un article a ete cross-
poste. Aussi, au bout d'un moment, vous trouverez le spoule rempli de repertoires
17.3. Le chier sys 271
correspondant a des groupes que vous n'avez jamais demande, comme alt.lang.teco.
Il est possible d'eviter cela en supprimant chacun de ces groupes du chier active, ou
en lancant periodiquement un shell-script qui supprime les repertoires vides a partir
de /var/spool/news (sauf bien entendu out.going et in.coming).
C News envoie les messages d'erreur et de service a un utilisateur particulier. Par
defaut, il s'appelle usenet. Si vous utilisez ce nom (ce qui est conseille), vous devrez
declarer un alias qui enverra tout le courrier a ce nom vers les bo^tes aux lettres des
personnes responsables. (Les chapitres 14 et 15 vous expliqueront comment faire.)
Vous pouvez aussi changer cette valeur par defaut en donnant a la variable d'en-
vironnement NEWSMASTER le nom approprie. Vous devrez le faire dans le chier
crontab de l'utilisateur news, ainsi qu'a chaque fois que vous aurez a lancer un outil
d'administration a la main. Il est donc preferable d'installer un alias pour ne pas se
compliquer la vie.
Il faudra aussi verier que dans le chier /etc/passwd, le vrai nom de chaque utilisateur
gure bien dans le champ pw gecos (c'est le quatrieme champ). Ce nom appara^tra
dans la ligne From de l'article, et il ne faut pas qu'il y apparaisse n'importe quoi ; c'est
une question de netiquette 3. Si vous utilisez deja le courrier electronique, tout cela
est probablement deja proprement congure.
site[/exclusions]:liste-groupes[/distributions][:drapeaux[:commandes]]
Une entree peut s'etendre sur plusieurs lignes, en rajoutant un anti-slash au bout (\).
Le signe diese (#) denote un commentaire.
site Il s'agit du nom du site auquel cette entree s'applique, c'est genera-
lement le nom UUCP qui est choisi. Il doit y avoir une entree pour
votre propre site dans ce chier sys, sinon vous ne recevrez jamais
aucun article.
3 La nettiquette est en quelque sorte le manuel de savoir-vivre sur Usenet. Un document humo-
:
ristique poste tous les mois en rappelle les principaux traits, vous pouvez en consulter la version
francaise dans la hierarchie francophone fr.*, ou la telecharger sur le serveur ftp.fdn.org.
272 Chapitre 17. C News
Le nom special ME denote votre site. Cette entree denit tous les
groupes que vous comptez stocker localement. Les articles de groupes
qui ne sont pas decrits dans cette ligne seront places dans junk.
Puisque C News compare site avec ceux contenus dans la ligne
Path des en-t^etes d'articles, vous devez vous assurer que tout cor-
respond bien. Certains mettent leur nom pleinement qualie, ou un
alias comme news.site.domaine. Pour eviter que des articles en
provenance de tels sites ne leur soient inutilement reexpedies, vous
devrez ajouter ces noms a la liste d'exclusion, separes par des vir-
gules.
Par exemple, pour l'entree s'appliquant a la machine moria, le champ
site contiendrait moria/moria.orcnet.org.
liste-groupes
Il s'agit d'une liste de souscription de groupes et hierarchies (dont le
caractere separateur est la virgule) pour le site en question. Une hie-
rarchie peut ^etre speciee en donnant son prexe (comme comp.os
pour tous les groupes dont le nom commence par ces lettres), suivie
facultativement par le mot cle all (par exemple, comp.os.all).
Une hierarchie ou un groupe est exclus en le faisant preceder par
un point d'exclamation, marquant la negation. Si un groupe est re-
cherche dans cette liste, c'est le plus long qui gagne. Par exemple, si
liste-groupes contient :
!comp,comp.os.linux,comp.folklore.computers
Elle execute rnews sur le systeme distant, en lui passant l'article sur
son entree standard.
Le chemin de recherche des commandes indiquees dans ce champ
est par defaut /bin:/usr/bin:/usr/lib/news/bin/batch. Le dernier re-
pertoire contient un certain nombre de shell-scripts dont les noms
commencent par via ; nous les decrirons brievement un peu plus loin
dans ce chapitre.
Si le traitement par lots a ete valide par l'un des drapeaux F, f,
I ou n, C News s'attendra a trouver un nom de chier dans ce
champ, et non pas une commande. Si ce nom ne commence pas
par un slash (/), il sera considere comme etant relatif au repertoire
/var/spool/news/out.going. Si le champ est vide, la valeur par defaut
sera systeme /togo.
Lors de la conguration de C News, vous devrez probablement rediger votre propre
chier sys. Pour vous aider dans cette t^ache, nous allons vous donner un exemple
concernant bibine.com, a partir duquel vous pourrez recopier tout ce dont vous avez
besoin et l'adapter a votre site.
# Nous prenons tout ce qu'ils nous envoient.
ME:all/all::
# Nous exp
edions comp.risks par courrier
electronique
a
# l'utilisateur jack@ponderosa.uucp
17.4. Le chier active 275
ponderosa:comp.risks/all::rmail jack@ponderosa.uucp
Le champ groupe contient le nom du groupe ; bas et haut sont les numeros du premier
et du dernier article actuellement disponibles dans ce groupe. S'il est vide, bas vaut
alors haut+1.
Enn disons que c'est ce que bas est cense faire, parce que, pour des raisons d'eca-
cite, C News ne met jamais cette valeur a jour. Ce ne serait pas un probleme s'il n'y
avait pas certains lecteurs de News comptant sur ce champ pour verier s'ils peuvent
purger des articles de leur base de donnees des ls de discussions. Pour mettre a jour
ce champ bas, vous devrez par consequent executer periodiquement la commande
updatemin (ou, dans de plus anciennes versions de C News, le script upact).
Le champ permission est un parametre indiquant quel type d'acces auront les utili-
sateurs, il peut prendre l'une des valeurs suivantes :
y Les utilisateurs ont le droit de poster dans ce groupe.
n Les utilisateurs n'ont pas le droit de poster dans ce groupe, mais ils
peuvent le lire.
x Ce groupe a ete invalide sur le systeme local. Cela arrive quelque-
fois lorsque des administrateurs (ou leurs superieurs) se plaignent du
contenu des messages y etant postes.
Les articles recus pour ce groupe ne sont pas stockes localement, mais
ils seront toujours emis vers les sites qui les demandent.
m Indique un groupe modere. Lorsqu'un utilisateur tente de poster de-
dans, si son lecteur de News est bien concu, il lui notiera ce fait et
276 Chapitre 17. C News
enverra l'article au moderateur par courrier electronique. L'adresse
du moderateur est prise dans le chier moderators situe dans le re-
pertoire /usr/lib/news.
=vrai-groupe
Marque groupe comme etant un alias local pour un autre groupe,
nomme en realite vrai-groupe. Tous les articles postes dans groupe
y seront rediriges.
Dans C News, vous n'aurez en general pas besoin d'acceder directement a ce chier.
Les groupes peuvent ^etre ajoutes ou supprimes localement par les commandes add-
group et delgroup (consultez la section (( Outils et travaux de maintenance )) page 287).
Les messages de contr^ole newgroup et rmgroup creent ou suppriment un groupe dans
la totalite de Usenet. N'envoyez jamais un tel message vous-m^eme ! Vous vous feriez
har du monde entier. Toutes les instructions de creation de groupe a un tel niveau
sont postees tous les mois dans news.announce.newusers.
Le chier active.times est tres lie a active : chaque fois qu'un nouveau groupe est cree,
C News enregistre un message dans ce chier. Il contient le nom du groupe cree, la
date de creation, si celle-ci a ete faite sur un message de contr^ole newgroup ou locale-
ment, et le nom de la personne ayant cree ce groupe. Il sert aux programmes lecteurs
qui peuvent eventuellement notier aux utilisateurs les nouveaux groupes recemment
crees. Il est egalement utilise par la commande NEWGROUPS du protocole NNTP.
#! rnews taille
La valeur taille est le nombre d'octets contenus dans l'article. Lorsque l'on utilise
la compression, c'est le chier resultant qui est compresse ; il est alors precede d'une
autre ligne, indiquant que les donnees qui suivent devront ^etre decompactees. L'outil
standard permettant la compression est compress, qui est repere par :
#! cunbatch
Il arrive que l'on doive faire passer des lots par courrier, ou certaines liaisons suppri-
ment le huitieme bit des donnees. Dans ce cas, on peut proteger un lot compresse en
utilisant l'encodage appele c7 ; ils seront alors reperes par c7unbatch.
7 Ce format est deni dans le document RFC 1036.
:
17.5. Le traitement par lots (batching) 277
Lorque le programme rnews du site distant recoit un lot de News, il teste ces reperes
an de traiter les donnees de maniere appropriee. Certains sites utilisent le compacteur
gzip, et indiquent alors zunbatch : C News ne reconna^t pas ces en-t^etes non standard,
vous devrez modier le code source pour pouvoir les traiter.
Le programme /usr/lib/news/bin/batch/sendbatches est charge de la realisation des
lots. Il prend une liste d'articles dans le chier site/togo, et constitue les archives en
les repartissant dans un ou plusieurs lots. Il doit ^etre execute periodiquement, au moins
une fois par heure, voire plus, en fonction du volume du trac. Son fonctionnement
est contr^ole par le chier batchparms situe dans /usr/lib/news, qui decrit la taille
maximale autorisee pour chaque lot, et le transport a utiliser pour les delivrer ; ceci
pour chaque site. Vous pouvez specier ces parametres soit par site, soit par des
valeurs par defaut qui seront prises en compte pour tous les systemes non mentionnes
explicitement.
Pour preparer les lots destines a un site specique, utilisez la commande suivante :
# su news -c "/usr/lib/news/bin/batch/sendbatches site "
Appelee sans argument, la commande sendbatches traite toutes les les d'attente. Si
une entree par defaut existe dans le chier batchparms, tous les repertoires contenus
dans /var/spool/news/out.going seront traites ; sinon ne seront pris en compte que les
entrees indiquees, dans l'ordre ou elles se trouvent dans batchparms. Notez que lors
de la recherche dans out.going, sendbatches ne considere comme nom de site que les
repertoires ne contenant aucun point ou signes @ dans leur nom.
Vous trouverez probablement dans votre distribution un chier batchparms tout pr^et
contenant une entree par defaut raisonnable, aussi il y a des chances que vous n'ayez
rien a modier. Malgre tout, nous allons decrire ce format, qu'il est bon de conna^tre.
Chaque ligne contient six champs, separes par des espaces ou tabulations :
site taille max outil compacteur transport
Le champ site contient le nom du site auquel s'applique cette entree. Le chier togo
correspondant devra se trouver dans le repertoire out.going/togo, dans le spoule. Le
mot cle /default/ indique l'entree par defaut.
Le champ taille indique la taille maximale autorisee pour chaque lot, avant com-
pression. Si un article depasse a lui seul cette taille, C News fera une exception et
creera un lot ne contenant que cet article.
La valeur max correspond au nombre maximum de batches a preparer pour le transfert
vers ce site. C'est tres utile lorsqu'un systeme doit ^etre indisponible pour une longue
periode, car il evite de voir le spoule UUCP rempli par des milliers de lots en attente
d'^etre transferes.
C News determine le nombre de lots en attente gr^ace au script queulen, situe dans
le repertoire /usr/lib/news/bin. Le paquetage newspak de Vince Skahan en contient
278 Chapitre 17. C News
une version adaptee aux implementations d'UUCP compatibles BNU. Si vous utilisez
un autre style de repertoires de spoule, comme Taylor UUCP, vous devrez ecrire un
script adapte 8.
Le champ outil designe la commande utilisee pour produire un lot a partir de la liste
d'articles contenue dans le chier togo. Pour les
ux standard, il s'agit normalement
de batcher. Pour d'autres besoins, vous pouvez indiquer dierents autres programmes;
par exemple, le protocole ihave/sendme necessite que cette liste soit transformee en
un message de contr^ole poste dans le groupe to.site. Cette operation est realisee par
batchih et batchsm.
Le champ compacteur specie la commande utilisee pour la compression. Generale-
ment, il s'agit du shell-script compcun 9 . Mais vous pouvez aussi indiquer un script
appelant gzip (que vous redigerez vous-m^eme) ; vous devrez cependant vous mettre
d'accord avec le site distant pour que sa commande uncompress sache traiter les -
chiers compactes par gzip.
Si le systeme distant ne possede pas du tout de commande uncompress, vous pouvez
specier nocomp ; dans ce cas, les lots resteront non compactes.
Le dernier champ, transport, decrit la methode de transport qu'il faudra utiliser.
Il y a un certain nombre de commandes standard pour cela, dont le nom commence
par via. Le programme sendbatches leur passe le nom du site destinataire sur la ligne
de commandes. Si l'entree dans batchparms n'est pas /default/, il derive ce nom du
champ site en prenant toute la partie precedant un eventuel point ou slash. S'il s'agit
de l'entree /default/, ce seront les noms des repertoires presents dans out.going qui
seront utilises.
Il y a deux commandes utilisant uux pour faire executer rnews sur le systeme distant :
viauux et viauuxz. La derniere positionne l'option -z necessaire aux anciennes versions
de uux pour eviter qu'il retourne un message pour chaque article indiquant que le
transfert s'est bien passe. Vous trouverez une liste complete de ces transports dans la
page de manuel newsbatch(8).
Toutes les commandes des trois derniers champs doivent se trouver soit dans le reper-
toire out.going/site, soit dans /usr/lib/news/bin/batch. La plupart d'entre elles sont
des shell-scripts, vous pourrez donc facilement vous ecrire des outils sur mesure le cas
echeant. Elles sont invoquees par un tube ; la liste des articles est envoyee sur l'entree
standard, et le lot realise arrive sur la sortie standard, qui elle-m^eme est redirigee vers
le compacteur, etc.
Voici un exemple de ce chier :
8 Si le nombre de lots spoules ne vous preoccupe pas (parce que vous ^etes le seul a utiliser votre
:
machine et ne redigez pas des megaoctets d'articles), vous pouvez remplacer le contenu de ce script
par la simple instruction exit 0.
9 Tel que livre avec C News, compcun utilise compress avec l'option 12 bits, car c'est le plus
:
petit denominateur commun pour la plupart des sites. Vous pouvez en faire une copie, que vous
appellerez par exemple compcun16, ou vous utiliserez la compression 16 bits.
17.6. Expiration des News 279
Le champ liste-groupes est une liste de forums, separes par des virgules, auxquels
cette entree s'appliquera. Les hierarchies peuvent ^etre speciees en indiquant le pre-
xe des groupes, suivi le cas echeant du mot cle all. Par exemple, pour designer
tous les groupes en dessous de comp.os, vous pouvez indiquer soit comp.os, soit
comp.os.all.
Lors de l'expiration d'un groupe, son nom est recherche dans les entrees du chier ex-
plist, dans l'ordre donne. La premiere entree qui correspond s'appliquera. Par exemple,
pour supprimer la majorite de comp au bout de quatre jours, sauf les articles du
groupe comp.os.linux.announce que vous voudriez conserver une semaine, il vous
sut d'une entree pour ce dernier speciant une periode d'expiration de sept jours,
suivie par celle pour comp, qui indiquera quatre jours.
Le champ permission precise si l'entree s'applique aux groupes moderes, non mode-
res, ou tous les groupes. Il peut prendre la valeur m (moderes), u (non moderes), ou
x (tous).
Le troisieme champ, jours, contient le nombre de jours au bout desquels les articles
expireront s'ils ne se sont pas vu assigner une date d'expiration particuliere par le
280 Chapitre 17. C News
champ Expires de l'en-t^ete. Notez que ce nombre de jours est compte a partir de
l'arrivee sur votre site, et non pas de la date ou le message a ete emis.
Ce champ jours peut toutefois ^etre plus complexe. Il peut contenir une combinaison
pouvant aller jusqu'a trois nombres separes les uns des autres par un tiret. Le premier
denotera le nombre de jours devant s'ecouler avant que l'article ne soit considere
comme candidat a l'expiration. Il est rare d'y mettre autre chose que zero. Le deuxieme
champ contiendra le nombre de jours avant expiration, c'est le m^eme que celui que
nous venons de decrire plus haut. Le troisieme contiendra le nombre de jours au
bout desquels l'article sera supprime de force, quel que soit le contenu du champ
Expires de son en-t^ ete. Si l'on n'indique seulement que le nombre du milieu, les deux
autres prennent des valeurs par defaut, qui peuvent ^etre speciees par l'entree speciale
/bounds/, decrite un peu plus loin.
Le quatrieme champ, archive, indique si le groupe doit ^etre archive, et a quel endroit.
Si l'archivage n'est pas demande, il sut d'y mettre un tiret. Sinon, vous pouvez
utiliser un chemin d'acces complet a un repertoire (et non pas d'un chier), ou le signe
@ qui symbolisera le repertoire d'archivage par defaut. Celui-ci sera alors indique a
doexpire par l'option -a de sa ligne de commandes. Un repertoire destine a l'archivage
doit appartenir a l'utilisateur news. Lorsque doexpire archive un article de, disons,
comp.sources.unix, il le place dans le repertoire comp/sources/unix a partir
du repertoire d'archivage, en creant l'arborescence si necessaire. Mais ce repertoire
d'archivage devra exister, il n'est jamais cree automatiquement.
Le programme doexpire tient comte de deux entrees de votre chier explist : au lieu
d'une liste de groupes, elles contiennent les mots-cles /bounds/ et /expired/. L'entree
/bounds/ contient les valeurs par defaut a assigner aux trois valeurs du champ jours
decrit plus haut.
Le champ /expired/ determine combien de temps C News devra tenir compte des
lignes du chier history. Il est necessaire, car les lignes de ce chier ne seront pas
supprimees immediatement lorsque les articles correspondants auront expire : cela
permet de rejeter tout article deja expire qui viendrait a se representer, en provenance
d'un
ux tres lent ou pour toute autre raison. Si vous n'avez qu'un fournisseur, vous
pouvez choisir une valeur assez faible. Pour les reseaux UUCP, quinze jours semble
une valeur raisonnable ; a vous de voir en fonction des delais obtenus dans votre cas
particulier.
Voici ci-dessous un exemple de chier explist contenant des intervalles d'expiration
assez courts :
# Conservation des lignes du fichier history pendant quinze jours.
/expired/ x 14 -
# Personne ne conserve un article plus de trois mois.
/bounds/ x 0-1-90 -
# groupes que nous voulons conserver plus longtemps que les autres
comp.os.linux.announce m 10 -
comp.os.linux x 5 -
17.7. Fichiers divers 281
alt.folklore.computers u 10 -
rec.humor.oracle m 10 -
soc.feminism m 10 -
# d
efauts pour les groupes tech
comp,sci x 7 -
# entr
ee qui s'appliquera
a tout le reste
all x 2 -
Votre chier newsgroups sera mis a jour, les groupes indiques dans localgroups seront
pris en compte. L'ancien chier sera sauve sous le nom de newsgroups.bac. Notez que
poster un tel message localement fonctionnera rarement, car inews refuse des articles
aussi longs.
Si C News trouve des dierences entre la liste contenue dans le message checkgroups et
le chier active, il generera une serie de commandes qui mettront tout votre systeme
a jour et enverront un rapport par courrier a l'administrateur des News. La sortie
ressemble typiquement a ceci :
From news Sun Jan 30 16:18:11 1994
Date: Sun, 30 Jan 94 16:18 MET
From: news (News Subsystem)
To: usenet
Subject: Problems with your active file
de.answers
Le premier paragraphe indique les groupes non valides que vous devez supprimer ; le
deuxieme vous donne les commandes necessaires pour le faire ; et le troisieme est une
liste des groupes qui n'ont pas ete trouves sur votre site.
Lorsque vous recevez un courrier comme celui-ci de la part de votre systeme de News,
ne le croyez pas aveuglement. En fonction de qui a envoye le message checkgroups, il
peut manquer quelques groupes voire des hierarchies entieres ; aussi vous devez faire
attention a ne pas supprimer des choses qu'il aurait fallu conserver. Si vous notez
dans les groupes manquants, certains que vous aimeriez supporter sur votre site, vous
devrez les rajouter en utilisant le script addgroup. Sauvez la liste de ces groupes
manquants dans un chier, et envoyez-le dans le petit shell-script suivant :
#!/bin/sh
cd /usr/lib/news
newsdaily Comme son nom l'indique 12 , vous devez lancer cette commande une
fois par jour. C'est un script tres important qui permet de conser-
ver des chiers de trace susamment courts, verier toute anomalie
comme de mauvais lots dans les repertoires de depart et d'arrivee,
les tentatives d'envoi vers des groupes inconnus ou moderes, etc. Les
messages d'erreur sont envoyes dans la bo^te aux lettres de l'admi-
nistrateur newsmaster.
newswatch Vous devrez lancer ce script regulierement pour verier l'etat du sys-
teme de News, toutes les heures par exemple. Il detecte les problemes
qui peuvent avoir un eet immediat sur le fonctionnement du sys-
teme, et envoie un rapport a newsmaster. Parmi les choses testees,
citons les chiers de verrouillage oublies, l'arrivee de lots inattendus,
et l'espace disque disponible.
addgroup Rajoute un groupe a votre systeme, localement. La commande s'uti-
lise ainsi :
addgroup groupe y|n|m|=vrai-groupe
Chapitre 18
Description du protocole
NNTP
Pour l'echange de News Usenet, le protocole NNTP constitue une approche radicale-
ment dierente de C News. NNTP signie Network News Transfer Protocol, protocole
de transfert de News par reseau. Il ne s'agit pas d'un programme particulier, mais
d'un standard Internet 1 . Il est base sur une connexion (generalement TCP) entre un
client situe a n'importe quel endroit du reseau et un serveur fonctionnant sur un h^ote
qui centralise le stockage des articles. La connexion permet au client et au serveur
de negocier le transfert des articles de maniere interactive, sans pratiquement aucun
delai, ce qui contribue a limiter le nombre de messages dupliques. Allie a la grande
vitesse obtenue sur l'Internet, NNTP surpasse largement tout ce que l'on pouvait
obtenir auparavant par des reseaux UUCP. Alors qu'il y a encore quelques annees,
il n'etait pas rare qu'un article mette une quinzaine de jours pour arriver a l'autre
(( bout )) de Usenet, actuellement il ne faut plus, dans le pire des cas, qu'un jour ou
deux ; et a peine quelques minutes si l'on ne sort pas d'Internet.
Dierentes commandes permettent aux clients de recuperer, envoyer et poster des
articles. La dierence entre envoyer et poster est simple : un article poste peut avoir
un en-t^ete incomplet que le serveur achevera de remplir, alors qu'un article envoye est
un (( produit ni )) 2 . La recuperation des articles peut ^etre employee pour transferer
des News aussi bien que pour la lecture par des interfaces conviviales, les Lecteurs
de News. NNTP est le protocole ideal pour orir un acces Usenet a de nombreuses
machines sur un reseau local, sans passer par toutes les complications induites par un
montage NFS.
Il permet aussi des methodes actives ou passives pour le transfert des articles, appelees
1 Deni dans le document RFC 977.
:
2 Lorsque l'on poste un article par NNTP, le serveur rajoute toujours au moins un champ dans
:
l'en-t^ete : Nntp-Posting-Host, qui contient le nom de la machine sur laquelle se trouve ce client.
290 Chapitre 18. Description du protocole NNTP
le (( pushing )) et le (( pulling )). Le pushing est pratiquement le m^eme que le proto-
cole ihave/sendme de C News : le client ore un article au serveur par la commande
(( IHAVE < Message-ID )), et ce dernier retourne un code de r
> eponse indiquant s'il
possede deja cet article ou s'il desire qu'il lui soit envoye. Dans ce dernier cas, le client
envoie l'article, termine par un point sur une ligne separee.
L'inconvenient de cette methode est la charge qu'elle induit sur le systeme serveur,
car il doit rechercher chaque article dans sa base de donnees d'historique.
Dans la technique opposee, le pulling, le client demande une liste de tous les articles
(disponibles) dans un groupe donne, arrives sur le serveur apres une certaine date.
Cette requ^ete se fait par la commande NEWNEWS. A partir de la liste de Message-ID
recus, le client selectionne ceux qu'il ne possede pas encore, en les reclamant par la
commande ARTICLE, un par un.
Cette methode presente l'inconvenient de demander au serveur un contr^ole tres serre
des groupes et distributions qu'il permet de transferer, pour chaque client. Par exemple,
il doit s'assurer qu'aucune information condentielle en provenance de groupes locaux
ne peut ^etre envoyee a des machines non autorisees.
NNTP propose egalement un certain nombre de commandes utilitaires destinees aux
programmes lecteurs, leur permettant de recuperer separement l'en-t^ete et le corps des
articles, ou m^eme uniquement certaines lignes de ces en-t^etes. Ainsi, ces programmes
peuvent se trouver sur n'importe quelle machine du reseau (de preference local), et
acceder facilement a tous les articles qui restent centralises sur un seul h^ote, ce qui
est une excellente alternative au montage des repertoires de News par NFS, comme
il est decrit dans le chapitre 17.
NNTP soure d'un petit defaut : quelqu'un d'experimente, connaissant bien le proto-
cole, peut inserer des articles portant de fausses informations (au nom de quelqu'un
d'autre, par exemple) 3 . Il existe une extension de NNTP permettant au serveur de
demander une authentication de l'utilisateur avant d'executer certaines commandes.
Il circule un certain nombre d'implementations de NNTP. Le demon NNTP, plus
connu sous l'appellation implementation de reference, est la plus celebre. A l'origine,
elle fut realisee par Stan Barber et Phil Lapsley pour illustrer les details des speci-
cations RFC 977. Nous allons decrire sa version la plus recente, nntpd-1.5.11. Vous
pouvez soit vous procurer le code source original et la compiler vous-m^eme, soit utili-
ser le nntpd contenu dans le paquetage net-std prepare par Fred van Kempen. Aucune
version binaire pre-compilee n'est fournie en raison des diverses congurations speci-
ques au site qui doivent ^etre integrees au programme.
L'ensemble nntpd consiste en un serveur et deux clients realisant du pulling et du
pushing, ainsi qu'un remplacement de la commande inews. Ils sont prevus pour un
environnement Bnews, mais avec quelques petites modications, fonctionneront par-
faitement avec C News. Toutefois, si vous comptez utiliser NNTP pour faire plus
qu'orir un acces aux lecteurs de News sur votre serveur, l'implementation de refe-
3 Le m^eme probleme se pose avec SMTP, le protocole de transfert du courrier electronique.
:
18.1. Installation du serveur NNTP 291
rence n'est plus vraiment une option. Par consequent, nous ne parlerons que du demon
NNTP contenu dans le paquetage nntpd et nous laisserons les programmes clients de
c^ote.
Il existe egalement un ensemble appele (( InterNet News )), ou INN, realise par Rich
Salz. Il ore a la fois un transport NNTP et UUCP, et est preferable pour les sites
importants. En matiere de News par NNTP, il est sans comparaison avec nntpd, c'est
vraiment lui qu'il faut choisir. Si vous voulez installer INN, consultez la documentation
fournie avec son code source, ainsi que le document (( INN FAQ )) poste regulierement
dans le groupe news.software.b.
Si vous decidez de l'employer en serveur autonome, veriez que toute ligne comme
celle-ci dessus soit absente ou commentee dans inetd.conf. Dans un cas comme dans
l'autre, le chier /etc/services doit contenir la ligne :
nntp 119/tcp readnews untp # Network News Transfer Protocol
An de gerer les articles qui arrivent, nntpd a besoin d'un repertoire temporaire .tmp
dans votre spoule de News. Vous devrez le creer a l'aide des commandes suivantes :
# mkdir /var/spool/news/.tmp
# chown news.news /var/spool/news/.tmp
#
# la machine public.bibine.com offre un acc
es public par modem,
# nous leur autorisons de lire et de poster dans tous les groupes
# except
e les groupes local.*
public.bibine.com read post !local
#
# tous les autres h^
otes chez les brasseurs peuvent lire et poster
*.bibine.com read post
Cette transaction montre une reaction correcte de nntpd ; le message (( Got it )) vous
indique qu'il possede deja l'article en question. Si a la place vous obtenez le message
(( 335 Ok )), c'est que la recherche dans la base de donn ees a echoue pour une raison
quelconque. Terminez la conversation en tapant Ctrl-D. Vous pourrez rechercher ce
qui ne va pas en inspectant les chiers de trace ; nntpd enregistre ces messages sous
la (( facilite )) daemon de syslog. Une bibliotheque dbm incompatible se manifeste
elle-m^eme en indiquant que la fonction dbminit a echoue.
295
Chapitre 19
Les lecteurs de News
Un (( lecteur de News )) est un programme que les utilisateurs appellent an de lire,
sauvegarder, et creer des articles de News Usenet. Il en existe beaucoup, la plupart se
compilent parfaitement sous Linux ou ont fait l'objet d'un portage. Ici, nous decrirons
la conguration de base de trois d'entre eux qui comptent parmi les plus populaires :
tin, trn et nn.
Le lecteur le plus ecace est celui-ci :
$ find /var/spool/news -name '[0-9]*' -exec cat {} \; | more
C'est ainsi que les vrais mordus d'UNIX lisent leurs News.
Cela dit, la plupart des autres lecteurs sont bien plus sophistiques. Ils orent generale-
ment une interface plein ecran comportant plusieurs niveaux d'achage pour scruter
les groupes que l'utilisateur frequente, un plan d'ensemble de tous les articles dans
chaque groupe, etc.
Au niveau groupe, pratiquement tous achent une liste d'articles, montrant leurs
sujets et leurs auteurs. Dans les forums les plus importants, il est souvent dicile de
suivre la trace des articles relatifs les uns aux autres, bien qu'il soit possible d'identier
des reponses a de precedents messages.
Une reponse reprend en general le sujet original, en y rajoutant (( Re: )) au debut. De
plus, le Message-ID de l'article original appara^t dans la ligne References de l'en-
t^ete. Si l'on trie les messages selon ces deux criteres, on aboutit a de petits ensembles
(en fait, arborescences) d'articles, que l'on appelle alors ls de discussions 1 . L'une des
t^aches les plus diciles lors de l'elaboration d'un lecteur de News consiste a trouver
une methode ecace pour ce classement, car le temps requis est proportionnel au
carre du nombre d'articles a trier.
1 Dans les pays francophones, on utilise indieremment les expressions (( l de discussion )), (( l ))
:
et (( discussion )) pour ce que les anglophones appellent un thread.
296 Chapitre 19. Les lecteurs de News
Nous n'entrerons pas plus dans le detail des interfaces utilisateur. Tous les lecteurs
disponibles sous Linux sont munis d'excellents manuels et de bonnes fonctions d'aide,
vous devriez pouvoir apprendre rapidement a les utiliser.
Nous allons nous concentrer sur les t^aches administratives permettant de faire fonc-
tionner ces programmes correctement ; ce ne sera bien s^ur qu'un tres bref apercu, vous
devrez ensuite vous referer a la documentation fournie avec le lecteur que vous aurez
choisi.
La version de tin incluse dans certaines distributions de Linux est compilee sans aucun
support NNTP, mais cette erreur est maintenant corrigee dans la plupart d'entre elles.
Lorsqu'on l'appelle avec l'option -r, ou encore sous le nom de rtin, le programme tente
de se connecter au serveur NNTP specie dans le chier /etc/nntpserver ou dans la
variable d'environnement NNTPSERVER. Le chier contient simplement une seule ligne,
indiquant le nom de la machine a contacter.
La commande ci-dessus validera les ls de discussion pour tous les groupes comp et
rec, sauf rec.games.go (les gens jouant a ce jeu n'ont pas grand-chose a dire). Apres
cela, il sura de l'appeler sans aucune option pour qu'il traite tous les nouveaux
articles arrives. Vous pouvez choisir d'indexer tous les groupes connus dans votre
chier active en appelant mthreads avec une liste contenant simplement le mot all.
Si vous recevez les News pendant la nuit, vous pourrez executer mthreads tous les
matins, ou plus souvent si vous en avez besoin. Les sites qui ont un trac important
peuvent utiliser ce programme en mode demon. Lorsqu'il est lance au demarrage du
systeme avec l'option -d, il s'installe en arriere-plan, et teste toutes les 10 minutes si
de nouveaux articles sont arrives, et les traitera le cas echeant. Pour l'utiliser dans ce
mode, mettez cette ligne dans votre script rc.news :
ces chiers d'index au prot de la methode des .overview, beaucoup plus elegante et ecace. Vous
en trouverez une description dans les sources du serveur INN (entre autres), et sans doute dans une
prochaine edition de ce livre...
298 Chapitre 19. Les lecteurs de News
/usr/local/bin/rn/mthreads -deav
Cette commande valide les ls de discussions pour tous les groupes presents dans
votre chier active.
Vous pouvez aussi ne pas le faire fonctionner en demon, mais l'appeler regulierement
par cron, en lui passant une liste de groupes a traiter. Cette liste ressemble beaucoup
a la liste de souscription du chier sys, mais elle utilise des espaces a la place des
virgules. Au lieu du groupe symbolique all, c'est un argument vide comme "" qui
doit ^etre utilise pour indiquer tous les groupes. Voici un exemple d'appel :
6 C news ne met pas a jour cette valeur ; vous devez utiliser la commande updatemin pour le
:
faire. Consultez dans le chapitre 17, la page 275.
19.3. Conguration de nn 299
Notez que l'ordre est signicatif. La specication de groupe la plus a gauche qui
correspond, gagnera toujours. Donc, si nous avions mis !rec.games.go apres rec, tous
les articles de ce groupe auraient ete quand m^eme traites.
Le lecteur nn propose plusieurs methodes pour supprimer de ses index les articles
expires. La premiere consiste a mettre a jour la base en scrutant les repertoires conte-
nant les articles, et a supprimer les entrees correspondant a des messages qui ne sont
plus disponibles. C'est le mode operatoire par defaut, obtenu en appelant nnmaster
avec l'option -E. Elle est assez rapide, sauf par NNTP.
La deuxieme methode fonctionne exactement comme l'expiration par defaut de mthreads,
en ce sens qu'elle ne supprime que les entrees qui se referent a des articles dont le
numero est inferieur a celui du premier article dans le chier active. On la valide par
l'option -e.
Enn, une troisieme strategie est possible, qui reconstruit entierement une nouvelle
base, en scrutant tous les articles. Elle peut ^etre mise en service par l'option -E3.
La liste des groupes a expirer est donnee de la m^eme facon par l'option -F. Toutefois,
si nnmaster fonctionne en mode demon, vous devez le tuer (par l'option -k) avant
que l'expiration ne se fasse, puis le relancer ; par consequent, la commande correcte
pour l'expiration de tous les groupes par la premiere methode sera :
# nnmaster -kF ""
# nnmaster -lrC
7 Car leur ordre doit correspondre a celui des entrees du chier binaire MASTER.
:
300 Chapitre 19. Les lecteurs de News
301
Annexe A
C^able port parallele pour
PLIP
Pour realiser un c^able reliant les ports imprimante parallele de deux PC (c^able Null-
Printer), vous devez vous procurer deux connecteurs m^ales 25 broches (appeles DB-
25) et du c^able comportant au moins 11 conducteurs. La longueur maximale possible
est d'environ 15 metres.
Si vous regardez attentivement un des connecteurs, vous devriez pouvoir lire des
numeros (prenez une loupe le cas echeant) a la base de chaque broche. Vu du c^ote
soudures, la premiere broche en haut a droite porte le numero 1, et la derniere en bas
a gauche le numero 25. Les connexions a realiser seront les suivantes :
D0 2 () 15 ERREUR
D1 3 () 13 S
ELECTION
D2 4 () 12 PLUS de PAPIER
D3 5 () 10 ACQUITTEMENT
D4 6 () 11 OCCUP
EE
MASSE 25 () 25 MASSE
ERREUR 15 () 2 D0
S
ELECTION 13 () 3 D1
PLUS de PAPIER 12 () 4 D2
ACQUITTEMENT 10 () 5 D3
OCCUPEE 11 () 6 D4
Toutes les autres broches ne sont pas utilisees. S'il s'agit d'un c^able blinde, le blindage
doit ^etre soude sur le bo^tier metallique de l'un des connecteurs, et un seul.
302 Annexe A. C^able port parallele pour PLIP
303
Annexe B
Exemples de chiers de
conguration pour smail
Cette section donne des exemples de chiers de conguration adaptes a un site UUCP
isole, connecte a un reseau local. Ils sont bases sur les exemples fournis dans la distribu-
tion source de smail-3.1.28. Bien que nous ayons tente d'expliquer tres succinctement
comment ces chiers fonctionnent, nous devons vous prevenir que la lecture du manuel
de smail(8) est indispensable ; vous y trouverez tout le detail. Une fois que vous aurez
compris le principe et l'organisation de ces chiers, ce manuel vous para^tra bien plus
clair.
Le premier chier que nous vous presentons, routers, decrit un ensemble de routeurs
pour smail. Lorsqu'il doit delivrer un message a une adresse donnee, le programme
passe cette adresse successivement a tous les routeurs jusqu'a en trouver un qui cor-
responde. Correspondre signie dans ce cas que le routeur trouve l'h^ote de destination
dans sa base de donnees, que ce soit le chier paths, /etc/hosts, ou tout autre meca-
nisme de resolution qu'il sait utiliser.
Les entrees des chiers de conguration de smail commencent toujours par un nom
unique identiant routeur, transport et directeur. Ils sont suivis par une liste d'attri-
buts qui denissent son comportement. Cette liste consiste en un ensemble d'attributs
globaux, comme le pilote utilise, et d'attributs prives qui ne sont compris que par ce
pilote particulier. Les attributs sont separes par des virgules, alors que les ensembles
globaux et prives sont separes les uns des autres par le caractere (( : )).
An de clarier ces distinctions, considerons que vous desirez maintenir deux chiers
pathalias separes: l'un contenant les informations de routage pour votre domaine,
et l'autre des informations de routage generales, probablement generees a partir des
cartes UUCP. Avec smail, vous pouvez alors specier deux routeurs dans le chier
routers, tous deux utilisant le pilote pathalias qui recherchera les noms dans une base
304 Annexe B. Exemples de chiers de conguration pour smail
de donnees pathalias, et on lui donnera le nom du chier dans un attribut prive :
#
# base de donnees pathalias pour routage dans le domaine
domaine_paths:
driver=pathalias, # cherche l'h^
ote dans un fichier paths
transport=uux; # si trouv
e, delivrer par UUCP
#
# base de donn
ees pathalias pour routage hors de notre domaine
monde_paths:
driver=pathalias, # cherche l'h^
ote dans un fichier paths
transport=uux; # si trouv
e, delivrer par UUCP
Le second attribut global donne dans chacune des deux entrees routers ci-dessus de-
nissent le transport qu'il faudra utiliser lorsque ce routeur trouvera l'adresse. Dans
notre cas, le message sera delivre par le transport uux. Ces transports sont denis
dans le chier transports, qui est decrit un peu plus loin.
Vous pouvez ajuster avec precision par quel transport un message doit ^etre delivre si
vous speciez un chier de methodes a la place de l'attribut transports. Les chiers
de methodes orent une base de correspondance entre des noms de machines et des
transports. Nous ne les traiterons pas dans ce guide.
Le chier routers qui va suivre denit des routeurs pour un reseau local qui interroge
la bibliotheque resolver. Sur un site Internet, il faudra en utiliser un autre, sachant
gerer les enregistrements MX du DNS. Par consequent, vous devrez supprimer les
commentaires devant le routeur inet bind qui utilise le pilote BIND integre a smail.
Dans un environnement mixte UUCP et TCP/IP, vous pouvez rencontrer des pro-
blemes avec des machines qui sont declarees dans votre chier /etc/hosts, avec les-
quelles vous avez occasionnellement des connexions SLIP ou PPP. Or, vous voudrez
sans doute que le courrier pour ces sites passe quand m^eme par UUCP. Pour eviter
que le pilote inet hosts ne reconnaisse ces h^otes, vous devrez les declarer dans le chier
paths/force. Il s'agit d'une autre base de donnees de type pathalias qui est consultee
avant que smail n'interroge le resolver.
# Un exemple de fichier /usr/lib/smail/routers
#
305
fail_if_error, # e
choue si adresse mal form
ee
check_for_local, # d
elivrer directement si h^
ote = nous-m^
emes
#
# base de donnees pathalias pour routage dans le domaine
domaine_paths:
driver=pathalias, # cherche l'h^
ote dans un fichier paths
transport=uux; # si trouv
e, delivrer par UUCP
#
# base de donn
ees pathalias pour routage hors de notre domaine
306 Annexe B. Exemples de chiers de conguration pour smail
monde_paths:
driver=pathalias, # cherche l'h^
ote dans un fichier paths
transport=uux; # si trouv
e, delivrer par UUCP
# smart_host - sp
ecification d'un directeur particulier vers le smart host
# Si l'attribut smart_path n'est pas d
efini dans
# le fichier /usr/lib/smail/config, ce routeur sera ignore.
# L'attribut transport est
ecras
e par la variable globale
# smart_transport.
smart_host:
driver=smarthost, # pilote sp
ecial
transport=uux; # d
elivre via UUCP par d
efaut
Le traitement du courrier pour les adresses locales est congure dans le chier direc-
tors. Il est constitue de la m^eme maniere que le chier routers, avec une liste d'entrees
qui denissent chaque directeur. Les directeurs ne delivrent pas de messages, ils ne
font qu'eectuer toutes les redirections qui sont possibles, par exemple par les alias,
le renvoi du courrier, etc.
Lorsqu'il delivre un message a une adresse locale, comme dugenou, smail passe le
nom de l'utilisateur successivement a tous les directeurs. Si l'un d'eux correspond,
soit il speciera un transport a utiliser pour delivrer le courrier (par exemple, vers la
bo^te aux lettres de l'utilisateur), soit il generera une nouvelle adresse (par exemple,
en evaluant un alias).
Pour des raisons de securite, les directeurs eectuent generalement un grand nombre
de tests pour verier que les chiers qu'ils ont a utiliser sont ables et integres. Les
adresses obtenues d'une maniere douteuse (par exemple, depuis un chier aliases qui a
des permissions d'ecriture pour tout le monde) sont notees comme non s^ures. Certains
pilotes de transport elimineront de telles adresses, celui qui delivre un message dans
un chier en fait partie.
En dehors de cela, smail associe aussi un utilisateur a chaque adresse. Toute ope-
ration de lecture ou d'ecriture est eectuee sous ce nom d'utilisateur. Pour delivrer
un message dans la bo^te aux lettres de dugenou, l'adresse sera bien s^ur associee a
l'utilisateur dugenou. D'autres adresses, comme celles obtenues a partir du chier
aliases, se voient associer d'autres utilisateurs, comme par exemple nobody.
Pour plus de details sur ce sujet, consultez la page de manuel de smail(8).
file=/usr/lib/aliases, # compatibilit
e sendmail par d
efaut
modemask=002, # ne doit pas pouvoir ^
etre
ecrit par tous
optional, # ignorer si le fichier n'existe pas
proto=lsearch, # c'est un fichier ASCII non tri
e
Apres avoir reussi a router ou rediriger un message, smail le passe au transport specie
par le routeur ou le directeur correspondant. Ces transports sont denis dans le chier
transports. La encore, les denitions sont composees d'un ensemble d'attributs globaux
et prives.
L'option la plus importante denie par chaque entree est le pilote qui gere ce transport,
par exemple le pilote pipe, qui appelle la commande speciee dans l'attribut cmd.
A c^ote de cela, un transport peut utiliser un certain nombre d'attributs globaux
qui eectuent diverses transformations sur l'en-t^ete, et eventuellement le corps du
message. L'attribut return path, par exemple, demandera au transport d'inserer un
champ return path dans l'en-t^ete du courrier. L'attribut unix from hack permet de
rajouter le caractere devant chaque ligne du message commencant par le mot From.
>
# local - d
elivre le courrier local aux utilisateurs
local: driver=appendfile, # rajoute le message au bout d'un fichier
return_path, # rajoute un champ Return-Path:
309
# pipe - d
elivre le courrier
a des commandes shell
pipe: driver=pipe, # envoie le message par tube
a un autre programme
return_path, # rajoute un champ Return-Path:
from, # met une ligne From_ d'enveloppe
unix_from_hack, # ins
ere > devant toute ligne From dans le corps
local; # utiliser le format local
# file - d
elivre le courrier dans des fichiers
file: driver=appendfile,
return_path, # rajoute un champ Return-Path:
from, # met une ligne From_ d'enveloppe
unix_from_hack, # ins
ere > devant toute ligne From dans le corps
local; # utiliser le format local
# uux - d
elivre le message
a la commande rmail du site UUCP distant.
uux: driver=pipe,
uucp, # utilise le style d'adressage UUCP
from, # met une ligne From_ d'enveloppe
max_addrs=5, # pas plus de 5 adresses par appel
max_chars=200; # pas plus de 200 caract
eres d'adresse
# demand - d
elivre le message
a la commande rmail du site UUCP distant,
# en appelant imm
ediatement.
demand: driver=pipe,
uucp, # utilise le style d'adressage UUCP
from, # met une ligne From_ d'enveloppe
max_addrs=5, # pas plus de 5 adresses par appel
max_chars=200; # pas plus de 200 caract
eres d'adresse
310 Annexe B. Exemples de chiers de conguration pour smail
file="/var/spool/smail/hbsmtp/$host",
user=root, # le fichier appartient a root
mode=0600, # lecture et ecriture seulement pour root
# smtp - d
elivre le courrier par SMTP sur TCP/IP
smtp: driver=tcpsmtp,
inet, # utilise le style d'adressage RFC 822
-max_addrs, -max_chars; # pas de limite sur le nombre des adresses
Annexe C
Licence Publique Generale
GNU
Vous trouverez ci-dessous la Licence Publique Generale GNU (GPL ou copyleft), qui
protege Linux. Elle est reproduite ici pour preciser le statut des droits d'auteurs de
Linux, qui a parfois donne lieu a certaines confusions ; Linux n'est pas un partagiciel et
n'est pas dans le domaine public. Les droits du noyau appartiennent a Linus Torvalds
depuis 1993, et le reste des programmes appartient a leurs auteurs respectifs. Ainsi,
Linux est protege, mais vous pouvez toutefois le redistribuer sous les termes de la
Licence Publique Generale (GPL) reproduite ici.
LICENCE PUBLIQUE GE NE RALE GNU
Version 2, Juin 1991
Copyright
c 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge,
MA 02139, USA. La copie et la distribution de copies verbatim de ce document est
autorisee, mais aucune modication n'est permise.
C.1 Preambule
Les licences d'utilisation de la plupart des programmes sont concues pour limiter ou
pour supprimer toute liberte de l'utilisateur. A l'inverse, la Licence Publique Generale
est destinee a vous garantir la liberte de partager et de modier les logiciels libres,
et de s'assurer que ces logiciels sont eectivement accessibles a tout utilisateur. Cette
Licence Publique Generale s'applique a la plupart des programmes de la Free Software
Foundation, ainsi qu'a tout autre programme dont l'auteur l'aura decide (d'autres
logiciels de la Free Software Foundation sont couverts pour leur part par la Licence
Publique Generale pour Bibliotheques GNU). Vous pouvez aussi utiliser les termes
de cette Licence pour vos propres programmes, si vous le desirez.
312 Annexe C. Licence Publique Generale GNU
Liberte des logiciels ne signie pas forcement gratuite ;. notre Licence est concue pour
vous assurer la liberte de distribuer des copies des programmes, gratuitement ou non,
de recevoir le code source ou de pouvoir l'obtenir, de modier les programmes ou d'en
utiliser des elements dans de nouveaux programmes libres, en sachant que vous y ^etes
autorises.
An de proteger vos droits, nous avons d^u introduire des restrictions interdisant a qui-
conque de vous refuser ces droits ou de vous demander d'y renoncer. Ces restrictions
vous imposenten retour certaines obligations si vous distribuez ou si vous modiez
des copies de programmes proteges par la Licence.
Ainsi, si vous distribuez des copies d'un tel programme, gratuitement ou non, vous
devez transmettre aux destinataires tous les droits que vous possedez ; vous devez vous
assurer que les destinataires recoivent le code source ou qu'ils peuvent se le procurer.
Vous devez leur remettre cette Licence an qu'eux aussi connaissent leurs droits.
Nous protegeons vos droits de deux facons : d'abord par le copyright du logiciel, ensuite
par la remise de cette Licence qui vous autorise legalement a copier, distribuer et/ou
modier le logiciel.
En outre, pour la protection de chaque auteur et pour la n^otre, nous voulons nous
assurer que chacun comprenne bien qu'il n'existe aucune garantie pour ce programme
libre. Si le logiciel est modie par quelqu'un d'autre et redistribue ensuite, nous vou-
lons que tous ceux qui recevront ce logiciel sachent qu'ils ne sont pas en presence de
l'original, an que les problemes introduits par d'autres personnes n'entachent pas la
reputation de l'auteur du logiciel original.
Enn, tout programme libre est sans cesse menace par des dep^ots de licences. Nous
voulons a tout prix eviter que des distributeurs puissent deposer des licences de logi-
ciels libres pour leur propre compte. Pour l'eviter, nous stipulons bien que tout dep^ot
eventuel de licence doit prevoir expressement un libre usage pour tous.
Les dispositions precises et les conditions pour la copie, la distribution et la modi-
cation de nos logiciels sont les suivantes :
Les commandes hypothetiques `g' et `c' doivent acher les parties appropriees de la
Licence Publique Generale GNU. Bien entendu, vous pouvez appeler les commandes
comme bon vous semble : options dans un menu, options accessibles par le clic d'une
souris, etc., tout depend de votre programme.
Si vous travaillez en tant que programmeur, vous devez aussi demander a votre em-
ployeur ou votre ecole, ou autres, de signer une decharge stipulant qu'il renonce aux
droits qu'il pourrait avoir sur le programme. Par exemple :
...(employeur, ecole...) declare par la presente ne pas revendiquer de droits
sur le programme (((nom du programme))) ecrit par ...(nom de l'auteur).
hsignature du responsablei, ...(date),
...(nom et qualite du responsable).
La Licence Publique Generale ne permet pas d'inclure votre programme dans des
logiciels detenteurs de droits. Si votre programme est une fonction de bibliotheque,
vous pouvez considerer qu'il est plus utile de le faire relever du droit des bibliotheques ;
si c'est ce que vous desirez, utilisez la Licence Generale de Bibliotheque GNU et non
celle-ci.
319
Annexe D
SAGE: La guilde des
administrateurs systeme
Si vous n'obtenez pas tout ce que vous cherchez en frequentant les groupes Usenet
comp.os.linux.* et en lisant les diverses documentations disponibles, il est peut-
^etre temps pour vous de rejoindre SAGE, la guilde des administrateurs systeme,
sponsorisee par Usenix. Le but principal de SAGE est de considerer l'administration
systeme comme un metier. SAGE amene les administrateurs reseau et systeme a par-
ticiper au developpement technique et professionnel, partager problemes et solutions,
communiquer avec les utilisateurs, decideurs, constructeurs, distributeurs, a propos
d'administration systeme.
Les realisations actuelles de SAGE comprennent :
{ En collaboration avec USENIX, les celebres conferences annuelles LISA sur l'ad-
ministration systeme.
{ La publication de (( Job Descriptions for System Administrators )), edite par
Tina Darmohray, le premier d'une serie de guides pratiques traitant de l'admi-
nistration systeme.
{ La creation d'un site archive, ftp.sage.usenix.org, pour les articles des confe-
rences et toute documentation relative a l'administration systeme.
{ La creation de groupes de travail dans des domaines importants pour les ad-
ministrateurs comme les emplois, publications, lois, distribution electronique de
l'information, education et standards.
Pour en savoir plus sur l'association USENIX et son groupe technique SAGE, telepho-
nez au 510-528-8649 aux USA, ou ecrivez a l'adresse electronique oce@usenix.org.
Pour recevoir des informations par courrier electronique, faites un nger sur l'adresse
320 Annexe D. SAGE: La guilde des administrateurs systeme
info@usenix.org. La cotisation annuelle pour ^etre membre de SAGE ne co^ute que
25 $ (vous devez aussi ^etre membre de USENIX). Les membres benecient d'abon-
nements gratuits a ;login: et a Computing Systems, revue trimestrielle reputee ; des
reductions sur les entrees aux conferences et symposiums, ainsi que sur certains achats,
publications ou autres services.
Glossaire 321
Glossaire
Dans le domaine des reseaux, il est toujours tres dicile de se souvenir de la signi-
cation de tous les termes et abreviations rencontres, surtout si l'on ne ma^trise pas
la langue anglaise. Voici une liste de ceux frequemment utilises dans ce guide, suivis
d'une courte explication.
Bibliographie commentee
Livres
[Tanen89] Andrew S. Tanenbaum: Computer Networks. Prentice-Hall Inter-
national, 1989. ISBN 0-13-166836-6 .
Cet ouvrage vous apportera une tres bonne connaissance du re-
seau. Utilisant le modele de reference OSI, il explique la concep-
tion de chaque couche, et les algorithmes pouvant ^etre mis en
jeu. Pour chaque couche, les implementations de plusieurs reseaux
(dont ARPAnet) sont comparees.
Le seul defaut de ce livre est l'abondance des abreviations, qui
rendent parfois sa lecture dicile. Mais c'est probablement un
inconvenient inherent au sujet traite.
[AlbitzLiu92] Paul Albitz et Cricket Liu: DNS and BIND. O'Reilly and Asso-
ciates, 1992. ISBN 1-56592-010-4.
Ce livre sera tres utile pour tous ceux qui ont a gerer un serveur
de noms. Il explique tout le detail du fonctionnement du DNS et
donne des exemples qui rendent comprehensibles les options de
330 Livres
BIND les plus obscures. Sa lecture est agreable et il pourra vous
apprendre beaucoup.
[NFS and NIS] Hal Stern: Managing NFS and NIS. O'Reilly and Associates, 1992.
ISBN 0-937175-75-7.
C'est le compagnon du livre sur TCP/IP de Craig Hunt. Il couvre
en detail l'utilisation de NIS (Network Information System) et
NFS (Network File System) y compris la conguration de l'auto-
monteur et PC/NFS.
[NIS+] Rick Ramsey: All about Administering NIS+. Prentice Hall, 1993.
ISBN 0-13-068800-2.
[Spaf93] Gene Spaord et Simson Garnkel: Practical UNIX Security. O'Reilly
and Associates, 1992. ISBN 0-937175-72-2.
C'est un livre que toute personne ayant a gerer un systeme sur
un reseau se doit de posseder. Il traite de tout ce qui concerne
la securite, tant au point de vue logiciel que materiel. Bien que
vous deviez vous eorcer de securiser toutes les parties de votre
systeme, les explications sur la securite des reseaux constituent,
dans notre contexte, la partie la plus importante. En dehors des
programmes classiques comme telnet, rlogin, etc., NFS et NIS,
il aborde egalement Kerberos, Secure RPC, et l'usage des portes
coupe-feu (rewalls) permettant de proteger votre reseau de toute
attaque en provenance d'Internet.
[WInternet] Ed Krol: The Whole Internet User's Guide and Catalog, 2nd Ed.
O'Reilly and Associates, 1994.
Un guide sur tous les services de l'Internet, comprenant toutes
les instructions sur leur utilisation et une liste des sites les plus
connus.
Les (( HOWTO ))
Voici un extrait du document (( HOWTO-INDEX )), realise par Matt Welsh.
Les RFC
Voici la liste des RFC que nous avons mentionnes tout au long de ce livre. Tous
sont disponibles par FTP anonyme sur nic.ddn.mil, ftp.uu.net, et de nombreux
autres sites de par le monde. Pour obtenir un RFC par courrier electronique, en-
voyez un message a l'adresse service@nic.ddn.mil, en mettant comme sujet send
RFC-num ero.TXT.
rfc-1597 Address Allocation for Private Internets. Ce RFC liste les adresses IP
que les reseaux prives peuvent librement utiliser sans qu'ils aient
besoin d'^etre enregistres aupres de l'autorite Internet competente
(IANA), et presente les avantages et inconvenients de cette solution.
rfc-1340 Assigned Numbers, Postel et Reynolds. Ce RFC liste et denit les
dierents numeros utilises dans divers protocoles, comme les numeros
de ports standard que les serveurs TCP et UDP ecoutent, et les
protocoles utilises dans les en-t^etes des datagrammes IP.
rfc-1144 Compressing TCP/IP headers for low-speed serial links, Van Jacob-
son. Ce document decrit l'algorithme utilise pour compresser les en-
t^etes TCP/IP en CSLIP et PPP. Un document a lire !
rfc-1033 Domain Administrators Operations Guide, Lottor, M. Avec ses deux
compagnons RFC 1034 et RFC 1035, il constitue la reference sur le
DNS.
rfc-1034 Domain Names - Concepts and Facilities, Mockapetris, P.V. Un com-
plement au RFC 1033.
rfc-1035 Domain names - Implementation and Specication, Mockapetris, P.V.
Un complement au RFC 1033.
rfc-974 Mail Routing and the Domain System, Partridge, C. Ce RFC decrit
le routage du courrier sur l'Internet. A lire pour tout savoir sur les
336 Les RFC
enregistrements MX...
rfc-1548 The Point-to-Point Protocol (PPP), W.A. Simpson. Standard PPP,
le protocole de transport de datagrammes sur les liaisons point-a-
point.
rfc-977 Network News Transfer Protocol, Kantor, B., and Lapsley, P. La
denition du protocole NNTP, couramment utilise pour le transport
des News Usenet sur l'Internet.
rfc-1094 NFS: Network File System Protocol specication, Nowicki, B. Spe-
cications res protocoles NFS et mount (version 2).
rfc-1055 Nonstandard for Transmission of IP Datagrams over Serial Lines:
SLIP, Romkey, J.L. Decrit SLIP, le protocole Internet pour liaisons
series.
rfc-1057 RPC: Remote Procedure Call Protocol Specication: Version 2, Sun
Microsystems, Inc. Specications de l'encodage utilise pour les RPC
(appels de procedures distantes), utilisees entre autres pour NFS et
NIS.
rfc-1058 Routing Information Protocol, Hedrick, C.L. Description du proto-
cole RIP, qui est destine a l'echange dynamique d'informations de
routages sur les reseaux locaux ou de moyenne importance.
rfc-1535 A Security Problem and Proposed Correction with Widely Deployed
DNS Software, E. Gavron. Ce RFC decrit un probleme de securite
avec la liste de recherche par defaut utilisee par d'anciennes versions
de la bibliotheque resolver.
rfc-821 Simple Mail Transfer Protocol, Postel, J.B. Description du protocole
SMTP, destine au transport du courrier electronique sur TCP/IP.
rfc-1036 Standard for the Interchange of USENET messages, Adams, R., and
Horton, M.R. Decrit le format des messages Usenet, et la facon dont
ils sont echanges sur l'Internet et sur les reseaux UUCP. Une revision
de ce RFC, qui sera beaucoup plus precise et moins tolerante vis-a-
vis des mauvaises implementations constatees sur certains logiciels
applicatifs, est attendue d'un moment a l'autre.
rfc-822 Standard for the Format of ARPA Internet text messages, Crocker,
D. C'est la reference absolue en ce qui concerne le format du courrier
electronique. Tout le monde le conna^t, peu l'ont vraiment lu...
rfc-968 Twas the Night Before Start-up, Cerf, V. La veille du jour ou tout a
commence. Qui a dit que les heros du reseau resteront inconnus ?
Index
|A| surnoms cartes NIS, 145
table de routage, 78
A (enregistrement DNS), 94
acces table de routage IP, 71
autorisation, 105, 112, 164 tables ARP, 80
chiers distants, 162 alias
NNTP, 291, 293 courrier, 233
PPP, 124 et C News, 272
restriction, 16, 126, 134, 165, 291, nom de machine, 34, 94
293 alias, 233
UUCP, 188{194 Allman, Eric, 203
adresse amd, 166
bang, 208, 210 appel de procedure distante, voir RPC
broadcast, 21 ARP, 21{22
choix (IP), 62 acher les tables, 80
courrier, 208{209 mise en service, 77
de diusion, 21, 69, 76 proxy, 73, 81, 121
de routage, 208 ARPANET, 5
enregistrement DNS, 94 Assembleur de paquets/desassembleur,
Ethernet, 7 8
Ethernet et IP, 10 assignation des adresses IP, 62
hybride, 208 atteindre un h^ote, 68, 70
IP, 10 authentication
loopback, 21 sous NNTP, 293
nom de machine UUCP, 178 sous PPP, 113, 124{128
negociation sous PPP, 115, 120, sous UUCP, 192
126 authoritative name server, 34, 36
resolution, 21 auto-IRQ, 50
route-addr, 208 automonteur, 166
trouver le nom d'h^ote, 36 AX.25, 8, 47
adresse de diusion, 76
adresses IP privees, 62 |B|
achage Barber, Stan, 290
conguration des interfaces, 75 batch, voir lots
conguration UUCP, 179 baud, 55
connexions actives, 79 BBS, 53
statistiques sur interface, 79 Becker, Donald, 47
337
338 INDEX
Berkeley Internet Name Domain, 83 cache (option BIND), 91
BIND, 83, 88{100 caracteres nationaux dans elm, 216
Biro, Ross, 13 cartes, Usenet, 211, 214
bit par seconde, 55 CHAP, 113, 124, 126{127
biere virtuelle, 61 chargen, 132
BNC, 6 chat, 117{119
BNU, voir UUCP, HDB choix
bo^te aux lettres, 232 adresses IP, 62
BOOTP, 22 cartes NIS, 151
bo^te aux lettres domaine NIS, 146
montage par NFS, 221 nom de machine UUCP, 178
BSMTP, 207 clients diskless, 22
CNAME (enregistrement DNS), 94, 95
|C| coaxial, 6
collision, Ethernet, 7
C News, 261, 267{288
active (chier), 267, 270{271, 275{ Collyer, Geo, 261
276 communication, programmes, 53
alias des noms de machine, 272 compression d'en-t^etes Van Jacobson,
archivage, 279 102, 114
compression des lots, 278 compression de paquets TCP/IP, 102,
creation conguration initiale, 270 114
echange de news, 272, 274 conguration
envoi de News, 274, 276{279 adresses IP, 62
exclusion de sites, 272 C News, 268{288
expiration, 279{281 C News sur un reseau, 286
chiers de trace, 283 courrier par reseau local, 221{224
groupes moderes, 282 courrier UUCP, 220
history (chier), 267, 281 dip, 104
ihave/sendme, 273, 278 DNS sur SLIP/PPP, 101
limiter les groupes, 272, 282 domaine NIS, 146, 150
liste des groupes, 275, 281 domaine par defaut, 86
lots, 268, 273, 274, 276{279 elm, 215{217
mise a jour chier active, 284 equipement reseau, 39{52
newsmaster, 271 Ethernet, 43, 47{51, 69
parametres des lots, 277{279 interface loopback, 67
relaynews, 267 interfaces reseau, 66
reseau, 286 IPX, 46
rnews, 274 lecteur de News, 295
reception des news, 267{268, 271 les commandes en r, 139{141
repertoire de spoule, 267 News Usenet, 268{288
support de NNTP, 273, 293 NFS, 44
sys (chier), 269, 271{275 NIS, 143{157
togo (chier), 274 NNTP, 289{294
usenet, 271 nom de domaine, 62
UUCP, 268, 278 nom de machine, 61
INDEX 339