Original in fr Frédéric Raynal
Ici, nous verrons comment configurer son serveur et nous donnerons quelques conseils pour l'utilisation de NIS.
Enfin, nous traitons ici le cas d'une version récente de ypserv (i.e. version supérieure à la 1.3.2 pour avoir la gestion des shadow passwords entre autre) fournit avec la RedHat 6.1 : il s'agit donc d'un serveur NYS et non d'un "NIS traditionnel" ... mais nous continuerons à parler indistinctement, et abusivement, de NIS.
Nous présenterons d'abord la démarche à entreprendre pour installer un serveur. Nous détaillerons au fur et à mesure le rôle des différents fichiers de configuration intervenant dans l'installation du serveur.
Dans la suite de l'article, nous travaillerons sur la machine "charly". Le domaine NIS portera comme nom "bosley". Les serveurs esclaves seront "sabrina", "jill" et "kelly".
On fixe ensuite le nom de domaine NIS. Il ne s'agit toujours pas du nom de domaine au sens DNS, mais bien au sens des YPs. Ce nom doit être différent de celui de la machine pour des raisons de sécurité.
La commande domainname permet de ... fixer le nom de domaine :-) Dans notre cas, nous exécuterons donc :
root@charly >> /bin/domainname bosleyCette commande fixe le nom de domaine NIS en mémoire. Toutefois, quitte à configurer un serveur, on aimerait bien que ce soit fait automatiquement au démarrage de la machine. Pour cela, il faut ajouter une ligne au fichier de configuration réseau /etc/sysconfig/network :
NISDOMAIN=bosleyAinsi, lors de l'initialisation du réseau au prochain reboot, le nom de domaine NIS sera automatiquement fixé.
L'étape suivante consiste à démarrer le démon ypserv. Il faut préalablement le configurer par le biais du fichier /etc/ypserv.conf. C'est un fichier ASCII qui contient 3 types de ligne :
option: [yes|no]Les options possibles sont dns (le serveur interrogera le DNS pour trouver ses clients qui n'apparaissent pas dans les maps hosts.*), sunos_kludge (obsolète) et xfr_check_port (pour faire tourner le serveur sur un port inférieur à 1024 - yes par défaut)
host:map:security:mangle[:field]Elles permettent de déterminer qui peut voir quoi.
On peut maintenant démarrer le serveur :
root@charly >> /etc/rc.d/init.d/ypserv startSi on veut que le serveur soit lancé automatiquement, on l'ajoute dans les fichiers d'initialisation. Pour la RedHat, ça donne :
root@charly >> /sbin/chkconfig --levels 345 ypserv onOn peut vérifier que tout cela tourne correctement :
root@charly >> /usr/sbin/rpcinfo -u localhost ypservAvant de se lancer dans la construction de la base, revenons sur ce que nous avons évoqué dans le premier article. Nous avons vu qu'il existait 2 types de serveurs : le maître et ses esclaves. Le maître contient la base NIS de référence, les esclaves n'en possèdent qu'une copie. Ils servent à décharger le maître d'un trop plein de requêtes. La base ne sera construite que sur le serveur maître. Ensuite seulement, elle sera recopiée sur les serveurs esclaves.
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
Tout est donc en place maintenant ... sauf la base de données. Il ne reste donc plus qu'à la construire. Et qui dit construire dit Makefile ;-] Rassurez-vous, celui-ci est déjà écrit et il suffit d'y ajuster quelques variables. Il se trouve dans le répertoire /var/yp. Il est abondamment et clairement commenté. La ligne la plus importante est celle définissant les maps prises en charge par NIS. Sur charly, on a :
all: passwd group hosts rpc services netid protocols mail shadow \Par rapport à ce qui est donné par défaut, on a voulu ajouter la gestion des shadow passwords. Il faut donc aussi changer la valeur de la variable MERGE_PASSWD de "true" en "false". En effet, elle stipule, pour la construction de la base NIS, de mélanger les fichiers /etc/passwd et /etc/shadow.# netgrp publickey
# networks ethers bootparams printcap \
# amd.home auto.master auto.home passwd.adjunct
Dernier détail essentiel avant la création de la base NIS, la gestion de ses droits d'accès. Il existe 2 méthodes pour gérer les accès au serveur : soit il se débrouille tout seul, soit il passe par tcp_wrapper. Ce dernier cas ne sera pas détaillé ici.
Si vous avez seulement une version binaire de ypserv, l'option -v permet de savoir avec quelle configuration votre binaire a été compilé :
root@charly >> /usr/sbin/ypserv -vLe fichier /var/yp/securenets contient des paires netmask/network afin de contrôler l'accès au serveur. Il faut impérativement modifier ce fichier : par défaut, il contient la ligne
ypserv - NYS YP Server version 1.3.9 (with securenets)
0.0.0.0 0.0.0.0qui permet à tout le monde d'accéder à votre serveur NIS. Il est à noter que seules les adresses IP sont reconnues dans ce fichier (pas les noms de machines).
Nous pouvons maintenant construire la base de données NIS. Nous utiliserons la commande ypinit qui construit le sous-répertoire dans /var/yp portant le nom de domaine (bosley dans notre cas). La base de donnée est fabriquée à partir des informations contenues dans la mémoire de l'ordinateur (pour le nom de domaine par exemple) et à partir de fichiers textes contenus dans /etc. (par défaut, mais on peut spécifier un autre répertoire dans le Makefile). Ce sont ces fichiers qui contiennent les données fournies à la base (/etc/passwd, /etc/group, /etc/hosts, /etc/networks, /etc/services, /etc/protocols, /etc/netgroup, /etc/rpc).
L'option -m permet d'initialiser le serveur à partir de ces données brutes (-m pour master), l'option -s recopie la base de données du serveur maître sur un esclave (-s pour slave - esclave en Anglais).
Sur charly, nous initialisons donc notre base ainsi :
root@charly >> /usr/lib/yp/ypinit -mEt voila une bonne chose de faite, la base de données est en place :) Pour le cas des serveurs esclaves, il faut maintenant exécuter sur chacun d'eux la commande :At this point, we have to construct a list of the hosts which will run NIS
servers. localhost is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>.
next host to add: localhost
next host to add: sabrina
next host to add: jill
next host to add: kelly
next host to add:
The current list of NIS servers looks like this:localhost
sabrina
jill
kellyIs this correct? [y/n: y] y
We need some minutes to build the databases...
Building /var/yp/bosley/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/bosley'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
Updating shadow.byname...
# shadow publickey # networks ethers bootparams printcap \
# amd.home auto.master auto.home passwd.adjunct
gmake[1]: Leaving directory `/var/yp/bosley'
root@kelly >> /usr/lib/yp/ypinit -s charlyPour s'assurer que tout tourne correctement, il suffit de faire se transformer un serveur, qu'il soit maître ou esclave, en un client et d'exécuter une requête. Par exemple, sur charly :
root@kelly >> ypcat passwd mulder:x:500:100::/home/mulder:/bin/csh scully:x:501:100::/home/scully:/bin/bashOn remarque au passage que les shadow passwords fonctionnent correctement :)
|
|
Pour ajouter un serveur esclave, il suffit d'exécuter /usr/lib/yp/ypinit -s charly sur le nouveau serveur esclave et d'ajouter son nom dans le fichier /var/yp/ypservers du serveur maître.
Si on crée un nouvel utilisateur, plusieurs maps peuvent avoir changé (passwd, shadow, alias, etc ...).
Dès qu'on modifie une map, il ne faut pas oublier de faire alors un make dans le répertoire /var/yp/ sur le serveur maître : celui-ci met à jour sa base de données en intégrant les nouvelles informations et les distribue à ses esclaves (via la commande yppush).
Le programme rpc.ypxfrd permet d'accélérer les transactions entre un serveur maître et ses esclaves. Il permet à un esclave de recopier la base du serveur maître, plutôt que de reconstruire la sienne intégralement.rpc.ypxfrd doit démarrer en même temps que ypserv et uniquement sur le serveur maître. Ce programme sert essentiellement pour les très grosses maps.
Tout comme certains mots de passe qu'on peut facilement deviner, beaucoup de systèmes emploient un nom de domaine NIS prévisible. Des candidats évidents, une fois découvert le nom du serveur NIS, sont par exemple le nom (complet ou partiel) de ce serveur ou encore le nom de l'organisation à laquelle appartient le serveur. ypwhich permet justement de tester des noms de domaine !
Le nom de domaine NIS apparaît à plusieurs endroits, et notamment dans le répertoire /var/yp, où un sous-répertoire est crée à l'installation de NIS (sur le(s) serveur(s), mais aussi sur les clients) : il porte le nom du domaine NIS. Il faut donc bien contrôler les droits d'accès à ce répertoire. En particulier, il ne faut jamais l'exporter, même en read only, via NFS. En effet, n'importe qui peut alors monter le répertoire sur sa propre machine pour découvrir le nom de domaine.
Par ailleurs, l'utilisation de tcp_wrapper n'est pas un mal. En effet, vous pouvez ainsi contrôler le service portmap pour éviter que tout le monde puisse lancer des requêtes RPCs vers votre machine.
Une bonne chose à faire également est de ne pas configurer le routage par défaut sur votre serveur NIS, mais de n'utiliser que du routage statique vers tous les clients et serveurs esclaves. Le serveur ne connaissant alors que quelques routes vers des machines bien détérminées, il ne peut donc pas répondre à des requêtes provenant d'une machine inconnue.
Au niveau du routeur, un firewall permet également de contrôler efficacement les accès aux serveurs NIS.
Ces conseils relèvent essentiellement du bon sens. Ils n'augmentent pas la sécurité de NIS, mais le cadre qui est autour. Malgré ce problème, NIS reste un outil efficace et surtout pratique.