Installer un domaine NIS 

Mountage en tout genre Network Time Protocol
Configuration réseau 

Présentation

Installation et configuration du serveur

Installation et configuration du client

Tests de fonctionnement

Commandes diverses

Installation d'un serveur slave

Introduction

Pourquoi cette page alors qu'il existe un NIS-HOWTO fort bien détaillé, c'est justement parce qu'il était trop bien détaillé sans peut être aller à l'essentiel, j'avoue que je m'y suis un peu perdu, qui plus est il est peu "ancien" et aurait besoin d'un petit toilettage pour s'appliquer aux nouvelles versions de linux. Vous découvrirez dans ce HOW-TO, qu'il existe plusieurs types de NIS, le NIS traditionnel, le NIS+, mais aussi le NYS ! Pour ma part je me limite au NIS traditionnel, le tout testé sur un serveur NIS Mandrake 6.1 (noyau 2.2.13) et un client Mandrake 6.0 (noyau 2.2.9).

Présentation

Admettons que vous disposiez de plusieurs postes linux connectés en réseau, vous êtes obligés de créer autant de comptes sur chaque machine que vous avez d'utilisateurs, le problème est que chaque utilisateur se retrouve avec une home directory différente sur chaque poste, mais aussi un mot de passe distinct, voire éventuellement un uid et gid différent. De même pour les fichiers /etc/hosts, quand vous rajoutez une machine, vous êtes obligés de modifier un à un tous les fichiers /etc/hosts de chaque machine. Avec un ensemble pareil, il est difficile de garder une certaine cohérence entre les machines, et c'est particulièrement déroutant pour les utilisateurs (mots de passe, homedirectory). D'où l'intérêt du domaine NIS, anciennement appelé YP (pour Yellow Page devenu marque déposée), dans un domaine NIS, on dispose d'un serveur NIS qui contient des fichiers de référence (appelés map), comme /etc/passwd ou /etc/hosts, les clients NIS vont consulter ces fichiers de référence. Ainsi si l'on rajoute un utilisateur sur le réseau, c'est uniquement le fichier de référence /etc/passwd du serveur qui sera modifié et distribué aux clients, on dispose donc d'un /etc/passwd identique pour tout le réseau qui se trouve physiquement sur le réseau, seul lui est modifié, le principe est le même pour les autres map disponibles (hosts, group, ...).
On verra par la suite que NIS s'utilise conjointement avec NFS (ou éventuellement l'automontage autofs). On présentera les deux méthodes, sachant que je préfère personnellement la dernière, car elle permet de pouvoir travailler en local sans le serveur NIS. On suppose dans la suite des opérations que NFS ou l'automontage est configuré sur votre machine (en serveur et client), si ce n'est pas le cas, référez vous au document "mountage" en tout genre.

En plus du serveur NIS vous pouvez disposer d'un serveur de secours, en cas de défaillance du premier, les clients iront consulter les maps sur le serveur de secours, appelé serveur slave, donc en cas de modification d'une map du serveur principal, si vous disposez d'un serveur slave vous devez immédiatement répercuter la modification des maps sur le serveur slave. Je n'ai personnellement pas testé cette fonctionnalité de serveur slave mais j'en parlerai quand même dans cette page, je ne garantis pas par contre que ça fonctionnera du premier coup.

Avant de commencer vous devez choisir un nom pour votre domaine NIS, on prendra pour l'exemple alphaville, vous pouvez évidemment n'importe quoi, vous êtes simplement limité par votre imagination. On suppose aussi que votre réseau utilise les adresses IP 192.168.13.X et votre serveur NIS a l'adresse 192.168.13.1 et a por nom obelix.

Le but de la manoeuvre est le suivant, qu'un utilisateur du réseau quelque soit le poste utilisé puisse retrouver automatiquement sa homedirectory et que la modification de son mot de passe sur n'importe quel poste entraîne la modif sur l'ensemble des postes.
Deux cas de figures possibles seront abordés:

