NFS : Mise en place d'un serveur NFS

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Le système de fichiers en réseau (Network File System NFS) 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 fichiers 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.

La mise en place d'un serveur NFS peut être utile dans certains cas comme un serveur TFTP ou bien pour éviter de passer par Samba qui est quand même une espèce de couche windows émulée.

Ce qui fait que niveau perf, ya pas à dire, le NFS c'est le top !

2 Installation

2.1 Debian

Allez hop :

Command apt-get
apt-get install nfs-common nfs-user-server

2.2 Solaris

Rien de spéciale à installer si ce n'est le serveur NFS :-).

3 Configuration

3.1 Debian

Les 3 fichiers de configuration principaux sont /etc/exports, /etc/hosts.deny et /etc/hosts.allow.

3.1.1 /etc/exports

Le fichier /etc/exports est très simple :

Configuration File /etc/exports
répertoire machine1(option11,option12) machine2(option21,option22)

par exemple :

Configuration File /etc/exports
/home 192.168.0.10(rw) 192.168.0.25(ro)

Pour les personnes qui ne veulent aucunes restrictions :

Configuration File /etc/exports
/home (rw,sync)

Signifie que l'on autorisera la machine 192.168.0.10 à accéder à notre répertoire /home en lecture et écriture (rw) ainsi que la machine 192.168.0.25 mais uniquement en lecture (ro).

  • répertoire : le répertoire du serveur à partager.
  • machine : Une liste de machines séparée par des virgules et autorisées à monter ce répertoire (utilisez des adresses IP plutôt que des noms à cause des problèmes de "dns spoofing").
  • options :
    • ro : C'est la valeur par défaut, lecture seule.
    • rw : La machine à un accès en lecture/écriture au répertoire.
    • no_root_squash : Les accès par l'utilisateur root sur le serveur se font sous l'identité root, au contraire de nobody (par défaut) À UTILISER DE PREFERENCE POUR DES MESURE DE SÉCURITÉ
    • sync : uniquement NFS v2, Ne diffère pas les écritures physiques au volume, augmente la fiabilité en cas de mauvais démontage. La version 3 dispose d'un mécanisme de commit-rollback donc cette option n'est pas utile.
    • soft : permet de ne pas laisser NFS faire des accès en permanance pour vérifier que la ressource est disponible

Un point important, pour un bon fonctionnement : tu dois avoir les mêmes numéros de groupes et d'utilisateurs sur les deux machines. Des systèmes permettent de gérer çà, NIS (assez ancien) ou LDAP (plus récent). Avec peu d'utilisateurs, tu peux tout simplement éditer /etc/group et /etc/passwd pour synchroniser ces numéros.

Il n'est pas recommandé d'exporter un système DOS ou VFAT à cause de leurs absences de gestion multi-utilisateurs ; ils ne sont pas fait pour être partagés avec NFS.

3.1.2 /etc/hosts.deny

Le plus simple est de tout interdire et de n'autoriser que certaines choses :

Configuration File /etc/hosts.deny
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

Pour le fichier hosts.deny et hosts.allow, il n'y a même pas besoin des les remplir si on ne veut pas de restriction.

3.1.3 /etc/hosts.allow

Dans le même esprit, cela donne :

Configuration File /etc/hosts.allow
portmap:192.168.1.34
lockd:192.168.1.34
mountd:192.168.1.34
rquotad:192.168.1.34
statd:192.168.1.34

Il ne reste plus qu'à relancer le service :

Command
/etc/init.d/nfs-server start

3.2 Solaris

Configuration Files are :

  • /etc/dfs/dfstab lists the resources to share at boot time.
  • /etc/nfs/nfslogd.conf defines the location of the configuration logs that are used for NFS server logging.
  • /etc/dfs/sharetab lists local resources that are currently being shared by the NFS server.
  • /etc/rmtab lists the file systems remotely mounted by NFS clients. Do not edit this file.
  • /etc/nfs/nfslog.conf lists information defining the location of the configuration logs used for NFS server logging.

3.2.1 dfstab

Configuration File /etc/dfs/dfstab
# Place share(1M) commands here for automatic execution
# on entering init state 3.
#
# Issue the command 'svcadm enable network/nfs/server' to
# run the NFS daemon processes and the share commands, after adding
# the very first entry to this file.
#
# share [-F fstype] [-o options] [-d "<text>"] <pathname> [resource]
# .e.g,
# share -F nfs -o rw=engineering -d "home dirs" /export/home2

For example, here we have a home directory called /export/home/<dir_name> that's shared in read-only mode: Par exemple, si nous voulons partager en lecture seul le dossier /export/home/<dir_name> :

Command share
share -o ro /export/home/<dir_name>

3.2.2 Les démons

  • mountd : handles file system mount requests from remote systems and provides access control. Not used in NFSv4.
  • nfsmapid : is the NFS user and group ID mapping daemon, which is used with NFSv4.
  • nfsd : handles client file system requests and is used with NFSv4.
  • statd : works with the lockd daemon to provide crash recovery and functions for the lock manager.
  • lockd : supports record locking operations on NFS files.
  • nfslogd : provides operational logging for NFSv2 and v3.

