Le système de fichiers réseau (NFS) est un protocole de système de fichiers distribué qui vous permet de partager des répertoires distants sur un réseau. Avec NFS, vous pouvez monter des répertoires distants sur votre système et travailler avec les fichiers de la machine distante comme s’il s’agissait de fichiers locaux.
Le protocole NFS n’est pas crypté par défaut et, contrairement à Samba, il ne fournit pas d’authentification utilisateur. L’accès au serveur est restreint par les adresses IP ou les noms d’hôte des clients.
Dans ce tutoriel, nous allons voir comment configurer un serveur NFSv4 sur Ubuntu 18.04. Nous vous montrerons également comment monter un système de fichiers NFS sur le client.
Prérequis #
Cet exemple suppose que vous avez un serveur exécutant Ubuntu 18.04 et un autre exécutant toute autre distribution Linux. Le serveur et les clients doivent pouvoir communiquer entre eux sur un réseau privé. Si votre hébergeur ne propose pas d’adresses IP privées, vous pouvez utiliser les adresses IP publiques et configurer le pare-feu du serveur pour autoriser le trafic sur le port 2049
uniquement à partir de sources de confiance.
Les machines de cet exemple ont les IP suivantes :
NFS Server IP: 192.168.33.10NFS Clients IPs: From the 192.168.33.0/24 range
Configurer le serveur NFS #
Nous allons commencer par installer et configurer le serveur NFS.
Installation du serveur NFS #
Rafraîchir l’index des paquets et installer le paquet du serveur NFS:
sudo apt update
sudo apt install nfs-kernel-server
Une fois l’installation terminée, les services NFS démarreront automatiquement.
Par défaut, sur Ubuntu 18.04, la version 2 de NFS est désactivée. Les versions 3 et 4 sont activées. Vous pouvez le vérifier en exécutant la commande suivante cat
:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2 est assez vieux maintenant, et il n’y a aucune raison de l’activer.
Les options de configuration du serveur NFS sont définies dans les fichiers /etc/default/nfs-kernel-server
et /etc/default/nfs-common
. Les paramètres par défaut sont suffisants dans notre cas.
Création des systèmes de fichiers #
Lors de la configuration d’un serveur NFSv4, une bonne pratique est d’utiliser un répertoire racine NFS global et de lier le montage des répertoires réels au point de montage du partage. Dans cet exemple, nous utiliserons le répertoire /srv/nfs4
comme racine NFS.
Nous allons partager deux répertoires (/var/www
et /opt/backups
), avec différents paramètres de configuration, pour mieux expliquer comment les montages NFS peuvent être configurés.
Le /var/www/
appartient à l’utilisateur et au groupe www-data
et /opt/backups
appartient à root
.
Créer le système de fichiers d’exportation à l’aide de la commande mkdir
:
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
Monter les répertoires réels :
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
Pour rendre les montages liés permanents, ouvrez le fichier /etc/fstab
:
sudo nano /etc/fstab
et ajoutez les lignes suivantes :
/opt/backups /srv/nfs4/backups none bind 0 0/var/www /srv/nfs4/www none bind 0 0
Exportation des systèmes de fichiers #
L’étape suivante consiste à définir les systèmes de fichiers qui seront exportés par le serveur NFS, les options de partage et les clients autorisés à accéder à ces systèmes de fichiers. Pour ce faire, ouvrez le fichier /etc/exports
:
sudo nano /etc/exports
/etc/exports
contient également des commentaires qui décrivent comment exporter un répertoire.Dans notre cas, nous devons exporter les répertoires www
et backups
et n’autoriser l’accès qu’aux clients du réseau 192.168.33.0/24
:
/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)/srv/nfs4/www 192.168.33.110(rw,sync,no_subtree_check)
La première ligne contient fsid=0
qui définit le répertoire racine NFS /srv/nfs
. L’accès sur ce volume NFS est autorisé uniquement aux clients du 192.168.33.0/24
sous-réseau. L’option crossmnt
est nécessaire pour partager les répertoires qui sont des sous-répertoires d’un répertoire exporté.
La deuxième ligne montre comment spécifier plusieurs règles d’exportation pour un système de fichiers. Elle exporte le répertoire /srv/nfs4/backups
et n’autorise que l’accès en lecture à toute la plage 192.168.33.0/24
et l’accès en lecture et en écriture à 192.168.33.3
. L’option sync
indique à NFS d’écrire les modifications sur le disque avant de répondre.
La dernière ligne devrait être explicite. Pour plus d’informations sur toutes les options disponibles, tapez man exports
dans votre terminal.
Enregistrez le fichier et exportez les partages :
sudo exportfs -ra
Vous devez exécuter la commande ci-dessus chaque fois que vous modifiez le fichier /etc/exports
. S’il y a des erreurs ou des avertissements, ils seront affichés sur le terminal.
Pour afficher les exportations actives actuelles et leur état, utilisez :
sudo exportfs -v
La sortie comprendra tous les partages avec leurs options. Comme vous pouvez le voir, il y a aussi des options que nous n’avons pas définies dans le fichier /etc/exports
. Ce sont des options par défaut et si vous voulez les modifier, vous devrez définir explicitement ces options.
/srv/nfs4/backups192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)/srv/nfs4/www 192.168.33.110(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)/srv/nfs4 192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)/srv/nfs4/backups192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
Sur Ubuntu, root_squash
est activé par défaut. Il s’agit de l’une des options les plus importantes concernant la sécurité de NFS. Elle empêche les utilisateurs root connectés depuis les clients d’avoir des privilèges root sur les partages montés. Elle mappera la racine UID
et GID
nobody
nogroup
UID
GID
.
Pour que les utilisateurs des machines clientes aient accès, NFS attend que les identifiants d’utilisateur et de groupe du client correspondent à ceux du serveur. Une autre option consiste à utiliser la fonction idmapping de NFSv4 qui traduit les ID d’utilisateur et de groupe en noms et inversement.
C’est tout. À ce stade, vous avez configuré un serveur NFS sur votre serveur Ubuntu. Vous pouvez maintenant passer à l’étape suivante et configurer les clients et vous connecter au serveur NFS.
Configuration du pare-feu #
Si vous exécutez un pare-feu sur votre réseau, vous devrez ajouter une règle qui permettra le trafic sur le port NFS.
En supposant que vous utilisez UFW
pour gérer votre pare-feu afin d’autoriser l’accès depuis le 192.168.33.0/24
sous-réseau, vous devez exécuter la commande suivante :
sudo ufw allow from 192.168.33.0/24 to any port nfs
Pour vérifier le changement, exécutez :
sudo ufw status
La sortie devrait montrer que le trafic sur le port 2049
est autorisé :
To Action From-- ------ ----2049 ALLOW 192.168.33.0/24 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6)
Configurer les clients NFS #
Maintenant que le serveur NFS est configuré et que les partages sont exportés, l’étape suivante consiste à configurer les clients et à monter les systèmes de fichiers distants.
Vous pouvez également monter le partage NFS sur des machines macOS et Windows mais nous nous concentrerons sur les systèmes Linux.
Installation du client NFS #
Sur les machines clientes, nous devons installer uniquement les outils nécessaires pour monter un système de fichiers NFS distant.
-
Installer le client NFS sur Debian et Ubuntu
Le nom du paquet qui inclut les programmes pour monter les systèmes de fichiers NFS sur les distributions basées sur Debian est
nfs-common
. Pour l’installer, exécutez :sudo apt update
sudo apt install nfs-common
-
Installer le client NFS sur CentOS et Fedora
Sur Red Hat et ses dérivés, installez le paquet
nfs-utils
:sudo yum install nfs-utils
Montage de systèmes de fichiers #
Nous allons travailler sur la machine cliente avec l’IP 192.168.33.110
. qui a un accès en lecture et en écriture au système de fichiers /srv/nfs4/www
et un accès en lecture seule au système de fichiers /srv/nfs4/backups
.
Créez deux nouveaux répertoires pour les points de montage. Vous pouvez créer ces répertoires à l’endroit que vous voulez.
sudo mkdir -p /backups
sudo mkdir -p /srv/www
Montez les systèmes de fichiers exportés avec la mount
commande:
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www
Où 192.168.33.10
est l’IP du serveur NFS. Vous pouvez également utiliser le nom d’hôte au lieu de l’adresse IP, mais il doit être résoluble par la machine cliente. Cela se fait généralement en faisant correspondre le nom d’hôte à l’IP dans le /etc/hosts
file.
Lorsque vous montez un système de fichiers NFSv4, vous devez omettre le répertoire racine NFS, donc au lieu de /srv/nfs4/backups
, vous devez utiliser /backups
.
Vérifiez que les systèmes de fichiers distants sont montés avec succès en utilisant soit la commande mount ou df
:
df -h
La commande va imprimer tous les systèmes de fichiers montés. Les deux dernières lignes sont les partages montés:
Filesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup00-LogVol00 38G 1.7G 36G 5% /devtmpfs 236M 0 236M 0% /devtmpfs 244M 0 244M 0% /dev/shmtmpfs 244M 4.5M 240M 2% /runtmpfs 244M 0 244M 0% /sys/fs/cgroup/dev/sda2 1014M 87M 928M 9% /boottmpfs 49M 0 49M 0% /run/user/1000192.168.33.10:/backups 9.7G 1.2G 8.5G 13% /backups192.168.33.10:/www 9.7G 1.2G 8.5G 13% /srv/www
Pour rendre les montages permanents au redémarrage, ouvrez le fichier /etc/fstab
:
sudo nano /etc/fstab
et ajoutez les lignes suivantes :
192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev0 0192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev0 0
Pour obtenir plus d’informations sur les options disponibles lors du montage d’un système de fichiers NFS, tapez man nfs
dans votre terminal.
Une autre option pour monter les systèmes de fichiers distants consiste à utiliser soit l’outil autofs
, soit à créer une unité systemd.
Tester l’accès NFS #
Testons l’accès aux partages en créant un nouveau fichier sur chacun d’eux.
D’abord, essayez de créer un fichier de test vers le répertoire /backups
en utilisant la commande touch
:
sudo touch /backups/test.txt
Le système de fichiers /backup
est exporté en lecture seule et comme prévu, vous verrez un message d’erreur Permission denied
:
touch: cannot touch ‘/backups/test’: Permission denied
En suite, essayez de créer un fichier de test vers le répertoire /srv/www
en tant que racine en utilisant la sudo
commande :
sudo touch /srv/www/test.txt
De nouveau, vous verrez Permission denied
message.
touch: cannot touch ‘/srv/www’: Permission denied
Si vous vous souvenez, le répertoire /var/www
est la propriété de l’utilisateur www-data
et ce partage a root_squash
option définie qui fait correspondre l’utilisateur root à l’utilisateur nobody
et au groupe nogroup
qui n’a pas les droits d’écriture sur le partage distant.
En supposant que vous ayez une www-data
utilisation sur la machine cliente avec les mêmes UID
et GID
que sur le serveur distant (ce qui devrait être le cas si par exemple, vous avez installé nginx sur les deux machines), vous pouvez tester de créer un fichier en tant qu’utilisateur www-data
avec :
sudo -u www-data touch /srv/www/test.txt
La commande ne montrera aucune sortie ce qui signifie que le fichier a été créé avec succès.
Pour le vérifier, listez les fichiers dans le répertoire /srv/www
:
ls -la /srv/www
La sortie devrait montrer le fichier nouvellement créé :
drwxr-xr-x 3 www-data www-data 4096 Jun 23 22:18 .drwxr-xr-x 3 root root 4096 Jun 23 22:29 ..-rw-r--r-- 1 www-data www-data 0 Jun 23 21:58 index.html-rw-r--r-- 1 www-data www-data 0 Jun 23 22:18 test.txt
Démontage du système de fichiers NFS #
Si vous n’avez plus besoin du partage NFS distant, vous pouvez le démonter comme tout autre système de fichiers monté à l’aide de la commande umount. Par exemple, pour démonter le partage /backup
, vous devez exécuter :
sudo umount /backups
Si le point de montage est défini dans le fichier /etc/fstab
, assurez-vous de supprimer la ligne ou de la commenter en ajoutant #
au début de la ligne.
Conclusion #
Dans ce tutoriel, nous vous avons montré comment configurer un serveur NFS et comment monter les systèmes de fichiers distants sur les machines clientes. Si vous mettez en œuvre NFS en production et partagez des données sensibles, c’est une bonne idée d’activer l’authentification kerberos.
Comme alternative à NFS, vous pouvez utiliser SSHFSpour monter des répertoires distants via une connexion SSH. SSHFS est crypté par défaut et beaucoup plus facile à configurer et à utiliser.
Il s’agit d’un système d’authentification par cryptage.