Notre beau Tractopelle est à peu près opérationnel, mais on aimerait pouvoir commencer à placer des fichiers dessus, installer des répertoires dans notre espace perso, le tout en restant confortablement installé devant notre PC client habituel (Poopy).
On va devoir pour cela mettre en place un serveur NFS sur Tractopelle afin d'être en mesure de monter un système de fichiers distant (un répertoire sous le /home de Tractopelle) dans notre système de fichiers local sur Poopy (/home/web, /home/www, /home/tractopelle, /home/monsiteweb ou que sais-je...).
Comment ça marche en gros, NFS ? Eh bien, le service nfsd va s'occuper "d'exporter" un répertoire de Tractopelle, lequel sera visible par un PC client, ici Poopy.
Poopy a un utilisateur régulier, appzer0 (moi, quoi). J'aimerais que les fichiers créés ou modifiés sur Tractopelle m'appartiennent, quand même ! Comment faire, alors qu'appzer0 n'existe pas sur cet ordi ?
Eh bien, on doit retrouver les mêmes ID sur les 2 PC, tout simplement (si j'ose dire).
Créons dès à présent le répertoire de l'utilisateur sur Tractopelle :
root@Tractopelle:/home$ mkdir -p /home/www/appzer0
Créer un utilisateur invité sur le serveur
Généralement sous Slackware, une fois fraîchement installée, je crée d'emblée mon utilisateur (appzer0), celui-ci se retrouve affublé d'un identifiant d'utilisateur, l'UID, et d'un identifiant de groupe (le GID). Chaque fois, appzer0 se retrouve avec un UID de 1000 et fait partie du groupe users, dont le GID est 100.
appzer0@Poopy:~$ id
uid=1000(appzer0) gid=100(users)
L'idéal serait donc de créer un utilisateur fictif sur Tractopelle, dont les ID seraient les mêmes qu'appzer0. Cet utilisateur ne doit pas avoir de shell sur Tractopelle, on va donc le restreindre à utiliser un shell qui n'existe pas, /bin/false. Ce shell n'existe pas en effet ; ajoutons-le donc au système avant tout !
echo '/bin/false' >> /etc/shells
Maintenant, créons, toujours sur Tractopelle, l'utilisateur fictif invite (ou guest, ou internaute, etc.) via adduser (ou en une seule ligne via useradd avec les bons paramètres) :
root@Tractopelle:/home$ adduser
Le tout est de bien s'assurer que les ID seront (UID et GID) bien exactement les mêmes sur les 2 PC.
J'ai donc créé un utilisateur, "invite", ne possédant pas de shell, mais ayant les mêmes ID que mon utilisateur habituel (UID 1000 et GID 100) :
root@Tractopelle:~# cat /etc/passwd | grep invite
invite:x:1000:100:,,,:/home/invite:/bin/false
Bon ça va, on a compris là !
OK, passons à NFS lui-même. Côté serveur.
Tout se passe dans le fichier de configuration de nfsd, /etc/exports. On voit ci-dessous ce que j'ai entré sur une seul et même ligne :
root@Tractopelle:~# cat /etc/exports | grep Poopy
/home/www/appzer0 Poopy(no_subtree_check,rw,sync,root_squash,anonuid=1000,anongid=100)
Dans l'ordre donc : le répertoire auquel je veux accéder depuis mon PC Poopy, suivi d'un espace et du nom de l'ordi qui doit y accéder (cela peut être une adresse IP) puis _sans aucune espace__ entre le PC et la parenthèse ouvrante (c'est important)(si, si) les options à appliquer.
Je ne saurai que trop vous conseiller la page de manuel de exports pour connaitre les options disponibles. Ce sont les options que j'utilise systématiquement car elles offrent un comportement "normal" et transparent à l'utilisation, à mes yeux évidemment.
Une attention toute particulière aux options anonuid et anongid, lesquelles font en sorte que les fichiers manipulés via cette connexion NFS appartiendront à l'utilisateur d'UID 100 et de GID 1000 (donc appzer0 sur Poopy ET invite sur Tractopelle !).
On est ici dans un contexte de confiance (réseau local). Ajoutons donc Poopy aux hôtes autorisés à se connecter et à utiliser des services réseau.
On ajoute l'IP ou le nom d'hôte à autoriser - j'ai mis l'IP de Poopy personnellement, vu qu'elle est fixe, précédée du ou des services réseau autorisés ; « ALL: » désignant tous les services réseau. J'ai également ajouté l'IP de myxine (oui, j'ai une confiance aveugle en mon réseau local
)
root@Tractopelle:~# cat /etc/hosts.allow
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided by
# the '/usr/sbin/tcpd' server.
#
# Version: @(#)/etc/hosts.allow 1.00 05/28/93
#
# Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org
#
#
ALL:192.168.0.10
ALL:192.168.0.11
# End of hosts.allow.
Avant de lancer quoi que ce soit, repassons sur le poste client, Poopy, afin de configurer NFS de ce côté.
En fait, on va simplement créer le répertoire dans lequel on veut monter le répertoire partagé (j'ai choisi personnellement web_tractopelle), renseigner le fichier /etc/fstab afin que le montage NFS soit automatique ou plus aisé puis exécuter le service nfsd ; on sera alors paré :
root@Poopy:~# mkdir /home/appzer0/web_tractopelle
root@Poopy:~# cat /etc/fstab | grep Tractopelle
Tractopelle:/home/www/appzer0 /home/appzer0/web_tractopelle nfs hard,intr,user 0 0
On notera que le système de fichiers est simplement nfs et qu'on retrouve 2 options propres à NFS. Je vous renvoie au manuel pour les options disponibles. On peut également et comme à l'accoutumée spécifier une IP plutôt qu'un nom d'hôte, suivi de deux-points, du chemin du répertoire « exporté » puis du chemin du point de montage désiré.
On n'a plus qu'à rendre et exécutable et à lancer le service nfsd :
root@Poopy:~# chmod +x /etc/rc.d/rc.nfsd
root@Poopy:~# /etc/rc.d/rc.nfsd start
Avant de monter le partage, lançons le service sur Tractopelle (sans serveur, les clients seraient bien seuls, comme au restaurant).
root@Tractopelle:~# chmod +x /etc/rc.d/rc.nfsd
root@Tractopelle:~# /etc/rc.d/rc.nfsd start
Repassons sur Poopy et montons le partage avec par exemple :
root@Poopy:~# mount -a
Seul /dev/pts devrait se plaindre qu'il est déjà monté.
Passons en simple utilisateur et créons un fichier par exemple :
appzer0@Poopy:~# cd /home/appzer0/web_tractopelle
appzer0@Poopy:~# echo 'coucou !' > coucou.txt
appzer0@Poopy:~# ls -al
On devrait faire tout cela sans encombres en tant qu'utilisateur normal ayant un UID 1000 et de GID 100.
On procèdera donc de même pour chaque machine devant accéder au serveur via NFS.
On peut enfin travailler ! 