3. Configuration du serveur NIS

Cette partie reprend les étapes décrites dans le support Introduction au service NIS. Il s'agit d'installer le paquet nis, d'initialiser une base avec le bon contexte de nommage puis d'implanter un compte utilisateur ainsi que la configuration de l'automontage.

Q1.

Quel est le paquet qui contient les outils du service NIS ? Comment installer ce paquet ?

Rechercher la chaîne de caractères "network information service" dans les descriptions de paquets pour identifier le paquet à installer.

Identification du paquet :

$ aptitude search '?description(network information service)'
p   libnet-nis-perl      - Interface to Sun's Network Information Service
p   melange              - IPAM management service for Openstack - Daemons
p   nis                  - clients and daemons for the Network Information Service (NIS)
p   python-melange       - IPAM management service for Openstack - Python library

Installation du paquet nis :

# aptitude install nis
Les NOUVEAUX paquets suivants vont être installés : 
  libgssglue1{a} libslp1{a} libtirpc1{a} nis rpcbind{a} 
<snipped/>
[ ok ] Starting rpcbind daemon....
Paramétrage de nis (3.17-32) ...
[ ok ] Stopping NIS services: ypbind ypserv ypppasswdd ypxfrd.
[info] Setting NIS domainname to: nis.lab.
[FAIL] Starting NIS services: ypbind[....] binding to YP server..failed (backgrounded).
. ok

Lors de l'installation du paquet, on attribue un nom de domaine NIS. Dans cette exemple, le domaine est : nis.lab. Ce nom de domaine est à priori sans rapport avec le service de résolution des noms de domaine de l'Internet : le service DNS.

Q2.

Quelle est l'opération à effectuer pour affecter le rôle NIS du poste ? Quel est le fichier de configuration concerné ?

Consulter le script système de lancement du service (runlevels) et identifier le fichier de configuration à éditer.

# grep '/etc/default' /etc/init.d/nis
# Customize the variables in /etc/default/nis rather than here
[ -f /etc/default/nis ] && . /etc/default/nis
test -f ${NET}/ypbind -a -f /etc/defaultdomain || exit 0
        nname=`cat /etc/defaultdomain`

Le répertoire /etc/default/ contient les fichiers de paramétrage des services. Ces fichiers sont consultés à chaque lancement des services à partir des scripts d'initialisation (runlevels) du répertoire /etc/init.d/. Il faut donc éditer le fichier /etc/default/nis pour affecter le rôle client ou serveur.

Dans le cas du serveur, il est pas nécessaire de modifier ce fichier sachant que le rôle client est attribué par défaut. Pour faciliter la mise au point, il est aussi très pratique de se déclarer client de son propre service.

# grep ^NIS /etc/default/nis
NISSERVER=master
NISCLIENT=true
NISMASTER=

Q3.

Quelle est l'opération à effectuer pour désigner le serveur NIS ? Quel est le fichier de configuration concerné ?

Rechercher les éléments relatifs à la la désignation du serveur dans la liste des fichiers de configuration fournis avec le paquet.

Éditer ce fichier en indiquant l'adresse IP du serveur NIS.

Le fichier recherché est yp.conf.

# dpkg -L nis | grep 'yp.conf'
/usr/share/man/man5/yp.conf.5.gz
/etc/yp.conf

Dans notre cas le fichier contient les deux instructions suivantes.

# grep -v '^#' /etc/yp.conf 

ypserver ::1
ypserver 127.0.0.1
[Note] Note

Cet exemple est basé sur l'utilisation d'une double pile réseau IPv4 + IPv6. La capture réseau donnée ci-avant montre que seule la pile réseau IPv4 est utilisée par le démon client NIS.

Q4.

Quel est l'outil qui permet de lister les services accessibles via un appel RPC ? Comment peut-on relancer le service NIS s'il n'est pas actif ?

Rechercher dans le support The Linux NIS(YP)/NYS/NIS+ HOWTO l'outil utilisé pour interroger le multiplexeur d'appel de procédure distant.

L'outil à utiliser est rpcinfo. Il est fourni par le paquet rpcbind.

# dpkg -S `which rpcinfo` 
rpcbind: /usr/sbin/rpcinfo

L'option historique -p liée à IPv4 a été remplacée par -s pour tenir compte des deux protocoles de couche réseau. Voici un exmple d'exécution.

# rpcinfo -s
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
    100004  1,2       tcp,udp                          ypserv      superuser
    100009  1         udp                              yppasswdd   superuser
 600100069  1         tcp,udp                          fypxfrd     superuser
    100007  1,2       tcp,udp                          ypbind      superuser
    100024  1         tcp6,udp6,tcp,udp                status      102

