Vous êtes sur la page 1sur 8

Implémenter le serveur de partage

NFS
Sommaire
1. Présentation de protocole NFS
2. Configuration de protocole NFS
3. Sécuriser le serveur NFS

1. Présentation de protocole NFS


a. Introduction
Network File System (ou « NFS », système de fichiers en réseau) est à l'origine un
protocole développé par Sun Microsystems en 1984 qui permet à un ordinateur d'accéder à
des fichiers via un réseau. Il fait partie de la couche application du modèle OSI et utilise le
protocole RPC.
Ce système de fichiers en réseau permet de partager des données principalement
entre systèmes UNIX. Des versions existent pour Macintosh ou Microsoft Windows.
NFS est compatible avec IPv6 sur la plupart des systèmes.
b. Versions NFS
 Les versions 1 et 2 sont non sécurisées, prévues pour fonctionner sur UDP.
 La version 3 est étendue pour prendre en charge TCP.
 À ce stade la gestion de la sécurité reste élémentaire et souffre d'importantes
lacunes. Le système est sans état (stateless) et ne permet pas la reprise sur incidents.
 La version 4 du protocole marque une rupture totale avec les versions précédentes.
L'ensemble du protocole est repensé, et les codes sont réécrits.
o Il s'agit d'un système de fichiers objet.
 Imaginée pour répondre aux besoins d'Internet, NFSv4 intègre :
o Une gestion totale de la sécurité :
 Négociation du niveau de sécurité entre le client et le serveur
 Sécurisation simple, support de kerberos5, certificats SPKM et LIPKEY4
 Chiffrement des communications possible (kerberos 5p par exemple)
 Support accru de la montée en charge :
 Réduction du trafic par groupement de requêtes (compound)
 Délégation (le client gère le fichier en local)
o Systèmes de maintenances simplifiés :
 Migration : le serveur NFS est migré de la machine A vers la machine B
de manière transparente pour le client
 Réplication : le serveur A est répliqué sur la machine B
o Reprise sur incidents
 La gestion de la reprise sur incident est intégrée du côté client et du
côté serveur.
o Compatibilité :
 NFSv4 peut être utilisé sous Unix et sous MS-Windows. Il est
disponible sur Mac depuis MacOS X Lion (10.7)5.
 Support de plusieurs protocoles de transports (TCP, RDMA)
 Cependant ces améliorations de NFSv4 rendent NFSv4 incompatible avec NFSv3.
Notamment, la reprise sur incident et la délégation impliquent que NFSv4 soit un
serveur à état (statefull), non compatible avec les précédentes versions.
o De plus, NFSv4 n'est pas prévu pour pouvoir utiliser le protocole UDP.

Pour toutes ces raisons il est hautement préférable d'utiliser NFSv4 plutôt que NFSv3,
dans la mesure où une migration totale est possible.

c. Avantages de NFS
On peut tirer les avantages de NFS, comme suit :
1. NFS permet un accès local aux fichiers distants.
2. Il utilise une architecture Client/serveur standard pour le partage de fichiers entre
toutes les machines basées sur Linux.
3. Avec NFS, il n'est pas nécessaire que les deux machines fonctionnent sur le même
système d'exploitation.
4. Avec l'aide de NFS, nous pouvons configurer des solutions de stockage
centralisées.
5. Les utilisateurs obtiennent leurs données indépendamment de l'emplacement
physique.
6. Aucune actualisation manuelle nécessaire pour les nouveaux fichiers.
7. La nouvelle version de NFS prend également en charge ACL, les pseudo-montages
racine.
8. Peut-être sécurisé avec Firewalls et Kerberos.

d. Comparaison de NFS avec Samba


i. NFS
 Le protocole NFS fondé nativement sur l'authentification par hôte et non pas
utilisateur.
 Pour une gestion fine des utilisateurs, il faut utiliser le même ID sur le serveur et les
clients, ainsi qu'un certain nombre d'options. Ce qui s'avère rapidement compliqué.
 L'authentification par hôte peut se faire, soit par adresse IP (et dans ce cas, il faut
gérer le DHCP), soit par nom de machine (et dans ce cas, il faut gérer un DNS ou un
fichier hosts).
 Pour des ressources communes, il est toutefois possible de ne préciser aucun hôte,
ce qui signifie tout le monde.
 Une fois le système de fichier monté sur la machine cliente, l'accès se fait selon le
processus habituel UNIX, c'est-à-dire que c'est l'uid/gid qui donne les droits d'accès
aux fichiers et répertoires. Or, si un utilisateur autre possédait le même uid/gid, alors
il pourrait accéder à des fichiers/répertoires qui ne lui sont normalement pas
autorisés. Il faudrait donc définir finement, sur chaque machine cliente, qu'un
utilisateur donné ne corresponde à un seul et unique uid/gid.
 Cependant, le système NFS est aisé à mettre en place et plus performant que SAMBA.
Il est donc idéal pour des répertoires partagés.

ii. SAMBA
 Le protocole SAMBA a été créé pour interconnecter le monde Windows avec UNIX.
