Le service NYS permet de distribuer sur un certain nombre de machines des cartes. Ces cartes sont en fait les fichiers de configuration correspondant aux comptes utilisateurs, aux adresses des différentes machines...
Pratiquement, NYS permet en fait d'utiliser son compte utilisateur avec le même mot de passe et les mêmes paramètres sur n'importe quelle machine appartenant au réseau NYS. Pour cela, on exportera les comptes utilisateur par NFS, et on utilisera NYS pour partager les données et les paramètres sur tous les clients du réseau.
Une fois installé, tous les fichiers de configuration sont centralisés sur le serveur. Cela simplifie grandement les mises à jour, la maintenance, et les ordinateurs clients ont ainsi en local des fichiers minimum.
Les cartes sont créées à partir des fichiers du serveur :
/etc/passwd -> carte des mots de passe
/etc/group -> groupe des utilisateurs
/etc/hosts -> les machines du réseau
/etc/networks -> liste des sous-réseaux
Avant tout, il faut spécifier à quel domaine NIS appartient la machine. Cela se fait par la commande domainname.
$domainname mon_domaine
Ce domaine est totalement différent du domaine DNS. Vous pouvez donc donner un nom de domaine différent ou identique à votre domaine DNS. Pour éviter les confusions, il est parfois préférable de distinguer ces 2 noms.
Pour ne pas avoir à le faire à chaque fois que vous redémarrez votre machine il suffit d'ajouter dans le fichier /etc/sysconfig/network la ligne
NIS_DOMAIN=mon_domaine
Le nom de domaine sera initialisé automatiquement lors du lancement de ypserv.
Aller ensuite dans le répertoire /var/yp
et éditer le Makefile.
Aller alors à la ligne all:
, elle contient la liste des cartes possibles.
Recopiez-là et commentez-là pour en garder une trace.
Laissez une ligne contenant simplement :
all: passwd hosts group
Ce sont les trois cartes généralement suffisantes pour la majorité des
utilisations, en tout cas elles suffisent largement pour tester. Il sera
ensuite toujours temps de rajouter les autres cartes dont vous avez besoin,
comme par exemple la carte de /etc/networks
.
Ensuite il n'y a plus qu'à faire un make, les cartes vont alors être
créés dans le répertoire /var/yp/mon_domaine
.
Il faut également éditer le fichier ypserv.conf
sunos_kludge: no
tryresolve: no
dns: no
# Host : Map : Security :Passwd_mangle
#
192.168.1. : passwd.byname : port : yes
192.168.1. : passwd.byuid : port : yes
# Not everybody should see shadow password, not secure, since
# under MSDOG everybody is root and can access ports < 1024 !!! *
: shadow.byname : port : yes
Enfin, il faut autoriser les clients à se connecter, pour cela il faut éditer le fichier hosts.allow si ce n'est pas encore fait pour qu'il ressemble à quelque chose comme cela :
ALL: 192.168.1. ou bien
ALL: fresne, pantera
Il ne reste plus qu'à lancer le démon ypserv.
Le serveur NYS à proprement parler est prêt. Pour que les utilisateurs
puissent se connecter de façon transparente sur les clients, il faut
maintenant exporter le répertoire de leurs comptes par NFS.
Vous pouvez alors exporter les répertoires /home/un_utilisateur
de
chaque utilisateur par NFS et les monter sur le client, de préférence en
lecture-écriture.
Toutefois, si vous avez un grand nombre d'utilisateurs avec NYS, il parait
judicieux de les regrouper dans un seul et même répertoire, /nisusers
par exemple que vous n'aurez plus qu'à exporter. Dans ce cas, il faudra
également modifier le champ home_directory du fichier
/etc/passwd
, et le script adduser pour qu'il soit compatible.
Il y a encore quelque temps, il était nécessaire de lancer un démon sur le client NIS. Ce client s'appelait ypbind, mais il est maintenant devenu inutile avec la distribution RedHat. En effet les fonctions de NIS ont été intégrées directement dans les librairies, qui ont maintenant le nom de NYS.
La documentation n'est malheureusement pas très claire à ce sujet, et il est parfois difficile de trouver la bonne façon de configurer son client NYS car les différentes docs que j'ai vues se mélangeaient allègrement les pieds entre les 2 implémentations.
Ce sont les fonctions NYS qui sont maintenant utilisés et dont nous parlerons dans ce document.
Il faut tout d'abord configurer comme pour le serveur le nom de domaine. Vous
pouvez mettre dans le fichier /etc/sysconfig/network
la ligne :
NIS_DOMAIN=mon_domaine
Cela me parait une bonne solution, mais comme le script ypserv n'est
évidemment pas lancé, il faudra définir domainname
dans un des
scripts de lancement.
J'ai donc mis dans /etc/rc.d/rc.sysinit
à la suite du hostname la
ligne domainname {$NIS_DOMAIN}
Il faut ensuite créer le fichier /etc/yp.conf
domainname mon_domaine_nis
ypserver mon_serveur_yp
ypsever mon_deuxieme_serveur
Il permet d'indiquer le nom du serveur yp que l'on utilisera. Il est tout à fait possible de spécifier plusieurs serveurs avec la ligne ypserver. Celui qui sera utilisé est celui qui répondra en premier. Cela sert essentiellement pour des machines qui sont souvent déplacées entre des réseaux différents.
Éditer également le fichier /etc/nsswitch.conf
passwd: files nis
group: files nis
hosts: files nis dns
networks: files nis
Ce fichier permet de déterminer par où commencera la recherche d'une information dans les différentes cartes.
Un exemple de ces 2 fichiers se trouve dans /usr/doc/libc-5.3.12-8/
À partir de là, les différentes fonctions de NYS doivent fonctionner.
Pour le tester, essayons simplement un
$ypcat passwd
Généralement NYS est utilisé avec NFS pour offrir les même comptes utilisateurs sur toutes les machines. Pour cela, exporter les répertoires home des utilisateurs et distribuer les mots de passe par NYS. Ainsi, les utilisateurs peuvent se loguer sur n'importe quel client, et trouvent leur répertoire home et leurs fichiers de travail sur toutes les stations du réseau.
Concrètement, sur votre client une fois NYS correctement configuré, il suffit
de monter les répertoires utilisateurs que le serveur a exporté. Si vous voulez
l'automatiser, vous pouvez bien entendu mettre l'entrée dans votre
/etc/fstab
.
Lorsque l'on utilise NYS, on peut généralement utiliser son compte sur plusieurs clients. Pour des raisons pratiques on est parfois amené à se reloguer sur les autres stations régulièrement, et il devient parfois agaçant de devoir sans cesse taper son mot de passe alors que l'on reste sur des clients locaux parfaitement authentifiés.
Il existe donc un moyen pour améliorer la souplesse du rlogin. Il
suffit de définir dans le fichier hosts.equiv les machines et les comptes à
partir desquels on autorise un rlogin sans mot de passe. Il suffit de
mettre une ligne de la forme : machine : bob, marcel
, pour que
bob et marcel provenant de machine puissent se reloguer sans
authentification. Les lignes contenant juste un nom de machine indiquent
que tous les utilisateurs venant de cette machine peuvent se loguer sans
authentification
Le fichier .rhosts
qui existe dans le répertoire home des utilisateurs
permet à ceux qui viennent des machines spécifiées de se connecter dans ce
compte sans authentification.
Il est clair qu'il faut utiliser cette possibilité avec légèreté et ne pas autoriser n'importe qui (voir autoriser tout le monde) dans ces fichiers au risque de sérieusement réduire la sécurité de son site...
Lorsque l'on utilise NYS et les mots de passe distribués, la commande passwd
sur un client risque de ne pas avoir le comportement attendu puisque qu'elle
va éditer le fichier local /etc/passwd
.
C'est donc le démon yppasswd du serveur qui doit se charger de cela. En
fait lorsqu'un utilisateur voudra changer son mot de passe, il utilisera la
commande yppasswd, qui ira modifier le fichier /etc/passwd
du
serveur NYS, et qui également mettra à jour les cartes, en faisant appel aux
fonctions de notre bon démon.
Pour que l'utilisation de yppasswd soit transparente pour les utilisateurs,
vous pouvez renommer le fichier /usr/bin/passwd
en lpasswd
par
exemple, et ensuite vous faites un lien passwd vers yppasswd avec la commande :
ln -sf yppasswd passwd
Les utilisateurs pourront ainsi changer leur mot de passe sans se rendre compte qu'ils utilisent un compte NYS.