Partage de fichier avec NFSv4 - Coté client

L’objectif de ce TP est de configurer la machine virtuelle clinux pour qu’elle monte, en NFSv4, les répertoires d’accueil des utilisateurs depuis le /srv/home du serveur de fichier : filer.

Toutes les manipulations de cette page, s’effectuent sur la machine clinux (en tant qu’utilisateur root). Vous pouvez également le faire sur la machine cfedora.

Pré-rquis

Avant tout, il est nécessaire que quelques pré-requis soient remplis pour que tout fonctionne bien.

  1. L’horloge de la machine doit être synchronisée avec celle du KDC et du serveur de fichier. Vérifier qu’il n’y a pas une dérive importante.

  2. La résolution de nom doit fonctionner (directe et inverse), vérifier qu’il possible
    • de résoudre l’adresse IP du KDC à partir de son nom complet (kdc.vbox.tp)
    • de résoudre le nom du KDC à partir de son adresse IP (résolution inverse)
    • de résoudre l’adresse IP du client NFS à partir de son nom complet (clinux.vbox.tp)
    • de résoudre le nom du client NFS à partir de son adresse IP (résolution inverse)
    • de résoudre l’adresse IP du serveur NFS à partir de son nom complet (filer.vbox.tp)
    • de résoudre le nom du serveur NFS à partir de son adresse IP (résolution inverse)
  3. L’identification des utilisateurs doit se faire à partir de l’annuaire LDAP
    • paquet libnss-ldapd
    • fichier /etc/nslcd.conf et /etc/nsswitch.conf
    • relancer les services nslcd et nscd
    • getent passwd pour vérifier si les utilisateurs de l’annuaire sont visibles
  4. Les outils pour la manipulation des objets Kerberos doivent être installés et configurés
    • paquets krb5-config, krb5-user
    • fichier /etc/krb5.conf

    Voir le fichier /etc/krb5.conf

Création des principals

Afin de dialoguer en toute confiance avec le serveur de fichier, il est nécessaire de créer deux principals pour le client. Et chaque machine cliente du serveur de fichier devra créer ces deux principals.

  • host/clinux.vbox.tp@VBOX.TP -> pour identifer la machine
  • nfs/clinux.vbox.tp@VBOX.TP -> pour identifier le service NFS

Pour une autre machine, il convient de remplacer, dans le nom du principal, clinux.vbox.tp par le nom d’hote complètement qualifié (FQDN) de la machine concernée.

  1. Depuis la machine clinux, créer ces deux principals à l’aide de l’outil kadmin :

    root@clinux$ kadmin  -p jack/admin@VBOX.TP
    Authenticating as principal jack/admin@VBOX.TP with password.
    Password for jack/admin@VBOX.TP: 
    kadmin: addprinc -randkey host/clinux.vbox.tp@VBOX.TP
    kadmin: addprinc -randkey nfs/clinux.vbox.tp@VBOX.TP
    
  2. Afin que les daemon du système puissent demander des tickets, il est nécessaire d’exporter les secrets dans un fichier keytab. Continuer dans kdamin pour créer le fichier /etc/krb5.keytab.

    kadmin: ktadd -k /etc/krb5.keytab host/clinux.vbox.tp@VBOX.TP
    kadmin: ktadd -k /etc/krb5.keytab nfs/clinux.vbox.tp@VBOX.TP
    kadmin: quit
    
  3. Vérifier que le fichier /etc/krb5.keytab est bien présent et qu’il possède bien les bonnes permissions.

    root@clinux$ ls -l /etc/krb5.keytab 
    -rw------- 1 root root 550 Sep 14 21:50 /etc/krb5.keytab
    
  4. Au besoin, vérifier le contenu du fichier keytab (deux secrets chiffrés avec quatre algorithmes différents).

    root@clinux$ klist -k /etc/krb5.keytab -e 
    

