Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
applications:nfs [Le 29/12/2006, 12:56] ostaquet |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>warty hoary breezy dapper edgy reseau}} | ||
- | ---- | ||
- | |||
- | ====== NFS : Network File System ====== | ||
- | |||
- | ===== Introduction ===== | ||
- | |||
- | NFS est l'acronyme de **Network File System**, c'est-à-dire un [[:installation:systeme_de_fichiers|système de fichiers]] utilisable sur un réseau. | ||
- | |||
- | NFS est utilisé pour partager des données entre systèmes UNIX. Si vous désirez partager des données avec d'autres systèmes, veuillez vous référer à la page traitant des [[applications:partage_de_dossier|partages de dossier]] | ||
- | |||
- | En tant qu'utilisateur, plusieurs raisons peuvent vous pousser à partager des fichiers. Etant donné que les besoins peuvent être différents, la suite de cette documentation s'articule autour de deux aspects : | ||
- | * Si vous souhaitez simplement partager des données sur votre réseau local en configurant le mode graphique de Breezy, veuillez vous reportez à la section **Partage simple**. | ||
- | * Si vous souhaitez monter un serveur de fichier destiné à fournir des données pour un réseau d'entreprise, veuillez vous reportez à la section **Serveur de fichier**. | ||
- | |||
- | ===== Partage simple ===== | ||
- | |||
- | Le partage "simple" tel qu'il est présenté ci-dessous est un partage utilisant l'interface graphique fournie avec Ubuntu. | ||
- | |||
- | ==== Côté serveur ==== | ||
- | |||
- | Pour partager un dossier, suivez les étapes suivantes : | ||
- | * Allez dans le menu //Système -> Administration -> Dossiers partagés//. | ||
- | * Introduisez votre mot de passe. | ||
- | * Si vous ouvrez le gestionnaire de partage pour la première fois (ou si vous n'avez pas installé le serveur NFS manuellement), Ubuntu vous indique qu'il est nécessaire d'installer les paquets de serveur pour continuer. Si les paquets ne sont pas installés, faites-le en cochant les cases appropriées et cliquez sur //Appliquer//. | ||
- | |||
- | {{nfs-install.png}} | ||
- | |||
- | * Dans le gestionnaire de partage se trouvent 3 boutons à droite pour gérer les partages : | ||
- | * //Ajouter// qui permet de créer un nouveau partage. | ||
- | * //Propriétés// qui permet de modifier les paramètres du partage sélectionné. | ||
- | * //Supprimer// qui permet de supprimer le partage sélectionné. | ||
- | * Pour ajouter un partage, cliquez sur //Ajouter// ; la fenêtre suivante s'affiche : | ||
- | |||
- | {{nfs-parm.png}} | ||
- | |||
- | * Dans cette fenêtre, vous choisissez le chemin du dossier à partager. Dans mon cas : ''/home/ols/Shared_Linux''. | ||
- | * Ensuite, vous choisissez le mode de partage. Ici, nous utiliserons ''NFS''. | ||
- | * En bas de l'écran, vous indiquez quels sont les hôtes autorisés à accéder à votre partage. Pour ajouter un hôte, cliquez sur //Ajouter hôte//. | ||
- | * Dans la nouvelle fenêtre qui vient de s'ouvrir, vous pouvez choisir d'autoriser tous les hôtes de votre réseau, ou spécifier une adresse IP. Dans mon cas, je spécifie l'adresse IP (''192.168.0.100'') de mon ordinateur portable car je ne souhaite pas que les autres hôtes aient un accès en en lecture-écriture. | ||
- | * Cliquez sur //Valider// pour enregistrer cet hôte. | ||
- | * Cliquez sur //Valider// pour sauvegarder les paramètres de partage. | ||
- | * Cliquez sur //Valider// pour activer les dossiers partagés. | ||
- | |||
- | Les dossiers sélectionnés sont maintenant partagés avec les permissions que vous leur avez octroyées. | ||
- | |||
- | ==== Côté client ==== | ||
- | |||
- | Il faut commencer par installer le paquet nfs-common | ||
- | |||
- | <code>$ sudo apt-get install nfs-common</code> | ||
- | |||
- | Pour se connecter à un partage NFS, vous devez définir un point de montage. Pour ce faire, suivez les instructions suivantes : | ||
- | |||
- | * Ouvrez un terminal (Menu //Applications -> Accessoires -> Terminal//). | ||
- | * Créez un dossier où le dossier partagé va être monté (dans mon cas) : | ||
- | <code> | ||
- | $ sudo mkdir /mnt/nfs | ||
- | </code> | ||
- | // Remarque : // N'hésitez pas à donner un nom plus parlant, surtout si vous avez plusieurs partages NFS. | ||
- | * Ouvrez le fichier de configuration des systèmes de fichiers : | ||
- | Alt+F2 puis | ||
- | <code> | ||
- | $ gksudo gedit /etc/fstab (pour Ubuntu) | ||
- | ou | ||
- | $ kdesu kate /etc/fstab (pour Kubuntu) | ||
- | </code> | ||
- | * Ajoutez une ligne comme celle-ci à la fin du fichier (dans mon cas) : | ||
- | <code> | ||
- | 192.168.0.101:/home/ols/Shared_Linux /mnt/nfs nfs user,noauto 0 0 | ||
- | </code> | ||
- | //Explications : // Les deux premiers champs sont à adapter en fonction de vos réglages. La première partie (''192.168.0.101:/..../Shared_Linux'') indique l'adresse IP du serveur suivi du dossier partagé. La seconde partie (''/mnt/nfs'') indique le point de montage. | ||
- | * Sauvegardez le fichier. | ||
- | * Allez maintenant dans le poste de travail, dans le menu //Raccourcis => Poste de travail//. | ||
- | * Vous y trouverez une icône ''nfs'' (ou autre suivant le point de montage que vous avez défini). Double-cliquez sur cet icône pour accéder au répertoire partagé sur l'autre machine. | ||
- | * Si le répertoire partagé n'apparait pas, lancer la commande suivante : | ||
- | <code> | ||
- | $ sudo mount -a | ||
- | </code> | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Serveur de fichier ===== | ||
- | |||
- | Le partage de dossier sur un serveur de fichier avec NFS, tel que décrit ici, se fait en utilisant la ligne de commande et en se préoccupant des problèmes de droit d'accès. | ||
- | |||
- | ==== Côté serveur ==== | ||
- | |||
- | === Installation === | ||
- | |||
- | Avant toutes choses, il est nécessaire d'installer les paquets nécessaires : | ||
- | <code> | ||
- | $ sudo apt-get install nfs-kernel-server | ||
- | </code> | ||
- | |||
- | === Configuration === | ||
- | |||
- | Ensuite, nous allons définir les dossiers à partager. Toutes les informations concernant le partage de dossier pour NFS se trouvent dans le fichier ''/etc/exports''. Pour l'éditer, utilisez votre éditeur de texte favori ou //vi// par le biais de la commande suivante : | ||
- | <code> | ||
- | $ sudo vi /etc/exports | ||
- | </code> | ||
- | |||
- | 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éfinit de plusieurs manières : | ||
- | * une IP : on indique simplement l'adresse IP de la machine pouvant accéder à ce partage. | ||
- | * 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''). | ||
- | * un nom de groupe réseau NIS (NIS netgroup) qui s'indique sous la forme ''@<netgroup>''. | ||
- | * un domaine avec un joker qui indique les machines d'un domaine ou sous-domaine; par exemple : ''*.ubuntu-fr.org''. | ||
- | * un intervalle d'IP avec le masque de sous-réseau; par exemple : ''192.168.0.0/24''. | ||
- | * ''<options>'' : indique les options de partage; nous n'allons pas parcourir toutes les options ensemble mais uniquement les plus importantes. | ||
- | * ''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). | ||
- | * ''async'' : permet au serveur NFS de violer le protocole NFS et de répondre au requête 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). | ||
- | * ''sync'' : est le contraire de ''async''. Le serveur NFS respecte le protocole NFS. | ||
- | * ''root_squash'' : force le //mapping// de l'utilisateur ''root'' vers l'utilisateur anonyme (option par défaut). | ||
- | * ''no_root_squash'' : n'effectue pas de //mapping// pour l'utilisateur ''root''. | ||
- | * ''all_squash'' : force le //mapping// de tous les utilisateurs vers l'utilisateur anonyme. | ||
- | * ''anonuid'' : indique au serveur NFS l'UID de l'utilisateur anonyme (considéré comme tel dans les précédentes options de //mapping//). | ||
- | * ''anongid'' : indique au serveur NFS le GID de l'utilisateur anonyme (considéré comme tel dans les précédentes options de //mapping//). | ||
- | |||
- | Voyons quelques exemples... | ||
- | |||
- | Nous souhaitons exporter un répertoire ''/srv/archive'' pour le réseau local (''192.168.0.0/24'') en lecture seule, en optimisant les performances (sur un répertoire en lecture seule, on peut se le permettre). Nous indiquons la ligne suivante dans le fichier ''/etc/exports'' : | ||
- | |||
- | <code> | ||
- | $ /srv/archive 192.168.0.0/24(ro,async) | ||
- | </code> | ||
- | |||
- | Nous souhaitons exporter un répertoire ''/srv/temp_add'' pour un hôte particulier (''lab05.ubuntu-fr.org'') en lecture/écriture et tous les utilisateurs sont considérés comme l'utilisateur ''nfsshare'' (UID : ''5000'', GID : ''5000''). L'hôte ''lab02.ubuntu-fr.org'' peut également y accéder mais seulement en lecture seule. Nous indiquons la ligne suivante dans le fichier ''/etc/exports'' : | ||
- | |||
- | <code> | ||
- | $ /srv/temp_add lab05.ubuntu-fr.org(rw,all_squash,anonuid=5000,anongid=5000,sync) lab02.ubuntu-fr.org(ro,sync) | ||
- | </code> | ||
- | |||
- | Vous obtiendrez tous les détails concernant les options NFS dans les manpages (''man exports''). | ||
- | |||
- | Remarquez que, si vous n'utilisez pas ''all_squash'', l'UID de l'utilisateur de la machine cliente sera utilisé sur la machine serveur. Ce qui signifie que, soit vous avez des fichiers ''/etc/passwd'' et ''/etc/group'' identiques (ce qui est encore possible dans un petit parc informatique), soit vous utilisez un serveur d'identité comme NIS afin d'avoir les mêmes UID/GID partout. | ||
- | |||
- | === Mise en route === | ||
- | |||
- | Maintenant, il ne vous reste plus qu'à démarrer votre nouveau serveur de fichier avec la commande : | ||
- | <code> | ||
- | $ sudo /etc/init.d/nfs-kernel-server start | ||
- | </code> | ||
- | |||
- | Lorsque vous modifiez le fichier de configuration, n'oubliez pas d'entrer la commande suivante pour le recharger : | ||
- | <code> | ||
- | $ sudo /etc/init.d/nfs-kernel-server reload | ||
- | </code> | ||
- | |||
- | === Considérations sécuritaires === | ||
- | |||
- | NFS n'est pas réputé pour être totalement sécurisé. Il est conseillé d'éviter de partager des informations avec NFS au travers de l'Internet. Pour sécuriser les accès, vous avez le choix entre plusieurs possibilités : | ||
- | * Accès uniquement sur le réseau local | ||
- | * Une première méthode consiste à modifier vos fichier ''/etc/hosts.deny'' et ''/etc/hosts.allow''. Cette méthode simple est expliquée dans les manpages (''man host_access''). | ||
- | * Une seconde méthode (ma favorite) consiste à configurer un firewall avec ''iptables'' pour éviter les accès non-autorisés. Je préfère cette solution car elle permet de traiter tous les services et accès (y compris ''ping'', suivi de connexions, etc.). Les ports utilisés par NFS sont le ''111'' et le ''2049'' (en ''udp'' et ''tcp''). | ||
- | * Accès externes | ||
- | * Le mieux est d'utiliser un tunnel VPN, crypté et sécurisé, qui fera de votre machine distante une machine de votre réseau local. | ||
- | |||
- | ==== Côté client ==== | ||
- | |||
- | Pour les connexions clientes sur des machines de bureau, vous pouvez utiliser la méthode décrite dans la section précédente. | ||
- | |||
- | Si vous devez effectuer des liens NFS entre différents serveurs, voici quelques précisions concernant les montages NFS. | ||
- | |||
- | Pour monter un partage NFS, vous avez besoin d'un répertoire vide qui servira de point de montage. En général (et de préférence), les points de montage se trouvent dans ''/mnt'', mais ces points de montage peuvent se trouver n'importe où dans votre arborescence root (''/''). | ||
- | |||
- | Pour monter un système de fichier NFS manuellement, vous utiliserez la commande suivante : | ||
- | |||
- | <code> | ||
- | $ sudo mount -t nfs <ip_serveur>:<rep_serveur> <point_montage_local> | ||
- | </code> | ||
- | |||
- | Ce qui donne par exemple : | ||
- | |||
- | <code> | ||
- | $ sudo mount -t nfs 192.168.0.40:/home/brol /mnt/nfs | ||
- | </code> | ||
- | |||
- | Certaines options peuvent être passées à la commande ''mount'' lors du montage. Les options les plus intéressantes sont les suivantes : | ||
- | * ''ro'' : monte le système de fichier en lecture seule. | ||
- | * ''rw'' : monte le système de fichier en lecture/écriture. | ||
- | * ''hard'' : si le serveur n'est pas accessible, le noyau place les processus en attente de la ressource en attente. | ||
- | * ''soft'' : si le serveur est inaccessible, on attend le timeout avant de générer une erreur de lecture/écriture aux processus impactés. | ||
- | * ''timeo=XXX'' : indique le timeout (en mode ''soft'') en secondes (maximum = ''60sec''). | ||
- | |||
- | Ces options se passent via l'argument ''-o'' de la commande ''mount''; par exemple : | ||
- | <code> | ||
- | $ sudo mount -t nfs -o ro,soft,timeo=10 192.168.0.40:/home/brol /mnt/nfs | ||
- | </code> | ||
- | |||
- | Pour démonter le système de fichier, vous pouvez utilisez la commande suivante : | ||
- | |||
- | <code> | ||
- | $ sudo umount <point_montage_local> | ||
- | </code> | ||
- | |||
- | Pour monter le serveur de fichier au démarrage de la machine, vous pouvez ajouter une ligne ressemblant à celle-ci dans le fichier ''/etc/fstab'' : | ||
- | |||
- | <code> | ||
- | <ip_serveur>:<rep_serveur> <point_montage_local> nfs <options> 0 0 | ||
- | </code> | ||
- | |||
- | Par exemple : | ||
- | |||
- | <code> | ||
- | 192.168.0.40:/home/brol /mnt/nfs nfs ro 0 0 | ||
- | </code> | ||
- | |||
- | ===Erreurs=== | ||
- | Le message classique en cas d'erreur au moment du mount du coté client est | ||
- | <code> | ||
- | mount RPC : le programme n'est pas enregistré | ||
- | </code> | ||
- | Cela ne signifie pas qu'il y a une erreur du coté client. | ||
- | Cela peut-être dû (coté serveur) à une mauvaise définition du client autorisé à se connecter comme défini dans le fichier /etc/exports. Vérifier que l'hôte-client est correctement identifié. | ||
- | En cas de doute remplacer le nom d'un client par son Ip.\\ | ||
- | Cela peut-être (toujours du coté serveur) dû à une restriction sur les hôtes-clients dans /etc/hosts.deny (qui indique quel programme doit refuser quel hote) qui n'est pas contrebalancée par une permission dans /etc/hosts.allow (qui indique quel client à néanmoins le droit d'outrepasser les interdictions du hosts.deny)\\ | ||
- | Pour plus de lisibilité utiliser de manière préférentielle les Ip de vos clients. Soit une par une (petit nombre) ou à l'aide du couple Adresse/Masque (grand nombre) | ||
- | |||
- | Un exemple de configuration des fichiers hosts.allow et hosts.deny est donnée ici : | ||
- | |||
- | <code> | ||
- | SUR LE SERVEUR SEULEMENT | ||
- | il faut ajouter les lignes suivantes (minimum vital): | ||
- | |||
- | Fichier hosts.deny | ||
- | #Interdire tout le monde sur les services portmap, nfsd et mountd | ||
- | portmap:ALL | ||
- | nfsd:ALL | ||
- | mountd:ALL | ||
- | |||
- | Fichier hosts.allow | ||
- | #Accepter néanmoins les <machine-liste> sur les services portmap, nfsd et moundt | ||
- | #Exemple de <machine> 192.168.0.50 , une seule machine. | ||
- | #Autre exemple 192.168.0.0/255.255.255.0 , toutes les machines de 192.168.0.1 à 192.168.0.254 | ||
- | portmap:<machine_liste> | ||
- | nfsd:<machine_liste> | ||
- | mountd:<machine_liste> | ||
- | </code> | ||
- | |||
- | Ensuite il ne reste plus qu'à recharger les configs pour le démon nfs : | ||
- | <code>sudo /etc/init.d/nfs-kernel-server reload</code> | ||
- | |||
- | <code>Autre erreur : Accés refusé.</code> | ||
- | Vérifiez que tous les services necessaires sont démarrés (coté serveur) gràce à la commande | ||
- | <code>rpcinfo -p</code> | ||
- | Vous devez obtenir une liste qui comprend au moins un exemplaire de chacun de ces services : | ||
- | <code> | ||
- | tcp 111 portmapper | ||
- | udp 942 status | ||
- | udp 752 mountd | ||
- | udp 2049 nfs | ||
- | udp 32799 nlockmgr | ||
- | </code> | ||
- | Si ce n'est pas le cas, relancer le script de démarrage (start) de nfs comme expliqué plus haut.\\ | ||
- | Pour plus d'informations concernant les options de montage, vous pouvez consulter les manpages de NFS (''man nfs''). | ||
- | |||
- | ---- | ||
- | |||
- | // Contributeur : [[utilisateurs:ostaquet]]// |