Ce document constitue la version française du NIS-HOWTO, adaptation réalisée par Frédéric Veynachter (frederic.veynachter@hol.fr), le 26 juillet 1998, fortement inspirée de la traduction précédemment réalisée par Éric Dumas (dumas@Linux.EU.Org), le 19 Novembre 1997.
Vous pouvez consulter ce document sur les sites suivants :
ainsi que leurs nombreux miroirs.Pour plus de renseignements concernant la traduction en langue française des documents du LDP (Linux Documentation Project), consultez le document "Liste-des-HOWTO" que l'on trouve aux mêmex endroits.
Les différents sites conseillés dans ce document possèdent sûrement des miroirs plus proches de chez vous, comme par exemple ftp.lip6.fr, ftp.loria.fr ... utilisez-les !
Les machines sous Linux sont de plus en plus souvent installées et connectées dans des réseaux informatiques.Pour simplifier l'administration système, la plupart des réseaux (surtout ceux qui sont fondés sur du matériel Sun) fonctionnent avec le Network Information Service. Les machines Linux peuvent tirer de nombreux avantages des services NIS existant, ou fournir elles-mêmes ces services. Elles peuvent également se comporter comme des clients NIS+, mais il s'agit encore d'une version béta.
Ce document tente de répondre aux questions concernant la mise en place et la configuration de NIS(YP) et de NIS+ sur votre machine Linux. N'oubliez pas de lire la section concernant le Portmapper RPC.
Le NIS-Howto est rédigé et maintenu par:
Thorsten Kukuk,
kukuk@vt.uni-paderborn.de
La version initiale de ce document a été réalisée par:
Andrea Dell'Amico <adellam@ZIA.ms.it> Mitchum DSouza <Mitch.DSouza@NetComm.IE> Erwin Embsen <erwin@nioz.nl> Peter Eriksson <peter@ifm.liu.se>
que nous tenons à remercier.
Vous pourrez toujours trouver la dernière version de ce document sur le web via l'URL http://sunsite.unc.edu/mdw/HOWTO/NIS-HOWTO.html.
Les nouvelles versions de ce document seront également présentes sur différents sites ftp et web consacrés à Linux, y compris sur la page principale du LDP (Linux Documentation Project).
Des liens vers les traductions de ce document peuvent être trouvés à l'adresse http://www-vt.uni-paderborn.de/~kukuk/linux/nis-howto.html.
Même si ce document rassemble le maximum de données selon notre connaissance, il peut contenir, et contient sans doute, certaines erreurs. Nous vous demandons de lire attentivement tous les fichiers README qui sont livrés avec les outils décrits dans ce document, pour avoir plus de détails et une information plus précise. Nous essayerons, dans la mesure du possible, d'éviter que des erreurs se glissent ans ce document.
Si vous avez des questions ou des commentaires à propos de ce document, n'hésitez pas à envoyer un courrier électronique à kukuk@vt.uni-paderborn.de. J'accepte volontiers toutes les suggestions ou critiques. Si vous trouvez une anomalie ou une erreur dans ce document, merci de me le faire savoir, pour que je puisse la corriger dans la prochaine version.
Merci de ne pas m'envoyer de questions concernant des problèmes spécifiques à une distribution de Linux. Je ne les connais pas toutes. J'essayerai néanmoins d'intégrer toute solution qui me sera envoyée.
Nous voudrions remercier toutes les personnes qui ont contribué (directement ou indirectement) à ce document. Par ordre alphabétique :
Byron A Jeff <byron@cc.gatech.edu> Miquel van Smoorenburg <miquels@cistron.nl>
Theo de Raadt <deraadt@theos.com> est à l'origine du code yp-clients. Swen Thuemmler <swen@uni-paderborn.de> a porté ce code pour Linux et il a également porté le code yp-routines pour la libc (toujours fondé sur le travail de Theo). Thorsten Kukuk a totalement ré-écrit toutes les routines NIS(YP) et NIS+ pour la GNU libc 2.x.
Dans ce document, bon nombre d'acronymes sont employés. Voici la liste des plus utilisés, avec une brève explication.
DataBase Management (Gestion de la base de données): bibliothèque de fonctions pour maintenir les clefs et le contenu de la base de données.
Dynamically Linked Library (Bibliothèque liée dynamiquement): bibliothèque de fonctions chargées dynamiquement à l'exécution.
Nom du domaine : nom "clef" utilisé par les clients NIS pour qu'ils puissent trouver un serveur NIS convenable qui gère la clef du domaine. Notez que cela n'a rien à voir avec le "domaine" DNS (nom de la machine) des machines.
File Transfer Protocol (Protocole de transfert de fichiers) : protocole utilisé pour transférer des fichiers entre deux ordinateurs.
Name services library : bibliothèque d'appels systèmes (tels que
getpwnam, getservbyname, ...
) sur les systèmes Unix
SVR4. La GNU libc utilise cette bibliothèque pour les fonctions NIS
(YP) et NIS+.
Bibliothèque de fonctions de manipulation de sockets
socket, bind, listen, ...
sur les systèmes SVR4.
Network Information Service (Service d'information du réseau): service qui permet à certaines informations d'être connues par toutes les machines disponibles sur le réseau. Ce service est géré dans la bibliothèque standard de la libc Linux. Il est considéré par la suite comme étant le "NIS traditionnel".
Network Information Service (Plus...) : en gros, version de NIS améliorée. NIS+ a été conçu par Sun Microsystems Inc. pour remplacer NIS, avec un niveau de sécurité supérieur et une meilleure gestion pour les grosses installations.
Il s'agit du nom d'un projet de développement et de standardisation pour NIS+, YP et Switch. Il est dirigé par Peter Eriksson (<peter@ifm.liu.se>). Il contient entre autres choses une réimplémentation complète du code de NIS (c'est-à-dire YP) qui utilise les fonctionnalités Name Services Switch de la bibliothèque NYS.
Name Service Switch (littéralement, commutation des noms de service): le fichier /etc/nsswitch.conf détermine l'ordre de recherche d'informations en fonction des services demandés.
Remote Procedure Call (Appel de procédure distante): les routines RPC permettent aux programmes C d'appeler d'autres machines à travers le réseau. Lorsque des personnes parlent de RPC, elles parlent souvent en fait de la version Sun RPC.
Yellow Pages(tm) : marque déposée par British Telecom. (les pages jaunes... comme les nôtres !).
Transmission Control Protocol/Internet Protocol : protocole de communication le plus fréquemment utilisé sur les machines Unix.
Les quatre lignes ci-dessous sont une citation du manuel d'administration réseau de Sun(TM) System.
"NIS was formerly known as Sun Yellow Pages (YP) but the name Yellow Pages(tm) is a registered trademark in the United Kingdom of British Telecom plc and may not be used without permission." "NIS etait formellement connu sous le nom de Yellow Pages (YP) (Pages Jaunes) mais le nom Yellow Pages(tm) est une marque enregistree au Royaume Uni par British Telecom et ne peut etre utilisee sans autorisation."
NIS est l'abréviation pour Network Information Service (Service d'Information Réseau). Son but est de fournir des informations, qui doivent être connues sur l'ensemble du réseau, à toutes les machines connectées. Les informations susceptibles d'être distribuées par NIS sont:
Par exemple, si votre mot de passe et les informations s'y rattachant sont enregistrés dans la base de données NIS, vous pourrez vous loguer sur toutes les machines du réseau sur lesquelles un client NIS est lancé.
Sun est une marque déposée de Sun Microsystems Inc, brevetée par SunSoft, Inc.
Le choix entre NIS et NIS+ est facile à faire : utilisez NIS tant que vous n'avez pas besoin d'utiliser NIS+ ou si vous avez des besoins de sécurité importants. NIS+ est bien plus problématique à administrer (c'est plutôt facile à manipuler du côté du client, mais en ce qui concerne le côté serveur, c'est une horreur). Un autre problème est que le support de NIS+ pour Linux est encore en cours de développement : vous devrez avoir la toute dernière version de glibc ou attendre la sortie de glibc 2.1. Il existe un portage du NIS+ glibc pour libc5, qui consiste à installer une libc de remplacement.
Le choix entre "NIS traditionnel" ou le code NIS dans la bibliothèque NYS est un choix entre paresse et maturité d'un côté, flexibilité et amour de l'aventure de l'autre.
Le code "NIS traditionnel" se trouve dans la bibliothèque C standard, existe depuis fort longtemps, et souffre parfois de son age et de son léger manque de souplesse.
Le code NIS de la bibliothèque NYS vous oblige à recompiler la bibliothèque libc pour y inclure le code NYS (à moins que vous ne trouviez une version de libc précompilée chez quelqu'un qui l'a déjà fait).
Une autre différence est que le code "NIS traditionnel" gère en partie les groupes de réseaux NIS (Netgroups), alors que le code NYS ne le fait pas. D'un autre côté, le code NYS vous permet d'utiliser les mots de passe Shadow d'une manière transparente. Le code "NIS traditionnel" ne permet pas d'utiliser les mots de passe Shadow sur NIS.
Vous pouvez cependant oublier tout ça si vous utilisez la nouvelle bibliothèque GNU C 2.x (alias libc6). Elle comporte un vrai support de NSS (Name Switch Service), ce qui la rend vraiment souple, et elle est capable de gérer les "maps" NIS/NIS+ suivantes : aliases, ethers, group, hosts, netgroups, networks, protocols, publickey, passwd, rpc, services et shadow. La bibliothèque GNU C ne pose aucun problème avec les mots de passe Shadow sur NIS.
A l'intérieur d'un réseau, il doit y avoir au moins une machine faisant office de serveur NIS. Vous pouvez avoir plusieurs serveurs NIS, chacun gérant plusieurs "domaines" NIS, ou bien vous pouvez avoir des serveurs NIS coopératifs. Dans ce cas, l'un d'entre eux est dit serveur NIS maître, les autres étant serveurs NIS esclaves. Vous pouvez également mélanger les deux possibilités.
Les serveurs esclaves n'ont qu'une copie de la base de données et la reçoivent du serveur NIS maître lorsque des changement sont effectués dans la base de données. En fonction du nombre de machine et de la fiabilité de votre réseau, vous pouvez décider d'installer un ou plusieurs serveurs esclaves. Lorsqu'un serveur NIS tombe en panne ou bien s'il est trop long pour répondre aux requêtes, un client NIS connecté à ce serveur va alors essayer d'en trouver un en état de marche.
Les bases de données NIS sont au format DBM, un dérivé des bases
de données ASCII. Par exemple, les fichiers
/etc/passwd
et /etc/group
peuvent être
directement convertis dans le format DBM en utilisant un programme
de conversion ASCII-to-DBM (makedbm
est
inclus dans les programmes du serveur). Le serveur NIS maître
devrait avoir les deux types : la base ASCII et la base DBM.
Les serveurs esclaves seront avertis de tout changement dans les
tables NIS (grâce au programme yppush
), et
effectueront automatiquement les changements nécessaires pour
synchroniser leurs bases de données. Les clients NIS n'ont pas
besoin d'effectuer cette opération puisqu'ils communiquent tout le
temps avec le serveur NIS pour lire les informations rangées dans
les bases de données DBM.
L'auteur des clients YP pour Linux nous a informé que la
nouvelle version de ypbind
(située dans l'archive
ypbind-3.3.tar.gz
) permet d'indiquer le serveur NIS à
contacter dans un fichier de configuration, ce qui évite
d'effectuer un broadcast (ce qui n'est pas sécurisé car
n'importe qui peut installer un serveur NIS et peut donc répondre
aux requêtes...).
NIS+ est une nouvelle version du service d'information réseau de Sun. La différence la plus notable entre NIS et NIS+ est que NIS+ est capable de gérer des données chiffrées ainsi que l'authentification via les RPC sécurisés.
Le modèle de nommage de NIS+ est basé sur une structure arborescente. Chaque noeud de l'arbre correspond à un objet NIS+, à partir duquel nous avons six types : directory, entry, group, link, table et private (répertoire, entrée, groupe, lien, table et privé).
Le répertoire NIS+ qui constitue la racine de l'espace de nommage NIS+ est appelé le répertoire racine. Il existe deux répertoires spéciaux NIS+ : org_dir et groups_dir. Le premier regroupe toutes les tables d'administration, telles que passwd, hosts, et mail_aliases. Le second répertoire contient les objets groupe NIS+ qui sont utilisés pour contrôler les accès. L'ensemble des répertoires org_dir, groups_dir et leurs parents sont considérés comme étant un domaine NIS+.
Pour lancer n'importe lequel des programmes mentionnés
ci-dessous, vous aurez besoin de lancer le programme
/usr/sbin/rpc.portmap
. Certaines distributions de
Linux ont déjà dans le code du script
/etc/rc.d/rc.inet2
ce qui est nécessaire pour lancer
ce démon. Tout ce que vous avez à faire, c'est de décommenter ce
qui est nécessaire puis à rebooter votre machine pour l'activer.
Lisez la documentation de votre distribution pour plus de
détails.
Le RPC portmapper (portmap(8)) est un serveur qui convertit les
numéros des programmes RPC en numéros de ports pour le protocole
TCP/IP (ou UDP/IP). Il doit être lancé dans un certain ordre pour
réaliser les appels RPC (ce que fait le programme client NIS/NIS+)
vers les serveurs (comme par exemple un serveur NIS/NIS+) sur cette
machine. Lorsque le serveur RPC est lancé, il va indiquer au démon
portmap
quel numéro de port il scrute, et quels sont
les numéros de programmes RPC avec lesquels il est prêt à
travailler. Lorsque le client souhaite réaliser un appel RPC à
certain numéro de programme, il contacte dans un premier temps
portmap
sur le serveur de la machine pour déterminer
le numéro de port où il doit alors envoyer les paquets RPC.
En principe, les serveurs RPC standards sont lancés par
inetd
(manuel inetd(8)), donc portmap
doit être lancé avant qu'inetd
ne le soit.
Pour les RPC sécurisés, le portmapper a besoin des services
d'horloge. Assurez-vous qu'ils sont activés dans le fichier
/etc/inetd.conf
sur toutes les machines :
# # Time service is used for clock syncronization. # time stream tcp nowait root internal time dgram udp wait root internal
IMPORTANT : n'oubliez pas de relancer inetd après toute modification de ce fichier !
Pour répondre à cette question, nous pouvons considérer deux cas :
Dans le premier cas, vous n'aurez besoin que des programmes
clients (ypbind, ypwhich, ypcat, yppoll, ypmatch
). Le
programme le plus important est ypbind
. Ce démon doit
toujours être lancé, c'est-à-dire qu'il doit toujours apparaître
dans la liste des processus. Comme c'est un démon, il doit être
lancé au démarrage de votre machine dans le fichier de démarrage
(/etc/rc.local, /etc/init.d/nis,
/etc/rc.d/init.d/ypbind
). Dès que ypbind
fonctionne, votre système devient un client NIS.
Dans le second cas, vous n'avez pas de serveur NIS, donc vous
aurez également besoin d'un programme serveur NIS (généralement
ypserv
). La section 10 ( 10 Configurer un serveur
NIS ) décrit comment configurer un serveur NIS sur votre
machine Linux en utilisant la version ypserv
implémentée par Peter Eriksson et Thorsten Kukuk. On peut remarquer
qu'à partir de la version 0.14 de cette implémentation, le concept
de maître-esclave dont nous avons parlé dans la section 5.1 est
géré.
Il existe également un autre serveur NIS en libre distribution,
appelé yps
, écrit par Tobias Reber en Allemagne, et
qui gére le concept de maître-esclave mais qui a d'autres
limitations et qui n'est plus maintenu.
La bibliothèque /usr/lib/libc.a
(version 4.4.2 et
supérieure) ou la bibliothèque dynamique partagée
/lib/libc.so.x
contient tous les appels systèmes
correspondants pour compiler sans problème les programmes clients
et serveurs NIS. Pour la glibc 2.x, vous aurez également besoin de
/lib/libnsl.so.1
.
Certaines personnes ont signalé que NIS ne fonctionne qu'avec
/usr/lib/libc.a
version 4.5.21 et supérieure, donc,
pour plus de sûreté, évitez d'utiliser des bibliothèques plus
anciennes. Les clients NIS peuvent être récupérés sur les sites
suivants :
Site Repertoire Nom du fichier ftp.kernel.org /pub/linux/utils/net/NIS yp-tools-2.0.tar.gz ftp.kernel.org /pub/linux/utils/net/NIS ypbind-mt-1.2.tar.gz ftp.kernel.org /pub/linux/utils/net/NIS ypbind-3.3.tar.gz sunsite.unc.edu /pub/Linux/system/Network/admin yp-clients-2.2.tar.gz ftp.uni-paderborn.de /linux/local/yp yp-clients-2.2.tar.gz ftp.uni-paderborn.de /linux/local/yp ypbind-3.3.tar.gz
Une fois que vous aurez récupéré ces programmes, suivez les
instructions qui sont livrées avec. yp-clients 2.2
doit être utilisé avec les bibliothèques libc4
et
libc5
jusqu'à la version 5.4.20. Les libc
5.4.21
et glibc 2.x
nécessitent yp-tools
1.4.1
. La nouvelle version yp-tools 2.0
fonctionnera avec toutes les libc Linux. Vous ne devriez pas
utiliser les libc 5.4.21 - 5.4.35
car elles présentent
de nombreux défauts. Utilisez la libc 5.4.36
ou une
version supérieure, sinon, la plupart des programmes de YP ne
fonctionneront pas. ypbind 3.3
fonctionnera également
avec toutes les bibliothèques. Vous ne devriez jamais utiliser la
version ypbind
qui est fournie dans yp-clients
2.2
.
Nous supposons que vous avez compilé correctement les programmes
et que vous êtes prêt à les installer. L'endroit où installer le
démon ypbind
est le répertoire /usr/sbin
.
Certains peuvent vous dire que vous n'avez pas besoin de
ypbind
sur un système qui utilise NYS. C'est faux :
ypwhich
et ypcat
en ont besoin.
Vous devez réaliser cette opération en tant que
super-utilisateur (i.e. "root"), bien sûr. Les autres binaires
(ypwhich, ypcat, yppoll, ypmatch
) doivent être placés
dans un répertoire accessible à tous les utilisateurs, normalement
c'est le répertoire /usr/bin
qui est utilisé.
Le programme ypbind a besoin d'un fichier de configuration
/etc/yp.conf
. Vous pouvez y indiquer, en dur, le nom
du serveur NIS. Pour plus d'informations, consultez la page de
manuel de ypbind(8)
. Vous aurez également besoin de ce
ficher pour NYS. Un court exemple :
ypserver voyager ypserver ds9
Si le système est capable de résoudre les noms de machine sans NIS, vous pouvez utiliser le nom de la machine. Dans le cas contraire, utilisez l'adresse IP.
Il est souhaitable de tester ypbind avant de l'inclure dans les
fichiers de /etc/rc.d/
. Pour tester
ypbind
faites ceci :
où/bin/domainname-yp nis.domain
nis.domain
doit être une chaîne, qui n'a
normalement RIEN A VOIR avec le nom de votre machine ! La raison
est que cela rend plus difficile le travail des pirates pour
trouver les mots de passe de la base de données du serveurs NIS. Si
vous ne connaissez pas le nom du domaine de votre réseau, contactez
votre administrateur système./usr/sbin/rpc.portmap
s'il ne tourne pas
déjà./var/yp
s'il n'existe
pas./usr/sbin/ypbind
rpcinfo -p localhost
pour
vérifier qu'ypbind
est capable d'enregistrer ses
services dans portmapper. La commande rpcinfo
devrait
produire un message de ce style :
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100007 2 udp 637 ypbind 100007 2 tcp 639 ypbind 300019 1 udp 660
rpcinfo -u localhost
ypbind
. Cette commande devrait alors produire :
program 100007 version 2 ready and waiting
Vous devriez alors être capable d'utiliser les programmes
clients tels que ypcat
, etc. Par exemple, ypcat
passwd
vous donne la liste des mots de passe (chiffrés !) de
la base de données NIS.
IMPORTANT : si vous avez évité la procédure de test, vérifiez que vous avez positionné le nom de votre domaine, et créé le répertoire :
/var/yp
Ce répertoire DOIT exister pour qu'ypbind
soit
correctement lancé.
Pour vérifier que le nom de domaine est correctement configurer,
utilisez le programme /bin/ypdomainname
, fourni avec
yp-tools 2.0. Il utilise la fonction
yp_get_default_domain, qui est plus restrictive. Elle
n'autorise pas, par exemple, le nom de domaine "(none)", qui est
celui par défaut avec Linux et qui crée de nombreux problèmes.
Si le test a fonctionné, vous pouvez alors modifier les fichiers
/etc/rc.d
sur votre système pour
qu'ypbind
soit lancé lors de l'amorçage de la machine
et pour que votre machine se comporte comme un client NIS.
Assurez-vous que le nom de domaine soit configuré lors de
l'amorçage.
Normalement, tout est prêt. Relancez votre machine et observez les messages pour voir si ypbind est lancé.
Pour la recherche de noms de machines, vous devez ajouter "nis"
dans la ligne "host" du fichier /etc/host.conf
. Lisez
la page de manuel "resolv+.8" pour plus de détails.
Ajoutez ensuite la ligne suivante dans le fichier
/etc/passwd
de vos machines clientes :
+::::::
Vous pouvez également utiliser les caractères + et - pour
inclure/exclure ou modifier certains utilisateurs. Si vous
souhaitez exclure l'utilisateur guest, ajoutez -guest
à votre fichier /etc/passwd
. Si vous souhaitez
utiliser un interpréteur de commandes différent (par exemple ksh)
pour l'utilisateur "linux", ajoutez la ligne
+linux::::::/bin/ksh
. Les champs que vous ne souhaitez
pas modifier doivent rester vides. Vous pouvez également utiliser
les Netgroups pour gérer les utilisateurs.
Par exemple, pour n'utiliser que les login miquels, dth et ed, ainsi que tous les membres du netgroup sysadmin, tout en ayant quand même accès aux comptes des autres utilisateurs :
+miquels::::::: +ed::::::: +dth::::::: +@sysadmins::::::: -ftp +:*::::::/etc/NoShell
Remarquez qu'avec Linux, vous pouvez également surcharger le champ mot de passe, comme nous l'avons fait dans cet exemple. Nous avons également supprimé le login "ftp" : cet utilisateur n'est plus connu sur la machine et le ftp anonyme ne fonctionnera pas.
Le netgroup peut être défini de la sorte :
sysadmins (-,software,) (-,kukuk,)
IMPORTANT : la fonctionnalité de netgroup n'est implémentée qu'à partir de la libc version 4.5.26. Mais si vous possédez une libc plus ancienne que la 4.5.26, tout utilisateur dans la base de donnée des mots de passe peut accéder à la machine linux si vous lancez ypbind.
Il vous suffit d'avoir le fichier de configuration NIS
(/etc/yp.conf
) qui pointe sur le (ou les) serveur(s)
adéquat(s), ainsi qu'un fichier /etc/nsswitch.conf
correctement configuré.
Vous devriez également installer ypbind. Il n'est pas nécessaire pour la libc, mais les outils NIS(YP) en ont besoin.
Si vous souhaitez utiliser les fonctionnalités d'inclusion/exclusion d'utilisateurs (+/-guest/+@admins), vous devez utiliser "passwd: compat" et "group: compat". Notez qu'il n'existe pas de "shadow: compat" ! Vous devez utiliser "shadow: files nis" dans ce dernier cas.
Les sources de NYS sont fournies avec les sources de libc5. Lorsque vous lancez la configuration pour la première fois, répondez "NO" à la question "Values correct" (NDT: en français, "Est-ce que les valeurs sont correctes ?"), puis répondez "YES" à la question "Build a NYS libc from nys" (NDT: en français, "Construire une libc NYS à partir de nys ?").
La glibc utilise la version "NIS traditionnelle", donc vous
devrez lancer ypbind. Le fichier /etc/nsswitch.conf
doit également être correctement configuré. Si vous utilisez le
mode compat pour les tables passwd, shadow ou group, vous devez
ajouter le caractère "+" à la fin de ces fichiers, et vous pourrez
alors utiliser les fonctionnalités d'inclusion/d'exclusion
d'utilisateurs. La configuration est exactement la même que sous
Solaris 2.x.
Le fichier de configuration /etc/nsswitch.conf
détermine l'ordre dans lequel sont effectuées les recherches de
certaines informations, en fonction des données et des services, de
la même manière que le fichier /etc/host.conf
détermine la façon dont les recherches de noms de machines se font.
Par exemple, la ligne
hosts: files nis dns
indique que la recherche d'un nom de machine sera d'abord
effectuée dans le fichier local /etc/hosts
, puis dans
la table NIS et enfin en utilisant le DNS
(/etc/resolv.conf
et named
). Si aucune
machine ne correspond, alors une erreur est renvoyée. Ce fichier
doit être accessible en lecture pour tous les utilisateurs !
Voici un bon exemple de fichier /etc/nsswitch.conf pour NIS:
# # /etc/nsswitch.conf # # Un exemple de configuration de NSS (Name Service Switch). Ce fichier doit # etre trie en mettant en tete les services les plus utilises. # # L'entree '[NOTFOUND=return]' signifie que la recherche d'une entree # doit s'arreter si la recherche dans l'entree precedente n'a rien donne # Notez que si la recherche echoue pour tout autre raison # (par exemple, le serveur NIS ne repond pas), alors la recherche continue # avec l'entree suivante. # # Les entrees connues sont : # # nisplus NIS+ (NIS version 3) # nis NIS (NIS version 2), connu comme YP # dns DNS (Domain Name Service) # files Fichiers locaux # db Bases de donnees /var/db # [NOTFOUND=return] Arret de la recherche si l'on n'a rien trouve # passwd: compat group: compat shadow: compat passwd_compat: nis group_compat: nis shadow_compat: nis hosts: nis files dns services: nis [NOTFOUND=return] files networks: nis [NOTFOUND=return] files protocols: nis [NOTFOUND=return] files rpc: nis [NOTFOUND=return] files ethers: nis [NOTFOUND=return] files netmasks: nis [NOTFOUND=return] files netgroup: nis bootparams: nis [NOTFOUND=return] files publickey: nis [NOTFOUND=return] files automount: files aliases: nis [NOTFOUND=return] files
Les entrées passwd_compat, group_compat et shadow_compat ne sont
gérées qu'avec la glibc 2.x. S'il n'y a pas d'entrée shadow dans
/etc/nsswitch.conf
, la glibc utilisera l'entrée passwd
pour effectuer ses recherches. Il existe certaines entrées
supplémentaires avec la glibc comme hesoid
. Pour plus
d'informations, consultez la documentation de la glibc.
L'utilisation des mots de passe Shadow avec NIS est toujours une
mauvaise idée. Vous perdez toute la sécurité apportée par le
système Shadow. Une bonne façon d'éviter les mots de passe Shadow
avec NIS est de ne mettre dans le fichier /etc/shadow
que les utilisateurs du système local. Enlevez de la base de
données Shadow toutes les entrées correspondant aux utilisateurs
NIS, et remettez les mots de passe dans /etc/passwd
.
Vous pourrez ainsi utiliser le système Shadow pour le
super-utilisateur (i.e. "root"), et les mots de passe classiques
pour les utilisateurs NIS. Cette solution a l'avantage de pouvoir
fonctionner avec tous les clients NIS.
Si cette option n'est pas possible pour vous, il faudra utiliser la bibliothèque GNU C 2.x. C'est la seule bibliothèque libc pour Linux qui gère l'utilisation des mots de passe Shadow avec NIS. Sous Linux, la libc5 ne le permet pas. La libc5 compilée avec le support de NYS contient une partie de code permettant le mélange Shadow - NIS, mais ce code présente de sérieuses erreurs dans certains cas et ne fonctionne pas correctement avec toutes les entrées Shadow.
Le problème suivant est PAM. La bibliothèque GNU C gère
l'utilisation des mots de passe Shadow avec NIS, mais PAM ne le
fait pas, essentiellement pam_pwdb/libpwdb
. C'est un
gros problème pour les utilisateurs de RedHat 5.x. Si vous avez
glibc et PAM, vous devez changer les entrées dans
/etc/pam.d/*
. Changez toutes les entrées de pam_pwdb
par l'intermédiaire des modules pam_auth_unix_*. Cette méthode
devrait fonctionner.
Le code de NIS+ pour Linux a été développé pour la bibliothèque GNU C 2. Il existe également une version pour la libc5 de Linux, puisque toutes les applications commerciales sont compilées en édition de lien avec cette bibliothèque, et que vous ne pouvez pas les recompiler en utilisant la glibc. Il y a des problèmes avec la libc5 et NIS+: Vous ne pourrez pas réaliser d'édition de lien statique de vos programmes, et les programmes compilés avec cette bibliothèque ne fonctionneront pas avec les autres versions de la libc5.
Vous devez récupérer et recompiler la dernière version de la glibc2, et une distribution basée sur cette bibliothèque comme la Redhat Mustang ou l'instable Debian. Mais attention : il s'agit toujours d'une version bêta. Lisez la documentation concernant la glibc et celle fournie par la distribution. La glibc2.0.x ne gère pas pleinement NIS+, et ne l'intégrera jamais. La première version avec la gestion NIS+ sera la 2.1.
Les programmes clients NIS+ peuvent être récupérés sur les sites :
Site Repertoire Nom du fichier ftp.kernel.org /pub/software/libs/glibc libc-*, glibc-crypt-*, glibc-linuxthreads-* ftp.kernel.org /pub/linux/utils/net/NIS+ nis-tools-1.4.2.tar.gz ftp.kernel.org /pub/linux/utils/net/NIS+ pam_keylogin-1.2.tar.gz
Les distributions basées sur la glibc peuvent être récupérées sur les sites :
Site Repertoire ftp.redhat.com /pub/redhat/redhat-5.1 ftp.debian.org /pub/debian/dists/hamm
Pour compiler la glibc, suivez les instructions livrées avec les sources. Vous pouvez trouver à l'adresse suivante la version patchée de la libc5, basée sur NYS et sur les sources de la glibc, qui peut être utilisée pour remplacer la libc5.
Site Repertoire Nom du fichier ftp.kernel.org /pub/linux/utils/net/NIS+ libc-5.4.44-nsl-0.4.10.tar.gz
Vous pouvez également consulter le site http://www-vt.uni-paderborn.de/~kukuk/linux/nisplus.html pour plus d'informations ainsi que pour avoir les dernières sources.
IMPORTANT : pour configurer un client NIS+, lisez la documentation NIS+ Solaris pour voir ce qu'il convient de faire du côté serveur. Ce document ne décrit que le côté client !
Après avoir installé la nouvelle libc ainsi que nis-tools, créez
les références pour le nouveau client sur le serveur NIS+. Assurez
vous que portmap
est lancé. Ensuite, vérifiez que
votre PC Linux est à la même heure que le serveur NIS+. Pour
réaliser des RPC sécurisés, vous disposez d'une courte période de 3
minutes, durant lesquelles les références sont valides. Lancer
xntpd
sur toutes les machines peut être une bonne
idée. Après tout ça, exécutez les commandes suivantes :
domainname nisplus.domain. nisinit -c -H <serveur NIS+>
pour initialiser le système de lancement. Lisez la page de manuel de nisinit pour connaître les différentes options existantes. Assurez-vous que le nom de domaine est toujours bien positionné lors d'un réamorçage. Si vous ne connaissez pas votre nom de domaine NIS+ sur votre réseau, demandez-le à votre administrateur système.
Pensez également à modifier votre ficher
/etc/nsswitch.conf
. Assurez-vous que le seul service
situé avec publickey est nisplus
("publickey:
nisplus"), et rien d'autre !
Ensuite, lancez keyserv
et assurez-vous qu'il sera
toujours lancé lors de l'amorçage de la machine. Lancez
pour conserver la clef privée sur votre système (j'espère que vous avez ajouté la clef publique de la nouvelle machine sur le serveur NIS+ !).keylogin -r
"niscat passwd.org_dir" doit désormais vous donner toutes les entrées contenues dans la base de données passwd.
Lorsque l'utilisateur se connecte, il a besoin de fixer sa clef
secrète sur le serveur de clef. Cela est effectué en appelant
keylogin
. Le login à partir du paquetage shadow fera
cela à la place de l'utilisateur. Pour un login de type PAM, vous
devez installer pam_keylogin-1.1.tar.gz
et modifier le
fichier /etc/pam.d/login
pour utiliser
pam_unix_auth
, et non pwdb
qui ne gère
pas NIS+. Voici un exemple :
#%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_keylogin.so auth required /lib/security/pam_unix_auth.so auth required /lib/security/pam_nologin.so account required /lib/security/pam_unix_acct.so password required /lib/security/pam_unix_passwd.so session required /lib/security/pam_unix_session.so
Le fichier de configuration /etc/nsswitch.conf
détermine l'ordre dans lequel sont effectuées les recherches de
certaines informations, en fonction des données et des services, de
la même manière que le fichier /etc/host.conf
détermine la façon dont les recherches de noms de machines se font.
Par exemple, la ligne
hosts: files nisplus dns
indique que la fonction de recherche doit dans un premier temps
chercher dans le fichier local /etc/hosts
, suivi par
une recherche NIS+ et enfin via le service de recherche de
noms (/etc/resolv.conf
et named
). À ce
moment là, si aucune machine n'est trouvée, alors une erreur est
renvoyée.
Voici un exemple de bon fichier
/etc/nsswitch.conf
# Un exemple de configuration de NSS. Ce fichier doit etre trie en # mettant en tete les services les plus utilises. # # L'entree '[NOTFOUND=return]' signifie que la recherche d'une entree # doit s'arreter si la recherche dans l'entree precedente n'a rien donne # Notez que si la recherche echoue pour tout autre raison # (par exemple, le serveur NIS ne repond pas), alors la recherche continue # avec l'entree suivante. # # Les entrees connues sont : # # nisplus NIS+ (NIS version 3) # nis NIS (NIS version 2), connu comme YP # dns DNS (Domain Name Service) # files Fichiers locaux # db Bases de donnees /var/db # [NOTFOUND=return] Arret de la recherche si l'on a rien trouve # passwd: compat # pour libc5: passwd: files nisplus group: compat # pour libc5: group: files nisplus shadow: compat # pour libc5: shadow: files nisplus passwd_compat: nisplus group_compat: nisplus shadow_compat: nisplus hosts: nisplus files dns services: nisplus [NOTFOUND=return] files networks: nisplus [NOTFOUND=return] files protocols: nisplus [NOTFOUND=return] files rpc: nisplus [NOTFOUND=return] files ethers: nisplus [NOTFOUND=return] files netmasks: nisplus [NOTFOUND=return] files netgroup: nisplus bootparams: nisplus [NOTFOUND=return] files publickey: nisplus automount: files aliases: nisplus [NOTFOUND=return] files
Ce document ne décrit que la manière de configurer le serveur NIS "ypserv".
Les programmes serveur NIS peuvent être trouvés sur :
Site Repertoire Nom de fichier ftp.kernel.org /pub/linux/utils/net/NIS ypserv-1.3.2.tar.gz wauug.erols.com /pub/net/nis ypserv-1.3.2.tar.gz
Vous pouvez également regarder le document http://www-vt.uni-paderborn.de/~kukuk/linux/nis.html pour obtenir de plus amples informations ainsi que les sources.
La configuration du serveur est la même que cela soit le NIS traditionnel ou NYS.
Compilez les sources pour générer les programmes "ypserv" et
"makedbm". Si votre serveur est considéré comme maître, déterminez
quels fichiers vous souhaitez rendre disponibles via NIS et ajoutez
ou supprimez les entrées appropriées dans
/var/yp/Makefile
.
Il y a une seule grande différence entre ypserv 1.1
et ypserv 1.2
. Depuis la version 1.2,
ypserv
utilise une mémoire cache pour les
manipulations de fichiers. Cela signifie que vous devez toujours
appeler makedbm
avec l'option -c
si créez
de nouvelles maps. Assurez-vous que vous utilisez le nouveau
/var/yp/Makefile
fourni avec ypserv 1.2
ou une version supérieure, ou ajoutez l'option -c
à
makedbm
dans le Makefile. Si vous ne le faites pas,
ypserv
continuera à utiliser les anciennes maps, et
non les nouvelles.
Éditez ensuite /var/yp/securenets
et
/etc/ypserv.conf
. Pour plus d'information, lisez les
pages de manuel ypserv(8)
et
ypserv.conf(5)
.
Assurez-vous que le portmapper (portmap(8)
)
fonctionne et lancez le serveur ypserv
. La
commande
% rpcinfo -u localhost ypserv
doit vous répondre un message du genre
program 100004 version 2 ready and waiting
Maintenant, générez la base de donnée NIS (YP). Sur le serveur maître, lancez :
% /usr/lib/yp/ypinit -m
sur un esclave, assurez-vous que ypwhich -m fonctionne. C'est à dire que votre esclave doit être configuré en tant que client NIS, puis lancez:
pour que la machine soit un esclave NIS.% /usr/lib/yp/ypinit -s masterhost
Ça y est, votre serveur fonctionne.
Si vous avez de plus gros problèmes, vous pouvez lancer
ypserv
et ypbind
en mode debug sur des
xterms différents. La sortie écran du mode débug devrait vous
montrer ce qui ne va pas.
Il est possible que vous souhaitiez ajouter les lignes suivantes
sur le serveur esclave dans la crontab
root :
20 * * * * /usr/lib/yp/ypxfr_1perhour 40 6 * * * /usr/lib/yp/ypxfr_1perday 55 6,18 * * * /usr/lib/yp/ypxfr_2perday
De cette manière, vous êtes sûr que les maps NIS sont synchronisées et sont à jour, même s'il peut arriver qu'une mise à jour soit ratée parce que l'esclave était arrêté lors de la mise à jour du maître.
Vous pouvez ajouter un esclave n'importe quand, ensuite. Tout
d'abord, assurez-vous que le nouveau ypserv
a les
droits pour contacter le serveur maître. Ensuite, lancez
sur l'esclave, et ajoutez le nom du serveur au fichier% /usr/lib/yp/ypinit -s masterhost
/var/yp/ypservers
. Après cela, lancez la commande
"make" dans le répertoire /var/yp
pour mettre les maps
à jour.
Si vous souhaitez restreindre l'accès au serveur NIS, vous devez
configurer le serveur NIS comme s'il était également un client en
lançant ypbind
et en ajoutant les entrées "+" dans le
fichier /etc/passwd
. La bibliothèque de fonctions va
alors ignorer les entrées normales après la première entrée NIS et
va récupérer le reste des informations en utilisant NIS. C'est de
cette manière que sont maintenues les règles d'accès NIS. Par
exemple :
root:x:0:0:root:/root:/bin/bash daemon:*:1:1:daemon:/usr/sbin: bin:*:2:2:bin:/bin: sys:*:3:3:sys:/dev: sync:*:4:100:sync:/bin:/bin/sync games:*:5:100:games:/usr/games: man:*:6:100:man:/var/catman: lp:*:7:7:lp:/var/spool/lpd: mail:*:8:8:mail:/var/spool/mail: news:*:9:9:news:/var/spool/news: uucp:*:10:50:uucp:/var/spool/uucp: nobody:*:65534:65534:noone at all,,,,:/dev/null: +miquels:::::: +:*:::::/etc/NoShell [ Tous les utilisateurs normaux APRES cette ligne !] tester:*:299:10:Just a test account:/tmp: miquels:1234567890123:101:10:Miquel van Smoorenburg:/home/miquels:/bin/zsh
L'utilisateur tester existera toujours mais il aura
l'interpréteur de commandes /etc/NoShell
.
L'utilisateur miquels aura un accès normal.
Sinon, vous pouvez également éditer le fichier
/var/yp/Makefile
et configurer NIS pour qu'il utilise
un autre fichier passwd. Sur de gros systèmes, les fichiers passwd
et group sont généralement conservés dans le répertoire
/var/yp/ypfiles/
. Si vous utilisez les outils
standards pour administrer le fichier mot de passe ("passwd",
"chfn", "adduser"), cela ne fonctionnera plus et devrez alors créer
vos propres outils.
Toutefois, yppasswd
, ypchsh
et
ypchfn
fonctionneront bien sur.
Pour mettre en place le serveur NIS yps
, consultez
les paragraphes précédents. Sa configuration est assez similaire
sans être exactement la même, donc faites attention si vous essayez
d'appliquer les instructions de ypserv
à
yps
! Cependant, yps
n'est plus maintenu
par son auteur, et contient un certain nombre de failles de
sécurité. Vous devriez éviter de vous en servir.
Ce serveur NIS peut être trouvé sur :
Site Repertoire Nom du Fichier ftp.lysator.liu.se /pub/NYS/servers yps-0.21.tar.gz
À chaque fois qu'un utilisateur change son mot de passe, le mot
de passe de la base de données NIS, ainsi que celui des autres
bases de données NIS, doit être mis à jour. Le programme
rpc.yppasswd
est un serveur qui gére les modifications
de mot de passe et qui s'assure que les informations NIS seront
correctement mises à jour. rpc.yppasswdd
est désormais
intégré dans ypserv
. Vous n'avez plus besoin des
vieilles versions séparées yppasswd-0.9.tar.gz
ou
yppasswd-0.10.tar.gz
, et vous ne devriez plus les
utiliser. La version de rpc.yppasswdd
qui est comprise
dans ypserv 1.3.2
gère totalement les Shadow.
yppasswd
fait maintenant parti de
yp-tools-1.2.tar.gz.
Le lancement de rpc.yppasswdd
n'est nécessaire que
sur le serveur maître. Par défaut, les utilisateurs ne sont pas
autorisés à changer leur Nom complet (NDT: Prénom + Nom), ni leur
shell. Vous pouvez cependant les y autoriser en utilisant l'option
-e
de chfn
ou l'option -e
de
-e
de chsh
.
Si tout fonctionne correctement (comme cela devrait être), vous devriez être capable de vérifier votre installation avec quelques commandes simples. Supposons que le fichier de mots de passe soit géré par NIS, la commande
% ypcat passwd
devrait alors vous donner le contenu du fichier des mots de passe. La commande
% ypmatch id_utilisateur passwd
(où id_utilisateur est le nom de login d'un
utilisateur) devrait vous donner l'entrée de l'utilisateur dans le
fichier des mots de passe NIS. Les commandes ypcat
et
ypmatch
doivent être incluses dans la distribution du
NIS (ou NYS) traditionnel.
Si un utilisateur ne peut pas se connecter, lancez le programme suivant sur la machine cliente :
#include <stdio.h> #include <pwd.h> #include <sys/types.h> int main(int argc, char *argv[]) { struct passwd *pwd; if(argc != 2) { fprintf(stderr,"Usage: getwpnam username\n"); exit(1); } pwd=getpwnam(argv[1]); if(pwd != NULL) { printf("name.....: [%s]\n",pwd->pw_name); printf("password.: [%s]\n",pwd->pw_passwd); printf("user id..: [%d]\n", pwd->pw_uid); printf("group id.: [%d]\n",pwd->pw_gid); printf("gecos....: [%s]\n",pwd->pw_gecos); printf("directory: [%s]\n",pwd->pw_dir); printf("shell....: [%s]\n",pwd->pw_shell); } else fprintf(stderr,"User \"%s\" not found!\n",argv[1]); exit(0); }
Faites tourner ce programme avec le nom de l'utilisateur en
paramètre. Il va afficher toutes les informations renvoyées par la
fonction getpwnam
concernant l'utilisateur. Cela peut
vous permettre de savoir si l'entrée est correcte. Un problème
assez fréquemment rencontré est une redéfinition du champ de mot de
passe par un "*".
Voici certains problèmes rencontrés par différents utilisateurs :
su
plante. Vous devez récupérer la commande
su
à partir de la distribution de la
slackware 1.2.0 ou supérieure. Éventuellement, vous pouvez
également y récupérer les bibliothèques mises à jour.ypbind
démarre avec des messages du genre :
yp_match: clnt_call: RPC: Unable to receive; errno = Connection refusedet les logins sont refusés pour les utilisateurs référencés dans la base de donnée NIS. Loguez vous en tant que root si vous le pouvez, tuez
ypbind
puis relancez-le.libc
version supérieure
à 5.4.20, les outils YP ne fonctionneront plus. Vous devez utiliser
les yp-tools version 1.2
ou supérieure pour la
libc >= 5.4.21
et glibc 2.x
, et la
version yp-clients 2.2
pour les versions précédentes.
yp-tools 2.0
devrait fonctionner avec toutes les
bibliothèques.libc 5.4.21 - 5.4.35
,
yp_maplist
est défectueux. Vous devrez prendre une
version 5.4.36 ou supérieure, sinon, certains programmes pour YP
comme ypwhich
généreront une erreur
seg.fault.libc5
avec le NIS traditionnel ne gère pas
l'utilisation des mots de passe Shadow avec NIS. Vous devez donc
utiliser la libc5
avec NYS ou la glibc
2.x
.ypcat shadow
ne montre pas la map Shadow. C'est là
quelque chose de correct, puisque le nom de la map Shadow est
"shadow.byname", et non "shadow".Bon nombre de questions doivent être résolues désormais. Si vous avez des questions sans réponse, vous pouvez poster un message dans les forums de discussion :
comp.os.linux.help
ou
comp.os.linux.networking
ou contacter l'un des auteurs de ce HOWTO.