Original in fr Frédéric Raynal
Le Network Information Service (NIS) fut initialement crée par Sun et connu sous le nom de Sun Yellow Pages (plus communément et simplement les Yellow Pages ou YP). Toutefois, ce terme est une marque déposée par British Telecom et ne peut, de ce fait, être utiliser sans les droits adéquates. Ces Yellow Pages font référence aux mêmes que celles qui nous connaissons ici en France.
Les serveurs NIS maintiennent des copies de fichiers de configuration communs à plusieurs machines d'un réseau dans une base de données. Les clients NIS adressent alors des requêtes aux serveurs plutôt que d'utiliser leurs propres fichiers de configuration.
Mettons nous dans la situation d'un utilisateur qui souhaite changer son mot de passe sur un réseau. Supposons tout d'abord que, sur ce réseau les YPs ne soient pas installées. L'utilisateur devra aller sur tous les postes du réseau pour changer son mot de passe. En revanche, grâce aux YPs, il pourra se contenter de changer son mot de passe d'une machine quelconque sur laquelle un client NIS est lancé, le nouveau mot de passe sera ensuite transféré au serveur qui l'inscrira dans sa base de données. Ensuite, quand cet utilisateur voudra se connecter à partir d'une machine du réseau (sur laquelle il existe un client NIS bien entendu ;-), le mot de passe sera comparé à celui contenu dans la base de données du serveur.
Notons qu'il existe différentes variantes des YPs mais cet article étant une introduction, nous verrons seulement les grands principes de fonctionnement sans rentrer dans les détails que nous traiterons ultérieurement.
La glibc 2.x (libc6) supporte l'utilisation de NSS (Name Switch Service) qui détermine l'ordre dans lequel les informations doivent être recherchées (voir le fichier /etc/nsswitch.conf). Elle gère les maps aliases, ethers, group, hosts, netgroups, networks, protocols, publickey, passwd, rpc, services et shadow.Un réseau va contenir une machine qui fera office de serveur NIS pour un domaine. Ce domaine correspond, en gros, au nom de la base de données que va gérer le serveur. Il sert de clef aux clients NIS pour qu'ils puissent trouver, sur le serveur NIS, les informations désirées. Ce nom de domaine n'a strictement rien à voir avec le nom de domaine DNS. Plusieurs serveurs NIS peuvent être installés sur un même réseau. Ils pourront chacun gérer un domaine (au sens de NIS) différent, ou bien le même domaine (auquel cas on parlera d'un serveur maître et de serveurs esclaves).
Les serveurs esclaves ne contiennent qu'une copie de la base de données du serveur maître. Ces serveurs servent à suppléer, auprès des clients, le serveur maître lorsque celui-ci est trop long à répondre ou qu'il tombe en panne.
Les serveurs esclaves sont avertis de tout changement dans la base de données par le programme yppush et ils corrigeront alors leur base de données pour qu'elle coïncide exactement avec celle du serveur maître.
Les clients, de leur côté, ne nécessitent aucun "entretien" car ils sont en contact permanent avec le serveur NIS pour trouver les informations dans sa base de données.
Les bases de données YP sont au format GDBM, issu du format ASCII. Elles sont générées lors de l'installation du serveur par le programme makedbm.
Ces maps (cartes en Anglais - les bases de données) établissent des correspondances entre une clé et sa valeur. Toutes les maps des YPs sont construites sur ce modèle. Du point de vue du serveur, le contenu est sans aucune signification (enfin, à quelques exceptions portant sur le serveur principal ou des dates). Ceci signifie que, pour le serveur, une map de mots de passe ou de groupes ou ... ne correspond en fait qu'à une série de paires (clé, valeur). Seul le client YP sait comment parcourir ces maps en quête de l'information souhaitée.
Cette représentation des données pose un problème. Comme le serveur ne sait pas "lire" la valeur d'une clé pour y chercher une seconde clé, on est alors obligé de dupliquer les données. Par exemple, dans le cas des mots de passe, on peut vouloir les chercher soit par nom de login, soit par "numéro d'utilisateur" (user ID ou UID, identifiant propre à chaque utilisateur du réseau). Ceci se traduit par une redondance d'information, visible par la présence des fichiers passwd.byname et passwd.byuid . On crée donc une nouvelle map pour chaque clé. Ceci signifie que les données doivent être transmises deux fois lors d'un changement.
Trois informations sont nécessaires pour qu'un client trouve ce qu'il cherche dans la base de données :
Ceci offre une très grande souplesse d'utilisation puisque l'installation d'un nouveau domaine se résume à créer le répertoire /var/yp/nouveau_domaine, y copier le Makefile et l'exécuter avec les options souhaitées.
Le fonctionnement des YPs repose essentiellement sur les Remote Procedure Calls (RPCs) qui permettent les requêtes entre le serveur et les clients.
Le RPC portmapper (portmap) est un programme qui convertit les numéros de programmes RPC en numéros de ports. Quand un serveur RPC est lancé, il va préciser à portmap quel port il utilisera et les numéros de programmes RPC qu'il gère. Quand un client souhaite envoyer une requête RPC vers un numéro de programme donné, il contacte d'abord le serveur portmap pour obtenir le numéro de port sur lequel tourne le programme souhaité. Ensuite, il adresse les paquets RPC au port correspondant. Le modèle client/serveur des YPs n'est qu'un cas particulier de client/serveur RPC.
Le fichier yp_prot.h contient les structures et prototypes des 11 fonctions définissant le protocole RPC entre les clients et le serveur des YPs.