Les permissions de fichier sur le assembly NFS s’affichent comme “personne” après la mise à niveau vers 14.04

J’ai un serveur Ubuntu 12.04 qui exporte quelques systèmes de fichiers sur NFS.

server$ cat /etc/exports /home 192.168.42.0/255.255.255.0(rw,anonuid=65534,anongid=65534,async,no_subtree_check) /stuff 192.168.42.0/255.255.255.0(rw,anonuid=65534,anongid=65534,async,no_subtree_check) /stuff 192.168.99.0/255.255.255.0(ro,anonuid=65534,anongid=65534,async,no_subtree_check) 

J’ai aussi un client qui les monte:

 client$ cat /etc/fstab ... server:/home /home nfs hard,intr,rsize=8192,wsize=8192,_netdev 0 0 server:/stuff /server/stuff nfs hard,intr,rsize=8192,wsize=8192,_netdev 0 0 

L’adresse IP du client est comprise dans la plage 192.168.42.x. Il fonctionnait Ubuntu 10.04 jusqu’à hier. NFS a bien fonctionné, plus ou moins (parfois, il ne fonctionnait pas automatiquement au démarrage, mais j’avais un script cron pour détecter et résoudre ce problème).

J’ai mis à jour le client vers Ubuntu 12.04 hier et je l’ai redémarré. NFS a continué à bien fonctionner.

J’ai mis à jour le client vers Ubuntu 14.04 aujourd’hui et je l’ai redémarré. Maintenant, NFS est monté mais toutes les informations de propriété de fichier ne sont mappées à personne: 4294967294:

 client$ ls -ld /home/weblate drwxr-xr-x 5 nobody 4294967294 4096 Jan 29 2014 weblate 

Pourquoi est-ce cela et que dois-je faire pour que la propriété de fichier fonctionne à nouveau?

L’indice essentiel est apparu dans /var/log/syslog :

 Sep 16 13:11:07 client nfsidmap[7340]: nss_getpwnam: name 'www-data@lan' does not map into domain 'localdomain' 

combiné avec cet extrait de NFSv4Howto

Si toutes les listes de répertoires affichent uniquement “personne” et “nogroupe” au lieu de noms d’utilisateur et de groupe réels, vous pouvez vérifier le paramètre de domaine défini dans /etc/idmapd.conf. Le client et le serveur NFSv4 doivent appartenir au même domaine.

et ce commentaire dans /etc/idmap.conf :

 # set your own domain here, if id differs from FQDN minus hostname # Domain = localdomain 

Ainsi, mon serveur pense que son domaine est lan :

 server$ hostname -f server.lan server$ grep server /etc/hosts 127.0.1.1 server.lan server 

alors que mon client n’avait pas de domaine:

 client$ hostname -f client client$ grep client /etc/hosts 127.0.1.1 client 

Le correctif: éditez /etc/hosts sur le client pour le lire

 127.0.1.1 client.lan client 

et redémarrez.

J’ai résolu mon problème par cette méthode. Ouvrez le fichier /etc/nfsmount.conf et recherchez Nfsvers= .

Décommentez cette ligne et écrivez la version NFS prise en charge par votre serveur. La mienne avait 3 ans alors j’ai écrit:

 Nfsvers=3 

J’ai redémarré le serveur NFS.