wiki/HowtoNFS.md

121 lines
5.1 KiB
Markdown
Raw Normal View History

2017-03-11 22:57:27 +01:00
---
categories: storage
title: Howto NFS
...
2016-12-29 11:25:39 +01:00
2017-03-11 22:57:27 +01:00
* Documentation : <http://nfs.sourceforge.net/nfs-howto>
2016-12-29 11:25:39 +01:00
2017-03-11 22:57:27 +01:00
NFS (Network File System) est un protocole réseau permettant le partage de fichiers entre un serveur et des clients.
2016-12-29 11:25:39 +01:00
2017-03-11 22:57:27 +01:00
## Installation
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-03-11 22:57:27 +01:00
# apt install nfs-kernel-server
2016-12-29 11:25:39 +01:00
~~~
2017-03-11 22:57:27 +01:00
## Configuration
2017-03-23 03:25:04 +01:00
On peut configurer certaines options via le fichier `/etc/default/nfs-kernel-server` :
~~~
RPCNFSDCOUNT=8
RPCMOUNTDOPTS="--no-nfs-version 4 --debug all"
~~~
2018-12-11 17:03:18 +01:00
> **Note : ** Si vous n'avez pas mis `--no-nfs-version 4`, le montage se fera par défaut en version 4. Il faudra penser à spécifier l'option de montage `nfsvers=3`.
2017-03-11 22:57:27 +01:00
Les partages se configurent dans le fichier `/etc/exports` :
2016-12-29 11:25:39 +01:00
~~~
2017-03-11 22:57:27 +01:00
/srv/nfs 192.0.2.4(rw,root_squash,sync,no_subtree_check)
/srv/nfs2 192.0.2.0/27(ro) 192.0.242(rw)
2016-12-29 11:25:39 +01:00
~~~
2017-03-11 22:57:27 +01:00
Quelques options possibles :
* `rw` : active le mode read-write (par défaut c'est en read-only)
* `async` : autorise le serveur à répondre aux clients même si les fichiers ne sont pas encore écrits, cela améliore les performances mais c'est plus dangereux (possibilité de perdre des fichiers dans certains cas)
* `no_subtree_check` : désactive certaines vérifications qu'un fichier accédé via NFS appartient bien à un répertoire exporté. Cette option est conseillée en général (c'est même devenu le comportement par défaut)
2017-03-11 23:49:52 +01:00
* `insecure` : désactive la nécessité d'avoir d'utilisation de ports inférieurs à 1024 pour les clients NFS
2017-03-11 22:57:27 +01:00
* `no_root_squash`/`all_squash` : options pour la gestion du mapping UID/GID
### Mapping uid/gid
2016-12-29 11:25:39 +01:00
2017-03-11 23:49:52 +01:00
Par défaut, les requêtes faites depuis un client avec UID/GID à 0 sont mappées en _anonymous_ : c'est le `root_squash`. Si l'on éviter ce comportement, il faut spécifier l'option `no_root_squash`.
2016-12-29 11:25:39 +01:00
2017-03-11 23:49:52 +01:00
On peut aussi mapper toutes les requêtes vers un _anonymous_ avec l'option `all_squash`, et l'on peut préciser UID/GID avec les options `anonuid` et `anongid`.
2016-12-29 11:25:39 +01:00
2017-03-23 03:25:04 +01:00
Sans l'option `all_squash` les UID/GID sont conservés entre le serveur et tous les clients NFS, il faut donc s'assurer d'avoir une cohérence des UID/GID sur l'ensemble des serveurs concernés.
2016-12-29 11:25:39 +01:00
2017-03-11 22:57:27 +01:00
## Clients NFS
2017-03-11 23:49:52 +01:00
On peut vérifier la connexion vers un serveur NFS ainsi :
~~~
# rpcinfo -p 192.0.2.1
~~~
2017-03-23 03:25:04 +01:00
Pour activer un partage NFS :
2017-03-11 22:57:27 +01:00
~~~
# apt install nfs-common
# mount -t nfs -o nfsvers=3 192.0.2.1:/srv/nfs /mnt
~~~
`/etc/fstab` :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-03-11 22:57:27 +01:00
192.0.2.1:/srv/nfs /mnt nfs nfsvers=3 0 0
192.0.2.1:/srv/nfs /mnt nfs auto,rw,_netdev,mountproto=tcp,comment=systemd.automount 0 0
2016-12-29 11:25:39 +01:00
~~~
2017-03-23 03:25:04 +01:00
Voici un exemple de montage NFS :
2016-12-29 11:25:39 +01:00
~~~
# mount | grep nfs
2017-03-23 03:25:04 +01:00
192.0.2.1:/srv/nfs on /mnt type nfs4 (rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.0.2.4,minorversion=0,local_lock=none,addr=192.0.2.1)
2016-12-29 11:25:39 +01:00
~~~
2017-03-23 03:25:04 +01:00
Quelques options possibles :
2018-12-11 17:03:18 +01:00
* `nfsvers=3` : force le protocole NFSv3 à la place de NFSv4
2017-03-23 03:25:04 +01:00
* `soft` : si le serveur NFS ne répond, stoppe les requêtes au bout d'un certain temps (par défaut c'est infini)
* `timeo=n` : temps d'attente (en dixièmes de seconde) avant d'effectuer une nouvelle tentative vers le serveur NFS
* `retry=n` : temps d'attente (en minutes) lors de la commande mount… par défaut c'est environ une semaine !
* `noac` : empêche tout mise en cache des attributs des fichiers
* `rsize=n,wsize=n` : forcer le nombre maximal d'octets pour une requête NFS (en général, cela s'adapte entre le client et le serveur)
## Réseau
NFS est un protocole complexe qui utilise de nombreux ports TCP et UDP.
En général, on autorise tous les accès réseau entre un client et un serveur.
## NFSv3 ou NFSv4 ?
NFSv4 est un protocole très différent de NFSv3. On peut avoir une certaine compatibilité en utilisant l'option `sec=sys` mais pour des cas simples il est souvent plus simple d'utiliser NFSv3. NFSv4 a un grand intérêt d'un point de vue sécurité en l'utilisant avec Kerberos (`sec=krb5`) : la sécurité ne repose plus sur les UID/GID pour identifier les utilisateurs à l'origine des requêtes mais sur des tickets d'authentification Kerberos.
2017-03-14 02:08:49 +01:00
2016-12-29 11:25:39 +01:00
2017-03-11 22:57:27 +01:00
## Plomberie
2017-01-03 11:20:35 +01:00
2017-03-23 03:25:04 +01:00
* NFSv3 : <https://tools.ietf.org/html/rfc1813>
* NFSv4 : <https://tools.ietf.org/html/rfc7530>
Sous Linux, le répertoire `/var/lib/nfs/` contient pas mal d'informations, notamment `/var/lib/nfs/etab` contient la liste des partages et `/var/lib/nfs/rmtab` la liste des clients NFS. Pour de la haute-disponibilité, on pourra partager ce répertoire entre plusieurs serveurs afin d'assurer une tolérance de panne entre les clients NFS sans nécessité de remonter les volumes.
2017-03-11 22:57:27 +01:00
## FAQ
### Serveur NFS sous Debian 6
Sous Debian Squeeze, il est recommandé de désactiver l'option `RPCMOUNTDOPTS` dans le fichier `/etc/default/nfs-kernel-server` sinon cela pose [des problèmes avec les groupes secondaires](http://bugs.debian.org/585085).
### NFS sous Debian 7
Sous Debian Wheezy, pour conserver les UID/GID il faut spécifier un domaine similaire sur le client et serveur dans `/etc/idmapd.conf`
### Serveur NFS sous Debian 7, client NFS sous Debian 6
Si le serveur NFS est sous Debian Wheezy et le client sous Debian Squeeze, il faudra mettre `NEED_IDMAPD=yes` dans `/etc/default/nfs-common` sur le client.