5. Configuration du client NIS

À la différence du protocole NFS, les outils du client et du serveur NIS sont contenus dans le même paquet.

Que le poste soit client ou serveur, il faut passer par les mêmes étapes de configuration commune : désigner le serveur NIS et fixer le nom de domaine NIS. La notion de nom de domaine propre au service NIS est comparable au mécanisme de résolution WINS lié à netbios sur les systèmes Micro$oft.

Q11.

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.

Q12.

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 client, il n'est pas nécessaire de modifier ce fichier sachant qu'il s'agit du rôle attribué par défaut.

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

Q13.

Quelle est l'opération à effectuer pour (ré)affecter le nom du domaine NIS ? Quel est le fichier de configuration concerné ?

Rechercher l'outil de reconfiguration de paquet ainsi que les options permettant de parcourir les écrans de configuration. Il faut noter que les réponses aux menus de configuration des paquets sont enregistrées.

Consulter le support Debian NIS howto pour identifier le fichier dans lequel le nom de domaine NIS est stocké.

La commande de reconfiguration du paquet nis est : # dpkg-reconfigure -plow nis.

Le nom de domaine NIS est stocké dans le fichier /etc/defaultdomain.

Q14.

Quelle est la méthode de recherche par défaut du serveur NIS ? Quel est le type du flux réseau ?

Effectuer une capture réseau en mode console avec tshark pour identifier la nature du trafic émis par le client NIS.

