Nfs
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,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