Son authentification est fondée sur l'utilisateur.
 Pour un utilisateur donné, quelle que soit sa machine, il est aisé de le rediriger vers
son répertoire personnel, juste avec son login/mot de passe, ce qui est beaucoup
plus simple à gérer dans une architecture dispersée (réseau).

iii. Conclusion
Afin d'éviter une mise en œuvre complexe, pour des réseaux sans contraintes
particulières, le plus simple est donc de procéder comme suit :
 Pour les ressources fixes - logiciels, CDROM, sources, mises à jour, etc. -, utiliser NFS.
 Pour les ressources utilisateurs - home/utilisateur, etc. -, utiliser SAMBA.
NFS et surtout avant la version 4 (incompatible avec les précédentes) ne doit être
déployé que sur des réseaux sûrs. 
 Quelle que soit la version, NFS est à déployer dans un réseau local et n'a pas de
vocation à être ouvert sur internet. 
 On peut utiliser par exemple NFS sur son réseau local derrière une Box assurant le
rôle de routeur NAT.

2. Configuration de protocole NFS


a. Installation de NFS
Sur CentOS, normalement tous les utilitaires permettant la mise en place d'un réseau
via nfs sont installés. On peut le vérifier avec la commande :
# rpm –qa | grep nfs
 Le paquetage essentiel de nfs est nfs-util.

b. Configuration de NFS
Pour notre TP, on va utiliser la topologie suivante :
 Le paquetage nfs-util installe 3 démons :
o rpc.mountd : Démon de montage sur serveur NFS
o nfsd : Serveur NFS.
o rpc.rquotad : est un serveur rpc qui renvoie les quotas pour un
utilisateur d’un système de fichiers local monté par une machine
distante par NFS.

c. Configuration côté serveur


Vous devez éditer le fichier /etc/exports, et y ajouter une ligne du type :
/chemin/vers/partage @_ip_client(rw),@_ip_client2(rw)
Explication :
Dans ce fichier, chaque ligne est définie comme ceci :
<dossier partagé> <hôte>(<options>) <hôte2>(<options>)...

Les informations se trouvant sur une ligne sont les suivantes:


 <dossier partagé> : chemin menant au dossier partagé.
 <hôte> : indique quel est l'hôte qui peut accéder à ce partage, l'hôte peut être
défini de plusieurs manières :

o @IP : on indique simplement l'adresse IP de la machine pouvant


accéder à ce partage.

o Un nom d'hôte : on indique le nom complet de l'hôte (pour peu qu'il


soit connu du système au travers d'un DNS ou du fichier hosts).

o Un nom de groupe réseau NIS (NIS netgroup) qui s'indique sous la


forme @<netgroup>.

o Un domaine avec un joker qui indique les machines d'un domaine ou


sous-domaine; par exemple : *.nomdedomaine.ma.

o Un intervalle d'IP avec le masque de sous-réseau; par


exemple : 192.168.0.0/24 ou 192.168.0.*, 192.168.0.10-15

 <options> : indique les options de partage; nous n'allons pas parcourir toutes
les options ensemble mais uniquement les plus importantes.

o rw : permet la lecture et l'écriture sur un partage pour l'hôte défini


(par défaut, les partages sont en mode ro; c'est-à-dire en lecture
seule).

o async : permet au serveur NFS de violer le protocole NFS et de


répondre aux requêtes avant que les changements effectués par la
requête aient été appliqués sur l'unité de stockage. Cette option
améliore les performances mais a un coût au niveau de l'intégrité des
données (données corrompues ou perdues) en cas de redémarrage
non-propre (par exemple en cas de crash système).
o sync : est le contraire de « async ». Le serveur NFS respecte le
protocole NFS.

o root_squash : force le mapping de l'utilisateur root vers l'utilisateur


anonyme (option par défaut).

o no_root_squash : n'effectue pas de mapping pour l'utilisateur root.

o all_squash : force le mapping de tous les utilisateurs vers l'utilisateur


anonyme.

o anonuid : indique au serveur NFS l'UID de l'utilisateur anonyme


anonuid=0 (considéré comme tel dans les précédentes options
de mapping).

o anongid : indique au serveur NFS le GID de l'utilisateur anonyme


anongid=0 (considéré comme tel dans les précédentes options
de mapping).

o subtree_check : Si un sous-répertoire dans un système de fichiers est


partagé, mais que le système de fichiers ne l'est pas, alors chaque fois
qu'une requête NFS arrive, le serveur doit non seulement vérifier que
le fichier accédé est dans le système de fichiers approprié (ce qui est
facile), mais aussi qu'il est dans l'arborescence partagée (ce qui est
plus compliqué).

o no_subtree_check : Cette option neutralise la vérification de sous-


répertoires, ce qui a des subtiles implications au niveau de la sécurité,
mais peut améliorer la fiabilité dans certains cas.

Par exemple : si vous souhaitez partager votre dossier /home/user et que le client a
l'adresse 192.168.0.23, vous ajouterez la ligne :
/home/user 192.168.0.23(rw)
/nfsshare nom_de_domaine_complet(ro)
/srv/ismontic/partage/ 192.168.0.0/24(rw)
/nfs01 *(ro)
Une fois cette modification faite, vous pourrez activer le partage de toutes les
répertoires contenues dans /etc/export, en tapant la commande :
# exportfs -a -v
Ensuite, il ne vous reste plus qu'à relancer le serveur NFS avec la commande :
# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
d. Configuration côté client
En premier lieu, il vous faut créer un dossier qui va contenir le partage dans /mnt ou
/media par exemple. Ensuite vous pouvez monter le dossier directement avec la commande:
# mount -t nfs @_ip_serveur_distant:/chemin/vers/partage /mnt/partage -o ...
Il est aussi possible de le monter à chaque démarrage, pour cela il suffit d'éditer le
fichier /etc/fstab, et d'y ajouter une ligne du type :
@ip_serveur_distant:/chemin/vers/partage /mnt/partage nfs auto,user,rw 0 0
Une fois cette modification faite, vous pourrez monter toutes les partitions
contenues dans /etc/fstab, en tapant la commande :
# mount -a
Vous pouvez utiliser une autre commande pour lister les informations de montage
d'un serveur NFS depuis client:
# showmount -e <IP_du_serveur_NFS>
Ou
# exportfs -v

Note :
Si vous obtenez l'erreur suivante au montage : mount.nfs4: access denied by server while
mounting, vérifiez les droits d'accès au dossier partagé (le dossier est peut-être en mode
interdit pour "autres" ce qui le rend impossible à lire pour le serveur NFS).
Puis, Ensuite, il ne vous reste plus qu'à relancer le serveur NFS avec la commande :
# service nfs start

