# [howto] NFS

## bouleetbil

Une façon assez simple de partager des données via un réseau est NFS.

NFS :

Network File System (NFS), signifiant en français « Système de fichiers en réseau », est un protocole développé par Sun Microsystems qui permet à un ordinateur d'accéder à des fichiers via un réseau.

Ce système de fichier en réseau permet de partager des données principalement entre systèmes UNIX. Des implémentations existent pour Macintosh ou Microsoft Windows. NFS est compatible avec IPv6 sur la plupart des systèmes. Ce protocole est beaucoup plus simple à mettre en place que samba.

1. Configuration du noyau :

```
File Systems --->

Network File Systems --->

    <M> NFS file system support

      [*] Provide NFSv3 client support

    <M> NFS server support

       [*] Provide NFSv3 server support
```

Une fois le noyau installé si nfs a été compilé en module :

```
# modprobe nfs && modprobe nfsd
```

Puis ajouter à /etc/modules.autoload.d/kernel-2.6 nfs et nfsd

```
# modules-update
```

2. Installation :

```
# emerge emerge nfs-utils
```

3. Configuration :

Pour partager des dossiers il suffit d'éditer /etc/exports afin d'ajouter des lignes :

```
<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;

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 serveurNFS 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).

Activer portmap :

Cette étape est facultative car les scripts rc lance portmap si il y en a besoin.

```
# /etc/init.d/portmap start

# rc-update add portmap default
```

4. Sécurité : 

Un minimum de sécurité est de refuser tous les acces à NFS grâce au fichier /etc/hosts.deny:

```
#Interdire tout le monde sur les services portmap, nfsd et mountd

portmap:ALL

nfsd:ALL

mountd:ALL
```

Puis grâce au fichier /etc/hosts.allow autoriser les accés au fur et à mesure:

```
# Portmapper is used for all RPC services; protect your NFS!

# (IP addresses rather than hostnames *MUST* be used here)

portmap: 192.168.0.20

lockd: 192.168.0.20

rquotad: 192.168.0.20

mountd: 192.168.0.20

statd: 192.168.0.20
```

ou part tranche d'adresse ip

```
# Portmapper is used for all RPC services; protect your NFS!

# (IP addresses rather than hostnames *MUST* be used here)

portmap: 192.168.0.0/255.255.255.0

lockd: 192.168.0.0/255.255.255.0

rquotad: 192.168.0.0/255.255.255.0

mountd: 192.168.0.0/255.255.255.0

statd: 192.168.0.0/255.255.255.0
```

5. Activer NFS:

```
# /etc/init.d/nfs start

# rc-update add nfs default
```

6. Astuces:

Si vous rencontrez l'erreur "Autre erreur : Accés refusé."

Vérifiez que tous les services necessaires sont démarrés (coté serveur) gràce à la commande rpcinfo -p

Vous devez obtenir une liste qui comprend au moins un exemplaire de chacun de ces services :

```
tcp      111    portmapper

udp      942    status

udp      752    mountd

udp     2049    nfs

udp    32799   nlockmgr
```

Pour monter un système de fichier NFS manuellement, vous utiliserez la commande suivante :

# mount -t nfs <ip_serveur>:<rep_serveur> <point_montage_local>

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 :

```
# mount -t nfs -o ro,soft,timeo=10 192.168.0.40:/home/brol /mnt/nfs
```

Montage automatique au démarrage:

Editer /etc/fstab afin d'ajouter : x.x.x.x:/directory /mount_directory nfs rw 0 0

Le firewall :

Monter un firewall est tout à fait délicat parce qu'il y a des ports qui sont alloués au hasard comme le démon NFS.

La commande rpcinfo -p vous affichera des ports différents.

Vous notez probablement que certains de ces ports sont statiques : 111 (tcp et udp) pour portmaps et 2049 (tcp et udp)  pour nfs. Le reste, qui est tout aussi important, est fixé au hasard. Pour le fixer, vous devez éditer /etc/conf.d/nfs pour avoir ceci :

```
# Number of servers to be started up by default

RPCNFSDCOUNT=8

# Options to pass to rpc.mountd

# ex. RPCMOUNTDOPTS="-p 32767

RPCMOUNTDOPTS="-p 32767"

# Options to pass to rpc.statd

# ex. RPCSTATDOPTS="-p 32765 -o 32766"

RPCSTATDOPTS="-p 32765 -o 32766"

# OPTIONS to pass to rpc.rquotad

# ex. RPCRQUOTADOPTS="-p 32764"

RPCRQUOTADOPTS="-p 32764"
```

Vous fixerez le statut, mountd et les ports de quotad à 32764-32767.

Règles IPTABLE pour NFS :

```

-A INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m udp --dport 2049 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 4001 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m udp --dport 4001 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 32764:32767 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m udp --dport 32764:32767 -j ACCEPT
```

sources : 

http://doc.ubuntu-fr.org/applications/nfs

http://gentoo-wiki.com/HOWTO_Share_Directories_via_NFS

Pour une documentation plus complète : http://jp.barralis.com/howto/linux/NFS-HOWTO/NFS-HOWTO.php

----------

## truc

Comme d'hab, merci bien bouleetbil pour ce howto, qui est d'ailleurs très bien, fait:

-> Une partie présentation

-> Une partie mise en place

-> Et une partie astuce, ou tu détailles notamment la configuration du parefeu pour que tout fonctionne bien! chapeau   :Cool: 

@modos Tout cela me fait penser qu'il serait sympa, d'avoir un poste en sticky avec une liste des howto/tips etc.. contenut sur ce forums, ça rendrait la recherche bien plus rapide et efficace à mon avis.

----------

## Mickael

Il existe, yuk159 en est l'auteur sauf qu'il n'est pas stickisé et que peut être yuk n'a plus le temps de le maintenir.

EDIT :

[Howto Howto] Liens vers les Howto Français (20/09/2005)

----------

## truc

ahh merci, j'me disais bien aussi que j'en avais déjà vu un! Mais je ne comprends pas pourquoi il n'est pas mis sticky?

----------

## CourJuS

Bonjours à tous 

J'ai une petite question en raport direct/indirect avec NFS.

j'utilise VMWare et je souhaiterais stocker mes machines sur un partage NFS mais VMW rale sec pour le "write lock" j'ai rien trouvé de très concluant sur google (il était 4h du mat aussi, mon cerveau devais plus êtres concluant non plus  :Razz:  )

Je parle ici de VMWare mais d'autres applications par le passé mon charié avec le write lock  :Wink: 

Y a t'il des options particuliaire à passer au montage du partage, ou bien dans le /etc/export ? 

Merci 

ps Chapeau pour le tuto, simple rapide éfficace  :Smile: 

----------

## bouleetbil

Merci

@CourJuS

Pour le write lock d'après ce que j'ai lu cela pourrait être du à un problème de droit. Peut-être un post sur le forum French ?

----------

