Dernière modification : February 16 2007 21:03:40.
NFS :
Network File System (NFS), signifiant en français « Système de fichiers en réseau », est un protocole développé par Sun Microsystems qui permet à un ordinateur d'accéder à des fichiers via un réseau.
Ce système de fichier en réseau permet de partager des données principalement entre systèmes UNIX. Des implémentations existent pour Macintosh ou Microsoft Windows.
NFS est compatible avec IPv6 sur la plupart des systèmes.
1. Configuration du noyau :
File Systems --->
Network File Systems --->
<M> NFS file system support
[*] Provide NFSv3 client support
<M> NFS server support
[*] Provide NFSv3 server support
Une fois le noyau installé si nfs a été compilé en module :
# modprobe nfs && modprobe nfsd
Puis ajouter à /etc/modules.autoload.d/kernel-2.6 nfs et nfsd
# modules-update
2. Installation :
# emerge emerge nfs-utils
3. Configuration :
Pour partager des dossiers il suffit d'éditer /etc/exports afin d'ajouter des lignes :
<dossier partagé> <hôte>(<options>) <hôte2>(<options>)...
Les informations se trouvant sur une ligne sont les suivantes :
<dossier partagé> : chemin menant au dossier partagé.
<hôte> : indique quel est l'hôte qui peut accéder à ce partage, l'hôte peut être définit de plusieurs manières :
une IP : on indique simplement l'adresse IP de la machine pouvant accéder à ce partage.
un nom d'hôte : on indique le nom complet de l'hôte (pour peu qu'il soit connu du système au travers d'un
DNS ou du fichier
hosts).
un nom de groupe réseau NIS (NIS netgroup) qui s'indique sous la forme @<netgroup>.
un domaine avec un joker qui indique les machines d'un domaine ou sous-domaine.
un intervalle d'IP avec le masque de sous-réseau; par exemple : 192.168.0.0/24.
<options> : indique les options de partage; nous n'allons pas parcourir toutes les options ensemble mais uniquement les plus importantes.
rw : permet la lecture et l'écriture sur un partage pour l'hôte défini (par défaut, les partages sont en mode ro; c'est-à-dire en lecture seule).
async : permet au serveur NFS de violer le protocole NFS et de répondre au requête avant que les changements effectués par la requête aient été appliqués sur l'unité de stockage. Cette option améliore les performances mais a un coût au niveau de l'intégrité des données (données corrompues ou perdues) en cas de redémarrage non-propre (par exemple en cas de crash système).
sync : est le contraire de async. Le serveur NFS respecte le protocole NFS.
root_squash : force le mapping de l'utilisateur root vers l'utilisateur anonyme (option par défaut).
no_root_squash : n'effectue pas de mapping pour l'utilisateur root.
all_squash : force le mapping de tous les utilisateurs vers l'utilisateur anonyme.
anonuid : indique au serveurNFS l'UID de l'utilisateur anonyme (considéré comme tel dans les précédentes options de mapping).
anongid : indique au serveur NFS le GID de l'utilisateur anonyme (considéré comme tel dans les précédentes options de mapping).
Activer portmap :
Cette étape est facultative car les scripts rc lance portmap si il y en a besoin.
# /etc/init.d/portmap start
# rc-update add portmap default
4. Sécurité :
Un minimum de sécurité est de refuser tous les acces à NFS grâce au fichier
/etc/hosts.deny:
#Interdire tout le monde sur les services portmap, nfsd et mountd
portmap:ALL
nfsd:ALL
mountd:ALL
Puis grâce au fichier
/etc/hosts.allow autoriser les accés au fur et à mesure:
# Portmapper is used for all RPC services; protect your NFS!
# (IP addresses rather than hostnames *MUST* be used here)
portmap: 192.168.0.20
lockd: 192.168.0.20
rquotad: 192.168.0.20
mountd: 192.168.0.20
statd: 192.168.0.20
ou part tranche d'adresse ip
# Portmapper is used for all RPC services; protect your NFS!
# (IP addresses rather than hostnames *MUST* be used here)
portmap: 192.168.0.0/255.255.255.0
lockd: 192.168.0.0/255.255.255.0
rquotad: 192.168.0.0/255.255.255.0
mountd: 192.168.0.0/255.255.255.0
statd: 192.168.0.0/255.255.255.0
5. Activer NFS:
# /etc/init.d/nfs start
# rc-update add nfs default
6. Astuces:
Si vous rencontrez l'erreur "
Autre erreur : Accés refusé."
Vérifiez que tous les services necessaires sont démarrés (coté serveur) gràce à la commande
rpcinfo -p
Vous devez obtenir une liste qui comprend au moins un exemplaire de chacun de ces services :
tcp 111 portmapper
udp 942 status
udp 752 mountd
udp 2049 nfs
udp 32799 nlockmgr
Pour monter un système de fichier NFS manuellement, vous utiliserez la commande suivante :
# mount -t nfs <ip_serveur>:<rep_serveur> <point_montage_local>
Certaines options peuvent être passées à la commande mount lors du montage. Les options les plus intéressantes sont les suivantes :
ro : monte le système de fichier en lecture seule.
rw : monte le système de fichier en lecture/écriture.
hard : si le serveur n'est pas accessible, le noyau place les processus en attente de la ressource en attente.
soft : si le serveur est inaccessible, on attend le timeout avant de générer une erreur de lecture/écriture aux processus impactés.
timeo=XXX : indique le timeout (en mode soft) en secondes (maximum = 60sec).
Ces options se passent via l'argument -o de la commande mount; par exemple :
# mount -t nfs -o ro,soft,timeo=10 192.168.0.40:/home/brol /mnt/nfs
Montage automatique au démarrage:
Editer /etc/fstab afin d'ajouter : x.x.x.x:/directory /mount_directory nfs rw 0 0
Le firewall :
Monter un firewall est tout à fait délicat parce qu'il y a des ports qui sont alloués au hasard comme le démon NFS.
La commande rpcinfo -p vous affichera des ports différents.
Vous notez probablement que certains de ces ports sont statiques : 111 (tcp et udp) sont pour portmaps et 2049 (tcp et udp) sont pour nfs. Le reste, qui sont tout aussi importants, est au hasard. Pour le fixer, vous devez éditer /etc/conf.d/nfs pour avoir ceci :
# Number of servers to be started up by default
RPCNFSDCOUNT=8
# Options to pass to rpc.mountd
# ex. RPCMOUNTDOPTS="-p 32767
RPCMOUNTDOPTS="-p 32767"
# Options to pass to rpc.statd
# ex. RPCSTATDOPTS="-p 32765 -o 32766"
RPCSTATDOPTS="-p 32765 -o 32766"
# OPTIONS to pass to rpc.rquotad
# ex. RPCRQUOTADOPTS="-p 32764"
RPCRQUOTADOPTS="-p 32764"
Vous fixerez le statut, mountd et les ports de quotad à 32764-32767.
Règles IPTABLE pour NFS :
-A INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 2049 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4001 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 4001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 32764:32767 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 32764:32767 -j ACCEPT
Voir les commentairesAjouter un commentaire