Si les démons ypbind et ypserv ne sont pas présent dans la liste des services ouverts, on doit faire appels aux scripts des niveaux de démarrage (runlevels) pour relancer le service. Deux méthodes sont disponibles.

# /etc/init.d/nis restart
# service nis restart

Q5.

Où sont placés les fichiers de base de données NIS dans l'arborescence système ?

Rechercher dans le support The Linux NIS(YP)/NYS/NIS+ HOWTO ainsi que dans la liste des fichiers et répertoires du paquet.

Par définition, les données d'un service doivent se trouver dans l'arborescence /var. On recherche donc cette arborescence dans la liste des fichiers du paquet.

# dpkg -L nis | grep var
/var
/var/yp
/var/yp/Makefile
/var/yp/nicknames

Le répertoire recherché est donc /var/yp.

Q6.

Quel est le procédé utilisé par le service NIS pour publier les informations à destination des clients ? Quel est l'outil utilisé pour générer les données du service ?

Consulter le support The Linux NIS(YP)/NYS/NIS+ HOWTO, la documentation fournie avec le paquet ainsi que les fichiers contenus dans le répertoire identifié à la question précédente.

Le répertoire /var/yp contient un fichier Makefile qui gère les appels à la fonction de hachage utilisée pour traiter les fichiers de configuration du serveur NIS. L'outil make utilise automatiquement ce fichier et déclenche le hachage d'un fichier de configuration dès que celui-ci a été modifié.

Les résultats des différents hachages sont ensuite publiés via les appels de procédures distants (RPC) traités respectivement par les démons ypbind et ypserv du client et du serveur.

Exemple d'exécution de l'outil make.

# make
make[1]: entrant dans le répertoire « /var/yp/nis.lab »
Updating netid.byname...
make[1]: quittant le répertoire « /var/yp/nis.lab »
[Note] Note

L'outil make doit nécessairement être exécuté à partir du répertoire /var/yp.

Q7.

Quels sont les fichiers de configuration propagés par défaut par le serveur NIS ?

Consulter le support The Linux NIS(YP)/NYS/NIS+ HOWTO la documentation fournie avec le paquet ainsi que les fichiers contenus dans le répertoire contenant les données du service NIS.

C'est le fichier Makefile qui contient les directives de hachage. La règle utilisée par défaut est désignée par le mot clé all:.

# grep -i ^all Makefile 
ALL =   passwd group hosts rpc services netid protocols netgrp
ALL += shadow
ALL += passwd.adjunct
all:   $(ALL)

Q8.

Comment faire pour que les identifiants utilisateur uid et gid diffusés via le service NIS soient comptés à partir de 2000 ?

Reprendre le fichier de configuration utilisé à la question précédente et repérer les directives relatives aux identifiants utilisateur.

Le Makefile contient deux variables qui donnent les valeurs minimum des identifiants.

# grep ^MIN[G,U]ID Makefile 
MINUID=1000
MINGID=1000

Il faut alors éditer le fichier pour passer à 2000.

Q9.

Comment créer un nouveau compte utilisateur baptisé etu-nis ayant justement la valeur 2000 pour les identifiants uid et gid ? Comment publier ce nouveau compte utilisateur via le service NIS ?

Rechercher dans la liste des options de l'outil de création des comptes utilisateur «locaux».

L'outil de création de compte utilisateur est adduser et les options à utiliser sont --uid et --gid. Cependant, l'utilisation de la dernière option suppose que le groupe soit préexistant. On réalise donc l'opération en deux étapes.

  • On commence par la création du groupe.

    # addgroup --gid 2000 etu-nis
    Ajout du groupe « etu-nis » (GID 2000)...
    make: entrant dans le répertoire « /var/yp »
    make[1]: entrant dans le répertoire « /var/yp/nis.lab »
    <snip/>
  • On passe ensuite à la création du compte proprement dit.

    # adduser --home /ahome/etu-nis --uid 2000 --ingroup etu-nis etu-nis
    Ajout de l'utilisateur « etu-nis » ...
    make: entrant dans le répertoire « /var/yp »
    <snip/>
    Ajout du nouvel utilisateur « etu-nis » (2000) avec le groupe « etu-nis » ...
    make: entrant dans le répertoire « /var/yp »
  • Enfin, on vérifie que les bons identifiants ont été attribués.

    # id etu-nis
    uid=2000(etu-nis) gid=2000(etu-nis) groupes=2000(etu-nis)

Q10.

Quels sont les tests à effectuer pour valider la publication des données via le service NIS ?

Consulter la liste des commandes yp* fournies avec le paquet nis.

La commande utile est ypcat et les ressources à lister sont relatives aux fichiers système /etc/passwd et /etc/group.

# ypcat passwd
etu-nis:x:2000:2000:Etudiant NIS,,,:/ahome/etu-nis:/bin/bash
# ypcat group
etu-nis:x:2000: