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