Nfs

De Linux Server Wiki
Aller à la navigation Aller à la recherche

Categoru:desktop

Installation classique

Sur le serveur

Installer le serveur nfs :

aptitude install nfs-kernel-server

Pour créer un partage, éditez le fichier /etc/exports :

/home/pfoo/data/ 192.168.10.0/255.255.255.0(ro,all_squash,anonuid=1000,anongid=1000,sync,no_subtree_check)

Note : Si l'un de vos clients devra monter le partage nfs sans être root sur sa machine il faudra ajouter l'option insecure sur la ligne de l'exports.

Pour permettre la lecture et l'écriture, remplacez ro par rw 192.168.10.0/255.255.255.0 signifie que le partage sera accessible pour les ips 192.168.10.X

Rechargez nfs :

/etc/init.d/nfs-kernel-server reload

Attention, si vous souhaitez partager un volume ntfs en nfs, utilisez de préférence ntfs-3g pour monter le volume ntfs sur le serveur.

Limiter l'accès

Ajoutez les lignes suivantes dans /etc/hosts.deny :

portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

Ajoutez les lignes suivantes dans /etc/hosts.allow :

portmap: 192.168.10.
lockd: 192.168.10.
mountd: 192.168.10.
rquotad: 192.168.10.
statd: 192.168.10.

Sur le client

Installer le client nfs :

aptitude install nfs-common

Ajoutez la ligne suivante dans /etc/fstab :

192.168.10.13:/home/pfoo/data/ /home/pfoo/mnt/ nfs defaults,vers=3,user,auto,noatime,intr 0 0

192.168.10.13 est l'ip de votre serveur nfs.

il ne reste plus qu'a monter :

mount /home/pfoo/mnt/

NFS et tunnel ssh

Sur le serveur

Pour simplifier les choses, il va falloir forcer NFS à n'utiliser que des ports précis.

Modifiez la ligne suivante dans /etc/default/nfs-common :

STATDOPTS="--port 2231"

Modifiez la ligne suivante dans <code</etc/default/nfs-kernel-server :

RPCMOUNTDOPTS="--port 2233"

Enfin, créez le fichier /etc/modprobe.d/local.conf contenant :

options lockd nlm_udpport=2232 nlm_tcpport=2232
options nfs callback_tcpport=2234

Créez un utilisateur "sleeper" qui servira a établir le tunnel ssh:

adduser --disabled-password sleeper

Et copiez la clé ssh publique de votre client dans /home/sleeper/.ssh/authorized_keys :

from="ip",command="/bin/sleep 600d" ssh-rsa .......

Créez enfin le partage nfs dans /etc/exports. En admettant que vous souhaitez partager le dossier /srv (remplacez IPNFS par l'ip de votre serveur) :

/srv IPNFS(rw,no_root_squash,sync,insecure)

Puis lancez l'export :

exportfs -a

Sur le client

Initialisez le tunnel ssh (remplacez IPNFS par l'ip de votre serveur nfs) :

ssh -f -i /root/.ssh/id_rsa -c blowfish -L 61001:IPNFS:2049 -l sleeper IPNFS sleep 600d
ssh -f -i /root/.ssh/id_rsa -c blowfish -L 62001:IPNFS:2233 -l sleeper IPNFS sleep 600d 

Ajoutez la ligne suivante dans /etc/fstab :

localhost:/srv /mnt nfs tcp,rsize=8192,wsize=8192,intr,rw,bg,nosuid,port=61001,mountport=62001,noauto

Et montez le partage :

mount /mnt

si vous souhaitez limiter la bande passante utilisable par le tunnel, utilisez trickle. Par exemple pour 5mbps :

trickle -s -u 5000 -d 5000 ssh -f -i /root/.ssh/id_rsa -c blowfish -L 61001:IPNFS:2049 -l sleeper IPNFS sleep 600d
trickle -s -u 5000 -d 5000 ssh -f -i /root/.ssh/id_rsa -c blowfish -L 62001:IPNFS:2233 -l sleeper IPNFS sleep 600d 

Overview des permissions NFS