NFS

Dernière mise à jour : 08/03/2019

NFS est un protocole couramment utilisé pour partager des fichiers entre deux machines distantes, avec pour avantage principal d’apparaitre, une fois que le système de fichier est monté via NFS, comme n’importe quel autre répertoire local sur la machine cliente.

Ainsi, une machine cliente peut écrire sur un répertoire situé physiquement sur une machine serveur, de façon assez transparente.

Création d’un montage NFS

Première chose à savoir : NFS ne fonctionne qu’avec rpcbind (ou équivalent ; dans le temps on utilisait portmap) qui sert à faire le lien sur la machine serveur entre les outils de NFS et les ports logiciels (tcp ou udp) nécessaires pour communiquer via TCP/IP.

Installation des outils

A minima, il faut installer les outils suivants (pour une distribution style Debian) :

sudo apt-get install nfs-common nfs-kernel-server rpcbind

Paramétrage NFS

Il faut en premier indiquer dans le fichier /etc/exports quel répertoire doit etre partagé :

# /etc/exports : the access control list for filesystems which may be exported to NFS clients.
#
# Example (NFS4)
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
#
/jean 192.168.0.0/255.255.0.0(rw,no_root_squash,subtree_check)

Le premier paramètre est l’emplacement du répertoire à partager. Jusque là, ça va. Ensuite, on indique vers quelles machines le partage est autorisé (pour NFS, indépendamment de tout autre mécanisme de sécurité tel qu’un pare-feu).
Les options possibles sont assez nombreuses, et parfois complexes.

???

Il faut également paramétrer ou mettre à jour la liste des ordinateurs (hotes) autorisés à accéder au serveur NFS. Donc deux fichiers à modifier : /etc/hosts.deny et /etc/hosts.allow.

# /etc/hosts.deny : list of hosts that are _not_ allowed to access the system.
#
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

Le fichier /etc/hosts.allow doit lui etre également en cohérence avec ce qu’on a indiqué plus haut. Pour simplifier, la syntaxe n’est pas identique (ça n’est plus du CIDR).

# /etc/hosts.allow : list of hosts that are allowed to access the system. 
#
portmap:ALL
lockd:192.168.
mountd:192.168.
rquotad:192.168.
statd:192.168.

Lancement des services nécessaires

service rpcbind start 
service nfs-common start
service nfs-kernel-server reload
service nfs-kernel-server start

Utilisation d’un pare-feu

Choix des ports logiciels

Par défaut, les ports utilisés peuvent etre assez aléatoires.

Règles de pare-feu

Il suffit d’ouvrir les ports assignés à rpcbind (111) et NFS (2049).

Montage coté client

​mount -t cifs //MACHINEDISTANTE/Multimedia /media/MédiasPartagés -o  guest,rw,nosetuids,sec=ntlmv2 
mount.cifs //MACHINEDISTANTE/Multimedia /media/MédiasPartagés -o user=xxx

Vérification

rpcbind -e 
exportfs

Coté serveur :

showmount -e

Coté client :

showmount -a adresse_serveur

Et ?

Sécurisation d’un partage NFS

  • http://www.tldp.org/HOWTO/NFS-HOWTO/security.html
  • https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-nfs-security.html
  • http://www.linuxsecurity.com/content/view/117705/49/
  • http://www.sans.org/reading-room/whitepapers/linux/nfs-security-trusted-untrusted-environments-1956

Liens

  • http://www.sunhelp.org/faq/nfs.html
  • http://www.iana.org/assignments/service-names-port-numbers