cas 1: répertoire /home exporté
Tous les homes directory se trouvent sous /home sur le serveur, tous les utilisateurs du réseau y ont été déclarés. Sur les postes clients vous n'avez déclaré aucun utilisateur à part les utilisateurs système (dont root) qu'on trouve par défaut, en tout état de cause, vous devez avoir /home vide, de même que /home ne doit pas être le point de montage d'une quelconque partition. Par NFS ou automontage, le répertoire /home du serveur sera monté sur chacun des clients et donc l'utilisateur retrouvera sa home directory quelque soit le poste qu'il utilisera.

cas 2: répertoire /export/home exporté
Vous ne pouvez pas vider /home sur les postes clients pour diverses raisons. Dans ce cas, sur le serveur créer l'homedirectory de chaque utilisateur sous /home,  puis on va faire un lien symbolique de /home vers /export/home et dans le fichier /etc/passwd au niveau des homedirectory on remplacera /home par /export/home. Sur les clients on montera /home du serveur sous un répertoire /export, chaque utiliseur retrouvera donc sa home directory sous /export/home, tout en ne touchant pas au répertoire /home des postes clients.

Installation et configuration du serveur

Installation
La mise en place d'un serveur nécessite l'installation du package suivant ypserv-1.3.7-3.i386.rpm (version trouvée sur le CD d'install de la RH6.1). Cette installation va créer un ensemble de fichier se trouvant sous /usr/sbin commençant par yp, et  des fichiers sous /etc/rc.d pour le lancement automatique et encore d'autres sous /var/yp et /usr/lib/yp.
Les daemons à lancer sont ypserv et rpc.yppasswd, le premier et  le daemon NIS lui-même, le second le daemon permettant de changer les mots de passe contenus dans la map passwd quelque soit le poste où l'on se trouve.

Lancement automatique
A défaut voici les manips à faire pour réaliser un démarrage automatique sous une arborescence de type RH.
Sous /etc/rc.d/init.d placer le fichier ypserv et le fichier yppasswdd. Ensuite en tant que root créez les liens suivants:

ln -s /etc/rc.d/init.d/ypserv /etc/rc.d/rc0.d/K84ypserv
ln -s /etc/rc.d/init.d/ypserv /etc/rc.d/rc1.d/K84ypserv
ln -s /etc/rc.d/init.d/ypserv /etc/rc.d/rc2.d/K84ypserv
ln -s /etc/rc.d/init.d/ypserv /etc/rc.d/rc3.d/S16ypserv
ln -s /etc/rc.d/init.d/ypserv /etc/rc.d/rc4.d/S16ypserv
ln -s /etc/rc.d/init.d/ypserv /etc/rc.d/rc5.d/S16ypserv
ln -s /etc/rc.d/init.d/ypserv /etc/rc.d/rc6.d/K84ypserv

et

ln -s /etc/rc.d/init.d/yppasswdd /etc/rc.d/rc0.d/K34yppasswdd
ln -s /etc/rc.d/init.d/yppasswdd /etc/rc.d/rc1.d/K34yppasswdd
ln -s /etc/rc.d/init.d/yppasswdd /etc/rc.d/rc2.d/K34yppasswdd
ln -s /etc/rc.d/init.d/yppasswdd /etc/rc.d/rc3.d/S92yppasswdd
ln -s /etc/rc.d/init.d/yppasswdd /etc/rc.d/rc4.d/S92yppasswdd
ln -s /etc/rc.d/init.d/yppasswdd /etc/rc.d/rc5.d/S92yppasswdd
ln -s /etc/rc.d/init.d/yppasswdd /etc/rc.d/rc6.d/K34yppasswdd

Configuration
A présent éditer le fichier /etc/sysconfig/network et rajouter:

NISDOMAIN=alphaville

Maintenant on va dans /var/yp et on édite le fichier Makefile qui s'y trouve, voici les modifications que j'ai apporté au Makefile d'origine et les lignes que je juge importantes :

# If we have only one server, we don't have to push the maps to the
# slave servers (NOPUSH=true). If you have slave servers, change this
# to "NOPUSH=false" and put all hostnames of your slave servers in the file
# /var/yp/ypservers.
# si vous avez pas de serveur slave mettre true, sinon mettre false
NOPUSH=true

(...)

# Should we merge the passwd file with the shadow file ?
# MERGE_PASSWD=true|false
# Si vous utilisez les shadow password mettre true
MERGE_PASSWD=false

# Should we merge the group file with the gshadow file ?
# MERGE_GROUP=true|false
# si vous utilisez les shadow password mettre true
MERGE_GROUP=false

# If you don't want some of these maps built, feel free to comment
# them out from this list.
# la ligne la plus important c'est la liste des maps susceptibles d'être gérées
# pour ma part je me suis limité à /etc/passwd /etc/group et /etc/hosts
#all:  passwd group hosts rpc services netid protocols netgrp mail \
    #shadow publickey # networks ethers bootparams amd.home \
#   auto.master auto.home passwd.adjunct
all: passwd hosts group

Maintenant on va pouvoir construire les maps proprement dites, en fait il va partir des fichiers ascii (/etc/passwd, /etc/group, et /etc/hosts) et générer des fichiers binaires (maps). Pour cela vous devez rebooter votre machine pour que le nom de domaine NIS soit pris en compte ou alors tout simplement taper en tant que root:

domainname alphaville

A présent sous /var/yp tapez:

make

Un répertoire alphaville va se créer sous /var/yp avec les maps à l'intérieur:

group.bygid.db
group.byname.db
 hosts.byaddr.db
 hosts.byname.db
 passwd.byname.db
 passwd.byuid.db
 passwd.db

A présent on va éditer le fichier /etc/ypserv.conf qui est le fichier de config du serveur nis (ypserv): voici son contenu:

#
# ypserv.conf   In this file you can set certain options for the NIS server,
#               and you can deny or restrict access to certain maps based
#               on the originating host.
#
#               See ypserv.conf(5) for a description of the syntax.

# Some options for ypserv. This things are all not needed, if
# you have a Linux net.

dns: no

# The following, when uncommented,  will give you shadow like passwords.
# Note that it will not work if you have slave NIS servers in your
# network that do not run the same server as you.
 # ici on doit mettre le type d'adresse utilisé par le réseau
# Host                         : Map                       : Security   : Passwd_mangle
#
192.168.13.                  : passwd.byname   : port           : yes
192.168.13.                  : passwd.byuid       : port           : yes

# Not everybody should see the shadow passwords, not secure, since
# under MSDOG everbody is root and can access ports < 1024 !!!
# J'utilise pas les shadows password donc j'ai pas fait attention à ça
# éventuellement mettre les adresses qui vont bien comme ci-dessus
*                            : shadow.byname              : port       : yes
*                            : passwd.adjunct.byname : port  : yes

# If you comment out the next rule, ypserv and rpc.ypxfrd will
# look for YP_SECURE and YP_AUTHDES in the maps. This will make
# the security check a little bit slower, but you only have to
# change the keys on the master server, not the configuration files
# on each NIS server.
# If you have maps with YP_SECURE or YP_AUTHDES, you should create
# a rule for them above, that's much faster.
# là j'ai pas tout compris alors j'ai laissé la ligne par défaut :-)
*                           : *                : none

En cas de serveurs slaves
Attention c'est une fonctionnalité que je n'ai pas testé, je vous livre ça avec des pincettes.
Vous devez mettre dans /var/yp/Makefile:

NOPUSH=false

Puis créer un fichier /var/yp/ypservers contenant la liste des noms des serveurs slaves. Dans la doc aussi, il est marqué qu'on doit lancé rcp.ypxfrd sur le serveur NIS primaire, pour cela rajoutez à /etc/inetd.conf les lignes suivantes:

fypxfrd/1 dgram  rpc/udp wait   root /usr/sbin/rpc.ypxfrd rpc.ypxfrd
fypxfrd/1 stream rpc/tcp nowait root /usr/sbin/rpc.ypxfrd rpc.ypxfrd

Vous devez rebooter la machine pour que ça soit pris en compte

Exporter les home directories
Qu'on veuille utiliser NFS ou l'automontage, qu'on soit dans le cas 1 ou 2 énoncé plus haut dans le chapitre de présentation, la manip est la même, on doit exporter le répertoire /home, pour cela on rajoutera la ligne suivante au fichier /etc/exports:

/home

Eventuellement si vous voulez limiter l'accès aux machines toto, titi, tata en lecture/écriture sur le répertoire en question:

/home titi(rw) tata(rw) toto(rw)

Pour que le fichier soit pris en compte, n'oubliez pas de taper:

exportfs -a

Maintenant si vous êtes dans le cas 1, c 'est terminé (ou presque), dans le cas 2, vous devez faire en plus, un lien de /home vers /export

mkdir /export
ln -s /home  /export

Et modifiez /etc/passwd pour remplacer /home par /export/home comme la ligne donnée en exemple:

veronique:3GGWf/uWiPoWM:4002:4000::/export/home/veronique:/bin/bash

Maintenant vous devez rebatir la map passwd, puisque vous venez de modifier /etc/passwd, sous /var/yp, tapez:

make

Lancement du serveur NIS
Pour lancer le serveur NIS, il suffit soit de rebooter soit simplement de taper:

/etc/rc.d/init.d/ypserv start

Installation et configuration d'un client

Installation
Vous devez installer yp-tools-2.3-2.i386.rpm  et ypbind-3.3-24.i386.rpm (par défaut sur une RH6.1), ça va vous installer des exécutables commençant par yp sous /usr/bin et /usr/sbin et un répertoire /var/yp. yp-tools est un package contenant une ensemble d'outils pour le NIS, ypbind est daemon qui va tourner sur les postes clients.

Lancement automatique
Pour que ypbind soit lancé automatiquement vous devez avoir un fichier ypbind sous /etc/rc.d/init.d et créer les liens suivants s'il n'existe pas:

ln -s /etc/rc.d/init.d/ypbind /etc/rc.d/rc0.d/K84ypbind
ln -s /etc/rc.d/init.d/ypbind /etc/rc.d/rc1.d/K84ypbind
ln -s /etc/rc.d/init.d/ypbind /etc/rc.d/rc2.d/K84ypbind
ln -s /etc/rc.d/init.d/ypbind /etc/rc.d/rc3.d/S16ypbind
ln -s /etc/rc.d/init.d/ypbind /etc/rc.d/rc4.d/S16ypbind
ln -s /etc/rc.d/init.d/ypbind /etc/rc.d/rc5.d/S16ypbind
ln -s /etc/rc.d/init.d/ypbind /etc/rc.d/rc6.d/K84ypbind

Configuration NIS
Editez le fichier /etc/sysconfig/network et rajoutez:

NISDOMAIN=alphaville

Ensuite éditez le fichier /etc/yp.conf et rajouter

domain alphaville server 192.168.13.1
ypserver  obelix

En fait au lieu de l'adresse IP on devrait mettre juste le nom du serveur, mais j'ai eu quelques problèmes que je n'ai pas rencontré en mettant l'adresse IP. Eventuellement vous pouvez rajouter les serveurs slaves en rajoutant à la suite:

ypserver nom-du-serveur-slave

Maintenant vous devez modifier votre fichier /etc/nsswitch.conf pour les lignes hosts, group et passwd (uniqument les maps exportés) pour prendre en compte d'abord les fichiers /etc/hosts, /etc/group et /etc/passwd locaux puis ceux du serveur NIS, on aura donc pour les lignes en question:

passwd:     files nis
group:        files nis

hosts:        files nis dns

Lancement du client NIS
Vous pouvez soit rebooter votre machine, soit tapez les commandes suivantes:

domainname alphaville
/etc/rc.d/init.d/ypbind start

Test de fonctionnement
Pour voir si tout marche, il suffit de taper sur le client:

ypwhich

Vous  devriez voir en réponse:

obelix

C'est à dire le nom de votre serveur NIS.

Configuration du client si vous utilisez NFS
Cas 1
Rajoutez dans /etc/fstab

tavel:/home /home nfs    defaults 0 0

Cas 2
Vous devez créer un répertoire /export/home

mkdir /export
mkdir /export/home

Puis rajoutez dans /etc/fstab la ligne suivante:

tavel:/home    /export/home    nfs    defaults 0 0

Dans les deux cas, tapez:

mount -a

Pour que le répertoire soit effectivement monté.

Configuration du client si vous utilisez l'automontage
Cas 1
Rajoutez à votre fichier /etc/auto.master la ligne suivante:

/    /etc/auto.home --timeout 60

Cas 2
Créer un répertoire /export :

mkdir /export

Rajoutez au fichier /etc/auto.master la ligne suivante:

/export /etc/auto.home --timeout 60

Dans les deux cas le fichier /etc/auto.home contiendra:

home            -fstype=nfs             obelix:/home

Pour relancer l'automontage et prendre en compte les nouvelles modifications, il suffit de taper:

/etc/rc.d/init.d/autofs stop
/etc/rc.d/init.d/autofs start

Modifier /etc/passwd
En toute rigueur au fichier /etc/passwd du client vous devez rajouter la ligne suivante tout à la fin:

+::::::

Mais ce n'est pas absolument nécessaire, ça marchera très bien sans. Mais on peut aller plus loin, les ":" correspondent en fait aux champs de /etc/passwd, qui je le rappelle sont:

login:passord:uid:gid:commentaire:homedirectory:shell

Si vous voulez que l'utilisateur toto déclaré sur le serveur maitre utilise un shell /bin/ksh, vous rajouterez donc:

+toto::::::/bin/ksh

Si vous voulez que celui ci ait comme homedirectory /tmp

+toto:::::/tmp:

Enfin si vous voulez limiter le nombre de comptes accessibles par nis (utilisateur toto, titi, tata), il suffira de rajouter:

+toto:::::::
+titi:::::::
+tata::::::

Test de fonctionnement

Le meilleur test consiste en tant que simple utilisateur est de vous loguer sur tous vos postes (client et serveur) et de retrouver votre unique home directory.

Commandes diverses

Visualiser les maps
Vous disposez de la commande ypcat qui vous permet d'éditer les maps, ainsi pour éditer la map passwd il suffit de taper:

ypcat passwd

Vous verrez donc tous les comptes accessibles sur le réseau.

Changer son mot de passe
Si vous voulez modifiez votre mot de passe, vous ne devez plus taper tout simplement passwd mais yppasswd pour que ça soit pris en compte dans la map passwd présente sur le serveur NIS.
Pour que ce soit transparent pour l'utilisateur vous pouvez très bien renommer passwd sur vos postes clients.

mv  /usr/bin/passwd /usr/bin/passwd.sansnis

Puis faire un lien de passwd vers yppasswd

ln -s /usr/bin/yppasswd /usr/bin/passwd

ATTENTION: il se peut qu'il y ait un léger temps de latence entre le temps où vous avez tapé votre mot de passe et le temps où le serveur NIS va reconstruire ses maps, donc ne vous étonnez pas si après modif du mot de passe, vous essayer de vous loguer et que vous vous faîtes jeter, il suffit d'attendre un peu ou de se loguer encore avec l'ancien mot de passe.

En cas de modif d'une map
Si sur le serveur NIS vous avez à changer une map (pour rajouter un poste dans /etc/hosts par exemple), il suffit d'aller dans /var/yp et de taper make, normalement les maps des serveurs slaves devraient être mises à jour automatiquement.
Sous l'unix d'HP, HP-UX, on trouve la commande ypmake qui réalise les fonctions suivantes :

cd /var/yp
make

Sous linux rien ne vous empêche de créer le script ypmake sous /usr/sbin contenant

#!/bin/bash
cd /var/yp
make

Avec les droits 744

chmod 744 /usr/sbin/ypmake

Installation d'un serveur slave

C'est une fonctionnalité que je n'ai pas testé, d'après la doc, il faut installer le package ypserv sur le serveur slave puis de taper

/usr/lib/yp/ypinit -s obelix

Retour haut de la page