Partager des fichier avec NFS
Network File System est un mécanisme de partage de fichiers, ou plutôt de points de montage, entre un serveur et un client. Il repose sur le mécanisme rpc.
Services
Activez les services suivant dans votre configuration:
- rc.conf
rpcbind_enable="YES" nfs_server_enable="YES" mountd_enable="YES" mountd_flags="-p 797" rpc_lockd_enable="YES" rpc_lockd_flags="-p 16001" rpc_statd_enable="YES" rpc_statd_flags="-p 719"
Le service principal est le premier: rpcbind(8). C'est le mécanisme qui va permettre à un client d'identifier les services utiles:
Ces derniers s'attribuent par défaut un port dynamiquement, ce qui va poser problème si vous êtes derrière un pare-feu. C'est pourquoi les ports sont fixés dans la configuration.
Vérifiez la liste des services avec rpcinfo(8) depuis un client et les ports en écoute avec sockstat(8) sur le serveur.
Exports
Il faut définir la liste des répertoires à exporter, dans /etc/exports
:
/data -maproot=david -alldirs -ro -network 192.168.1.1/24
Consultez le manuel de exports(5) pour le détail des options. Si vous utilisez des dataset ZFS, vous pouvez définir directement l'export grâce à la propriété sharenfs.
zfs get sharenfs zroot/DATA/master NAME PROPERTY VALUE SOURCE zroot/DATA/master sharenfs network 192.168.1.1/24,-alldirs local
Vérifier que les exports sont pris en compte:
showmount -e 192.168.1.14 Exports list on 192.168.1.14: /data Everyone
Parefeu
Autoriser les ports identifiés par les services du chapitre précédent, en UDP comme en TCP.
- pf.conf
udp_nfs="{ sunrpc, 797, 719, 16001 }" tcp_nfs="{ sunrpc, nfsd,719, 16001 }" # ... pass log proto udp from { amis } to { serveur } port $udp_nfs pass log proto tcp from { amis } to { serveur } port $tcp_nfs
Les ports nommés sont issus de /etc/services
.
client
Depuis un client, ici debian, demander un montage NFS:
mount -t nfs -o vers=3 serveur:/montage /montage_local