With the Solaris 10 OS and NFSv4, you need only two daemons to support NFS: nfsmapid and nfsd. The mountd and lockd daemons are integrated together, and nfsmapid and nfsd are supported in NFSv4 with port 2049, which improves support for NFS through a firewall.

If you want to use NFSv2 or v3 with the Solaris 10 OS, all daemons are supported.

3.2.3 Starting and Stopping the NFS Server Service

The svc:/network/nfs/server service starts the NFS server daemons when the system enters run level 3.
To start the NFS server daemon manually, run this command:

Command svcadm
svcadm enable svc:/network/nfs/server

To stop the NFS server daemon manually, run this command:

Command svcadm
svcadm disable svc:/network/nfs/server

3.2.4 Checking NFS Dependencies

Check dependencies using the svcs command: {{command|svcs|

svcs | grep nfs
svcs -l nfs/server

3.2.5 NFS Server Commands

  • shareall : reads and executes statements from /etc/dfs/dfstab.
  • shares : makes a local directory on the NFS server available for mounting.
  • dfshares : when used without any arguments, displays resources currently being shared.
  • dfmount : displays a list of NFS server directories that are currently mounted.
  • unshare : makes file resources unavailable for mounting.

3.2.6 Configuring the NFS Server for Sharing

Syntax:

Command share
# share [-F <FSType>] [-o <option>] [<pathname>]
 
where:
 
    * -F <FSType> specifies the file system type.
    * -o <option> specifies the options that control access to the shared resource, for example read-only access.
    * <pathname> specifies the absolute path name of the resource for sharing.

For example, if you want to share the /export/home/<dir_name> directory, make an entry like the following in the /etc/dfs/dfstab file :

Command share
share -F nfs -o ro /export/home/<dir_name>

In this example, -F specifies an NFS file system, -o ro specifies that access to the share is read-only, and /export/home/<dir_name> is the absolute path of the share.

Similarly, by using the -o rw option, you can specify that <pathname> is shared as read/write to all clients, and you can use -o root=<dir_name> to enable root privileges for the <dir_name> directory.

3.2.7 Making File Resources Unavailable for Mounting

Syntax:

Command unshare
unshare [-F <FSType>] [<pathname>]

For example:

Command unshare
unshare -F nfs /export/home/<dir_name>


4 Client

4.1 Debian

Pour se connecter, super simple :

Command mount
mount @IP:/mon/partage mon_point_de_montage

4.2 Solaris

4.2.1 Mounting a Remote File System

Syntax:

Command mount
mount [-F <FSType>] [-o <options>] <server>:<pathname> [<mount_point>]

For example:

Command mount
mount -F nfs -o ro  gladiator:/export/home/<dir_name> /mymountpoint
 
where:
    * Gladiator : is the name of the remote server.
    * /export/home/<dir_name> : is the remote file resource.
    * /mymountpoint : is the mount point where /export/home/<dir_name> is shared.

Another example:

Command mount
mount -o ro Gladiator,Sun,Moon :/Central_data /mymountpoint

In the second example, if the Gladiator system is unavailable, then the request will flow to the second system, which is called Sun, and so on.

4.2.2 Unmounting Remote File Systems From a Client

Syntax :

Command umount
umount [<mount_point>]

For example:

Command umount
umount /mymountpoint

4.2.3 Mounting Remote Resources at Boot Time

To mount a remote file system at boot time, make an entry in /etc/vfstab.

For example, add the following entry in the /etc/dfstab file:

Configuration File /etc/dfstab
Gladiator:/export/home/<dir_name>  - /mymountpoint nfs - yes bg
 
where:
 
    * device to mount is Gladiator:/export/home/<dir_name>
    * device to fsck is -
    * mount point is /mymountpoint
    * FS type is nfs
    * fsck pass is -
    * mount at boot is yes
    * mount options is bg (for background)

5 Checks

If you want to check what kind of share is delivering a server, you can use this command :

Command
showmount -e servernfs_ip_or_fqdn

6 FAQ

6.1 mount(2): Protocol not supported

If you encounter this kind of issue while trying to mount a share on a client side:

Command mount
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'udp,sec=sys,rsize=8192,wsize=8192,intr,hard,addr=10.0.0.1'
mount.nfs: prog 100003, trying vers=3, prot=17
mount.nfs: trying 10.0.0.1 prog 100003 vers 3 prot UDP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 10.0.0.1 prog 100005 vers 3 prot UDP port 54874

That means you still have a connexion active on the server side. You can see it with showmount command:

Command showmount -a
10.0.0.238:/mnt/nfs/dev/image_cache
10.0.0.238:/mnt/nfs/dev/image_upload
10.0.0.238:/mnt/nfs/dev/shared
10.0.0.238:/mnt/nfs/dev/templates
10.0.0.238:/mnt/nfs/dev/xmlcache

To be able to remount the mount point, run this kind of command still on the server side:

Command exportfs
exportfs -u 10.0.0.238:/mnt/nfs/dev/xmlcache

Then try to remount and it will work.

7 Ressources

Setting Up An NFS Server And Client
http://www.sun.com/bigadmin/content/submitted/fundamentals_nfs.jsp
Setting Up An NFS Server And Client On Debian Lenny