Configuration des outils NFS

  1. Dans le fichier /etc/default/nfs-common, positionner à yes les deux variables ci-dessous, de façon à ce que les daemon gssd et idmapd soient lancés.

    NEED_IDMAPD=yes
    NEED_GSSD=yes
    
  2. Configurer le daemon idmapd dans le fichier /etc/idmapd.conf. Le paramétrage des directives Domain, Local-Realms, Nobody-User et Noby-group doivent être rigoureusement identiques à ceux du serveur de fichier.

    Voir le fichier /etc/idmapd.conf

  3. Stopper puis relancer les outils NFS.

    root@clinux$ service nfs-common stop
    root@clinux$ service nfs-common start
    

Premier montage

Pour ne pas interférer avec les comptes locaux, notamment celui utilisé par vagrant, les répertoires d’accueil seront montés sous /nfs.

root@clinux$ mkdir /nfs
root@clinux$ mkdir /nfs/home

Il est maintenant tant d’essayer de monter le système de fichier du serveur de fichier (filer) sur le /nfs/home de la machine cliente.

root@clinux$ mount -t nfs4 -o sec=krb5i filer.vbox.tp:/home /nfs/home

Si tout s’est bien passé, la commande n’affiche rien et le contenu du /srv/home de filer doit maintenant apparaitre dans le /nfs/home de clinux.

Pour que le montage NFS persiste au prochain démarrage de la machine virtuelle clinux, il est préférable d’ajouter une ligne au fichier /etc/fstab.

filer:/home	/nfs/home	nfs4	auto,nodev,nosuid,sec=krb5i	0	0

Que faire si le montage n’a pas fonctionné ?

Tout d’abord vérifier que tous les pré-requis cités plus haut sont bien remplis. En particulier, s’assurer que la résolution DNS (directe et inverse) est bien fonctionnelle sur le client et le serveur. Vérifier également que les horloges du serveur et du client sont bien synchronisées avec celle du KDC.

Coté client

  1. Vérifier qu’il a obtenu un ticket nfs/filer.vbox.tp@VBOX.TP dans le crédential cache “machine”. Au besoin, surveiller le fichier journal /var/log/krb5kdc.log sur le kdc.

    root@clinux$ klist -c /tmp/krb5cc_machine_VBOX.TP
    
  2. S’assurer que les daemon gssd et idmapd sont bien lancés.

    root@clinux$ ps -f -C rpc.gssd -C rpc.idmapd
    
  3. Dans le fichier /etc/default/nfs-common, passer le deamon gssd en mode verbeux

    RPCGSSDOPTS="-vvv"
    
  4. Dans le fichier /etc/idmapd.conf, passer le daemon idmapd en mode verbeux avec

    Verbosity = 6
    
  5. Relancer le service nfs-common et regarder les messages des journaux /var/log/daemon.log et /var/log/messages.

    root@clinux$ service nfs-common restart
    

Coté serveur

  1. Vérifier qu’il n’y a pas de mécanismes de filtrage qui empêchent la communication entre le client et le serveur (iptables, fichiers /etc/hosts.deny et /etc/hosts.allow)

  2. S’assurer que les daemon svcgssd, idmapd, nfsd et mountd sont bien lancés.

    root@filer$ ps -f -C rpc.svcgssd -C rpc.idmapd -C nfsd -C rpc.mountd
    
  3. Dans le fichier /etc/default/nfs-kernel-server, passer les daemon svcgssd et mountd en mode verbeux en spécifiant ces deux variables

    RPCMOUNTD="-d all"
    RPCSVCGSSDOPTS="-vvv"
    
  4. Dans le fichier /etc/idmapd.conf, passer le daemon idmapd en mode verbeux avec

    Verbosity = 6
    
  5. Relancer le service nfs-common et nfs-kernel-server. Puis,regarder les messages des journaux /var/log/daemon.log et /var/log/messages.

    root@filer$ service nfs-kernel-server stop
    root@filer$ service nfs-common stop
    root@filer$ service nfs-common start
    root@filer$ service nfs-kernel-server start
    
  6. Lancer tcpdump sur le bridge du résau interne où sont connectées toutes les VM pendant l’éxecution de la commande mount. S’aider ensuite du logiciel wireshark pour reconstituer les différents appels du protocole et voir où cela bloque.