$ tshark -i eth0 ! port 22
Capturing on eth0
192.0.2.11 -> 192.0.2.31   Portmap 146 V2 CALLIT Call
192.0.2.11 -> 192.0.2.31   Portmap 146 [RPC retransmission of #1]V2 CALLIT Call
192.0.2.11 -> 192.0.2.31   Portmap 146 [RPC retransmission of #1]V2 CALLIT Call

La capture réseau ci-dessus a été réalisée dans le réseau 192.0.2.0/27 dont l'adresse de diffusion est 192.0.2.31. Le client recherche donc le serveur à l'aide de paquets de diffusion. Dans notre contexte, on se propose d'identifier le serveur de façon à limiter le recours à la diffusion.

Q15.

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 2001:db8:feb2:10::12
ypserver 192.0.2.12
[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.

Q16.

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 utiliser 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 deux exmples d'exécution produisant les mêmes résultats.

# rpcinfo -s 192.0.2.12
program version(s) netid(s)                         service     owner
 100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
 100007  1,2       tcp,udp                          ypbind      superuser
# rpcinfo -s 2001:db8:feb2:10::12
program version(s) netid(s)                         service     owner
 100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
 100007  1,2       tcp,udp                          ypbind      superuser

Si le démon ypbind n'est 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

Q17.

Quels sont les numéros de ports utilisés ainsi que la famille de protocole de couche réseau utilisés ?

Réaliser une capture lors de l'exécution l'outil obtenu à la question précédente et relever les numéros de ports caractéristiques de cette transaction.

Client                               Serveur
-----------------------------------------------

ypbind    --- requête RPC bind --->  portmapper

ypbind    <--- numéro de port ----   portmapper

ypbind    --- requête RPC bind --->  ypserv

ypbind    <--- réponse ------------  ypserv

On exécute la commande # rpcinfo -s 2001:db8:feb2:10::12.

# rpcinfo -s 2001:db8:feb2:10::12
   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

La copie d'écran ci-dessus montre que les services liés à NIS utilisent exclusivement IPv4 alors que le portmapper utilise les deux familles de protocoles.

La capture réseau correspondant à l'exécution de la commande montre que le service portmapper est sollicité pour obtenir la liste des services RPC disponibles sur l'hôte.

  • Le service portmapper est repéré à partir du nom du port distant : sunrpc.

    $ grep sunrpc /etc/services 
    sunrpc          111/tcp         portmapper      # RPC 4.0 portmapper
    sunrpc          111/udp         portmapper
  • Le protocole de couche transport utilisé est TCP.

  • Le protocole de couche réseau utilisé est IPv6.

$ tshark -i eth0 ! port 22
Capturing on eth0
2001:db8:feb2:10::11 -> 2001:db8:feb2:10::12 TCP 94 sanity > sunrpc [SYN] Seq=0
2001:db8:feb2:10::12 -> 2001:db8:feb2:10::11 TCP 94 sunrpc > sanity [SYN, ACK] Seq=0 Ack=1
2001:db8:feb2:10::11 -> 2001:db8:feb2:10::12 TCP 86 sanity > sunrpc [ACK] Seq=1 Ack=1
2001:db8:feb2:10::11 -> 2001:db8:feb2:10::12 Portmap 130 V3 DUMP Call
2001:db8:feb2:10::12 -> 2001:db8:feb2:10::11 TCP 86 sunrpc > sanity [ACK] Seq=1 Ack=45
2001:db8:feb2:10::12 -> 2001:db8:feb2:10::11 Portmap 1398 V3 DUMP Reply (Call In 6)
2001:db8:feb2:10::11 -> 2001:db8:feb2:10::12 TCP 86 sanity > sunrpc [ACK] Seq=45 Ack=1313
2001:db8:feb2:10::11 -> 2001:db8:feb2:10::12 TCP 86 sanity > sunrpc [FIN, ACK] Seq=45 Ack=1313
2001:db8:feb2:10::12 -> 2001:db8:feb2:10::11 TCP 86 sunrpc > sanity [FIN, ACK] Seq=1313 Ack=46
2001:db8:feb2:10::11 -> 2001:db8:feb2:10::12 TCP 86 sanity > sunrpc [ACK] Seq=46 Ack=1314

En affectant un nom de domaine spécifique au service NIS, on a ouvert un nouveau mécanisme de requête sur les informations des utilisateurs et des hôtes. Pour que ce mécanisme de résolution soit utilisé, il faut compléter la configuration du commutateur de service de résolution de noms (name service switch ou NSS).

Q18.

Quelles sont les opérations à effectuer pour que le service NIS soit consulté à chaque requête de résolution de nom ? Quel sont les fichiers de configuration concernés ?

Consulter le support Debian NIS howto ainsi que la liste des fichiers du paquet.

Le fichier de configuration concerné est /etc/nsswitch.conf. Dans ce fichier l'entrée concernée par la résolution des noms est la ligne débutant par hosts:. Pour que le service NIS soit utilisé, il est nécessaire d'ajouter l'option nis entre files et dns.

# grep ^hosts /etc/nsswitch.conf 
hosts:          files nis dns

Q19.

Quelle est la commande qui permet de lister les informations diffusées via le service NIS ?

Rechercher dans le support The Linux NIS(YP)/NYS/NIS+ HOWTO et consulter la liste des commandes yp* fournies avec le paquet.

La commande recherchée est ypcat. On donne un exemple d'exécution ci-dessous.

# ypcat hosts
2001:db8:feb2:10::12  ip6-srvr
2001:db8:feb2:10::11  ip6-clnt
192.0.2.12      srvr
127.0.0.1       localhost
192.0.2.11      clnt

Q20.

Comment faire en sorte que les comptes utilisateur publiés via le service NIS soient utilisables sur les postes clients ?

Consulter les rubriques relatives aux utilisateurs et aux groupes de la section 2 de la page Debian NIS howto

On doit compléter les fichiers locaux aux clients NIS pour que les informations publiées via le service soient vues comme si elles étaient locales.

# echo "+::::::" >>/etc/passwd
# echo "+::::::::" >>/etc/shadow
# echo "+:::" >>/etc/group

Q21.

Comment valider l'accès aux ressources via le commutateur Name Service Switch (NSS) local au client ?

Rechercher la commande qui affiche les entrées des bases de données prises en charge par les bibliothèques du Name Service Switch (NSS). On peut utiliser une recherches par mots clés dans les pages de manuels.

La recherche # man -k NSS donne une liste de pages de manuels d'outils. Dans cette liste, il est relativement aisé de repérer l'outil getent. Il suffit ensuite de consulter les pages de manuels de cet outil pour relever les options qui nous intéressent.

# getent passwd | grep etu
etu:x:1000:1000:Etudiant,,,:/home/etu:/bin/bash
etu-nis:x:2000:2000:Etudiant NIS,,,:/ahome/etu-nis:/bin/bash
# getent group | grep etu
cdrom:x:24:etu
floppy:x:25:etu
audio:x:29:etu
dip:x:30:etu
video:x:44:etu
plugdev:x:46:etu
etu:x:1000:
wireshark:x:107:etu
etu-nis:x:2000:

Q22.

Comment valider l'accès au compte utilisateur distant ? Quelle est la partie manquante à cette étape de la configuration ?

Rechercher l'outil qui permet de changer d'identité au niveau du système. L'identité à adopter est etu-nis.

L'outil à utiliser est su.

# su etu-nis
$ cd
bash: cd: /ahome/etu-nis: Aucun fichier ou dossier de ce type
$ id
uid=2000(etu-nis) gid=2000(etu-nis) groupes=2000(etu-nis)
$ exit

La copie d'écran ci-dessus montre que le changement d'identité a bien fonctionné mais que le répertoire utilisateur n'est pas accessible. Pour qu'un répertoire utilisateur distant soit vu comme un répertoire local, il faut nécessairement disposer d'un système de fichiers réseau. Cette dernière condition peut être satisfaite à l'aide du service d'automontage.