Labo 6 - Partages de répertoires avec NFS
Retour à la page du cours
Pour ce sixième et dernier laboratoire, encore de l'exploration. Cette fois-ci, vous mettrez en place des partages de répertoires similaires à ceux qu'on peut faire dans un réseau Microsoft, mais en utilisant l'équivalent du monde Unix: NFS.
NFS signifie Network File System et permet de partager un répertoire afin d'y accéder à partir d'un autre serveur. Le tout se fait donc en deux temps:
- Le serveur partage un répertoire qu'il contient.
- Le client monte ce partage dans un répertoire vide de son arborescence. Dès qu'il se déplacera dans ce répertoire, il se retrouvera en fait dans le répertoire partagé du serveur.
Pour que tout ça fonctionne, il faut savoir que:
- nfs est un service, que l'on peut démarrer (ou s'assurer qu'il démarre avec la machine)
- nfs a besoin que le service portmap (aussi appelé rpcbind) soit en exécution pour pouvoir fonctionner (donc il faut s'assurer que ce service est déjà en fonction).
- le répertoire à partager doit exister (eh oui) et on doit ajuster ses permissions pour permettre aux others d'y accéder (au minimum rx, peut-être w si on veut).
- les partages sont définis dans le fichier /etc/exports, qu'il faudra créer s'il n'existe pas.
Un man exports vous donnera plus d'infos (en fait, trop d'infos). Au minimum:
- On inscrit une ligne par partage
- La ligne commence par le chemin absolu du répertoire à partager, suivi d'un espace
- Ensuite, on peut ajouter un nom de machine, une adresse ou une paire adresse/masque suivi d'une liste d'options s'appliquant à cette machine ou ce réseau. Par exemple: georges(ro) ou encore 192.168.0.0/24(rw)
- Si on veut, on peut lister plusieurs machines ou réseaux de cette façon, en les séparant par des espaces (mais en n'oubliant pas les options entre parenthèses après chaque machine/réseau.
- Les options les plus utiles sont sans contredit ro pour read only et rw pour read-write.
- nfs et portmap (ou rpcbind) utilisent tous les deux des ports udp et tcp qui devront être ouverts sur iptables pour que tout fonctionne bien.
- en plus, portmap utilise par défaut une série de ports choisis au hasard pour réussir ses connexions, ce qui ne nous simplifie pas la vie quand on veut utiliser un pare-feu... La solution est de modifier sa configuration pour le forcer à utiliser des ports prévus d'avance. Pour cela, on modifiera le fichier /etc/sysconfig/nfs et on enlèvera le # avant certaines lignes pour les rendre valides. On changera également le port en passant, pour utiliser ceci:
- STATD_PORT: 10002
- STATD_OUTGOING_PORT: 10003
- MOUNTD_PORT: 10004
- RQUOTAD_PORT: 10005
- LOCKD_UDPPORT: 30001
- LOCKD_TCPPORT: 30001
Du coup, on peut ouvrir en plus dans iptables les ports:
- 10004 et 10005 (tcp et udp)
- 32771 (tcp) pour nlockmgr, un autre sous-service utile
- 32768 (udp) toujours pour nlockmgr
- il ne faut pas oublier de redémarrer nfs après des changements de ports ou dans le fichier /etc/exports.
Du côté du client, la commande suivante devrait faire l'affaire:
mount -t nfs serveur:/répertoire /rép_local
Le "serveur" peut être un nom ou une adresse et /rép_local peut être le chemin vers n'importe quel répertoire local existant.
On peut le démonter simplement avec:
umount /rép_local
Si on veut que le partage soit monté automatiquement au démarrage, on ajoutera la ligne suivante à /etc/fstab:
serveur:/répertoire /rép_local nfs auto,rw,user,soft 0 0
SElinux
Du côté de SElinux, NFS sera évidemment bloqué par défaut. Il est toutefois assez simple de le configurer en utilisant les variables booléennes appropriées. Plus de détails en faisant un man nfs_selinux.
Quelques expérimentations
Créez un partage sur une machine et tentez d'y accéder manuellement à partir d'une autre.
Tentez ensuite de faire en sorte que tout soit automatisé du côté serveur comme du côté client. Redémarrez le serveur, puis ensuite le client. Assurez-vous que tout fonctionne encore.
Quelques questions
Que doit-on faire pour configurer SElinux de façon à permettre l'utilisation de NFS?
Qu'arrive-t-il si /etc/exports ne respecte pas le format prévu?
À quoi servent les options auto, rw, user et soft à ajouter dans /etc/fstab?
Quel usager se retrouve propriétaire des fichiers mis dans le partage par un client?
Qu'arrive-t-il si le répertoire partagé sur le serveur ne donne pas l'autorisation d'écrire (au niveau du système de fichiers) mais que la configuration dans /etc/exports en donne le droit? Et si c'est le contraire?
Est-ce que nfs a besoin d'être en fonction sur la machine du client?
Comment peut-on s'assurer que nfs et portmap démarrent automatiquement avec le serveur?
Comment peut-on vérifier que portmap démarre avant nfs, afin que la dépendance soit respectée?
Retour à la page du cours