e. Importantes commandes de NFS


 Afficher seulement les répertoires montés par un client :
# showmount -d <IP_du_serveur_NFS>
 Affiche la liste des partages avec ses options sous le serveur NFS :
# exportfs -v
 Interrompre le partage d’un ou plusieurs répertoires lister dans /etc/export :
# exportfs -u
 Relancer le partage de tous les répertoires après la modification de /etc/export :
# exportfs -r

f. Mount NFS Share Windows 7


La seule méthode pour monter un partage NFS
depuis une machine Windows est d’utiliser
l’application tierce Windows Services for UNIX
sous Windows 7 Enterprise ou Intégrale.
Allez au « Programmes et fonctionnalités » de
panneau de configuration, puis cliquez sur « Activer
ou désactiver les fonctionnalités de Windows » et
cochez « Services pour NFS ».
Installer les deux pour être sure, et redémarrez
Windows.
Ouvrez la ligne de commande et tapez ces commande qui va nous permet de monter un
dossier partager via NFS :
cmd> mount -u:user01 -p:password @IP_du_serveur_NFS:/nfsshare *
Ou
cmd> mount -u:ismontic -p:ismontic @IP_du_serveur_NFS:/nfsshare w:
Exemple :
Voici le résultat dans l’ordinateur :

3. Sécuriser le serveur NFS


a. Sécurisation de base
Pour afficher la version de NFS utilisé :
# nfsstat -m
Ou
# mount -v
Ou
# cat /proc/mounts
Sous certain distribution Linux, utilise la version 3 de ce protocole qui est non sécurisé, et
fonctionne sur les ports TCP et UDP. Cependant il existe quelques outils intéressants pour
protéger le client et le serveur :
 Du côté client la commande mount possède deux options assez intéressantes: 
o nosuid qui permet d'éviter que le serveur soit l'utilisateur root sur le client ;
o noexec qui permet d'interdire l'exécution des fichiers.
 Du côté serveur, il est également possible de bloquer l'accès root au client, cela se
fait en ajoutant l'option root_squash, dans le fichier /etc/export.

b. Attribuer des ports statiques à NFS


La configuration par défaut pour NFS consiste à utiliser des ports aléatoires pour les
connexions client. Cela n’est pas souhaitable dans les environnements où le nombre de ports
doit être limité pour des raisons de sécurité. Demander à votre administrateur réseau de
faire mille trous dans le pare-feu ne vous fera pas beaucoup d'amis. Heureusement, nous
pouvons configurer NFS pour n’utiliser que des ports spécifiques plus faciles à sécuriser.
Ouvrir le fichier de configuration réseau NFS /etc/sysconfig/nfs et décommente les lignes
suivants :
# Port rquotad should listen on.
RQUOTAD_PORT=875
# TCP port rpc.lockd should listen on.
LOCKD_TCPPORT=32803
# UDP port rpc.lockd should listen on.
LOCKD_UDPPORT=32769
# Port rpc.mountd should listen on.
MOUNTD_PORT=892
# Port rpc.statd should listen on.
STATD_PORT=662
# Outgoing port statd should used. The default is port is random
STATD_OUTGOING_PORT=2020

c. TCP-Wrapper
d. Configuration du pare feu

man exports
man smb.conf
autofs

Vous aimerez peut-être aussi