Dernière mise-à-jour : 2020/01/30 03:27
Weight: 3
Description: Candidates should be able to export filesystems using NFS. This objective includes access restrictions, mounting an NFS filesystem on a client and securing NFS.
Key Knowledge Areas:
Terms and Utilities:
Quand on parle de NFS, on parle d'exportation d'un répertoire sur le serveur afin que celui-ci puisse être vu par des clients sur le réseau. Ces clients peuvent ensuite monter le répertoire et l'utiliser comme si celui-ci faisait partie de son propre filesystem.
Le Network File System (NFS) est le protocole de partage de fichiers historique sur des systèmes Unix. Lors de l'introduction de Samba, NFS a vu sa popularité diminuée, essentiellement parce que la connexion est non-sécurisée :
Cependant l'arrivée sur le marché de serveurs NAS domestiques ainsi que l'utilisation de la virtualisation dans le milieu professionnel fait que NFS connait un regain d'intérêt en tant que stockage mutualisé raid, simple à mettre en œuvre.
Il existe actuellement 3 versions de NFS :
Version | Protocole Utilisé | Dépendance |
---|---|---|
NFSv2 | TCP et UDP | portmap |
NFSv3 | TCP et UDP | portmap |
NFSv4 | TCP | Aucune - les fonctions de portmap sont incluses dans NFSv4 |
La version utilisée par défaut sous CentOS/Redhat est NFSv3.
La version NFSv3 utilise les services suivants :
Services | Fonction |
---|---|
nfs | Démarre le service NFS ainsi que les processus RPC pour recevoir et traiter les demandes des clients |
nfslock | Démarre les processus RPC qui permettent aux clients de verrouiller les fichiers sur le serveur |
portmap | Gestion des réservations des ports pour les services RPC locaux afin que les services RPC distants puissent se connecter |
Les services RPC ( Remote Procedure Calls ou appel de procédures distantes ) ont été inventé par SUN Microsystem pour faciliter le travail des développeurs de pous des échanges entre mchines distantes. Les RPC s'appuient sur des numéros de programmes.
Lorsque le client veut faire une requête à un service RPC, il contacte en premier lieu le service rpcbind qui assigne un numéro de port au délà du numéro 32768 à un numéro de programme RPC.
Certaines options, appliquées à un partage, modifient le comportement du serveur NFS pour le partage concerné lors de son démarrage :
Option | Comportement |
---|---|
ro | Accès en lecture seule |
rw | Accès en lecture / écriture |
sync | Ecriture synchrone ( écriture immédiate sur disque ) |
async | Ecriture asynchrone ( écriture sur disque en utilisant une cache ) |
root_squash | Root perd ses prérogatives sur le partage concerné |
no_root_squash | Root garde ses prérogatives sur le partage concerné |
no_lock | Pas de verrous sur les fichiers accédés |
all_squash | Force la mapping de tous les utilisateurs vers l'utilisateur nobody |
anonuid | Fixe l'UID de l'utilisateur anonyme |
anongid | Fixe le GID de l'utilisateur anonyme |
Important : Si plusieurs options sont spécifiées, celles-ci doivent être séparées par des virgules.
Plusieurs commandes permettent de gérer et de s'informer sur l'activité du serveur NFS :
Commande | Comportement |
---|---|
exportfs | Affiche les partages actifs sur le serveur courant |
nfsstat | Affiche les statistiques de l'activité NFS |
rpcinfo | Affiche les démons gérés en effectuant une requête RPC sur le serveur courant |
showmount | Affiche les partages actifs sur un serveur distant |
mount | Permet de monter un partage distant sur un répertoire local |
Important : Arrêtez votre VM. Dans la fenêtre de Oracle VM VirtualBox, cliquez sur Fichier > Paramètres > Réseau et créez un réseau NAT appelé NatNetwork. Dans les paramètres de votre VM, cliquez sur Réseau et configurez la Carte 1 en Réseau NAT dans le réseau NatNetwork. Démarrez votre VM.
Configurez votre interface réseau si ce n'est pas déjà fait :
[root@centos7 ~]# nmcli connection add con-name ip_fixe ifname enp0s3 type ethernet ip4 10.0.2.16/24 gw4 10.0.2.2 Connection 'ip_fixe' (5ac899e6-3f7b-415e-b9d7-c950fab007d5) successfully added. [root@centos7 ~]# nmcli connection mod ip_fixe ipv4.dns 8.8.8.8 [root@centos7 ~]# nmcli connection up ip_fixe Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1) [root@centos7 ~]# systemctl restart NetworkManager.service
Ajoutez une autre adresse IP pour le NFS :
[root@centos7 ~]# nmcli connection mod ip_fixe +ipv4.addresses 192.168.1.2/24
Continuez maintenant par la mise en place du service nfs :
[root@centos7 ~]# systemctl status nfs.service nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled) Active: inactive (dead) [root@centos7 ~]# systemctl enable nfs-server.service ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/multi-user.target.wants/nfs-server.service' [root@centos7 ~]# systemctl status nfs.service nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled) Active: inactive (dead)
La mise en place d'un partage ponctuel se fait en utilisant la commande exportfs en indiquant en argument le répertoire sous la forme de adresse_ip_du_serveur:chemin_du_partage :
[root@centos7 ~]# exportfs [root@centos7 ~]# exportfs 192.168.1.2:/home/trainee [root@centos7 ~]# exportfs /home/trainee 192.168.1.2
Démarrez maintenant le service nfs :
[root@centos7 ~]# systemctl start nfs.service [root@centos7 ~]# systemctl status nfs.service nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled) Active: active (exited) since Thu 2015-10-01 13:18:13 CEST; 4s ago Process: 9552 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 9551 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 9552 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service Oct 01 13:18:13 centos7.fenestros.loc systemd[1]: Starting NFS server and services... Oct 01 13:18:13 centos7.fenestros.loc systemd[1]: Started NFS server and services.
Afin de mettre en place un ou des partages permanents, il est nécessaire d'éditer le fichier /etc/exports :
/home/trainee 192.168.1.1 /tmp *(fsid=0)
Important : Dans ce cas, nous avons partagé le répertoire /home/trainee pour la seule adresse IP 192.168.1.1.
Redémarrez maintenant le service nfs afin que le fichier /etc/exports soit re-lu :
[root@centos7 ~]# systemctl restart nfs.service [root@centos7 ~]# systemctl status nfs.service nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled) Active: active (exited) since Thu 2015-10-01 14:24:50 CEST; 18s ago Process: 4642 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS) Process: 4639 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS) Process: 4638 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS) Process: 4650 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 4649 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 4650 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service Oct 01 14:24:50 centos7.fenestros.loc systemd[1]: Starting NFS server and services... Oct 01 14:24:50 centos7.fenestros.loc exportfs[4649]: exportfs: No options for /home/trainee 192.168.1.1: suggest 192.168.1.1(sync) to avoid warning Oct 01 14:24:50 centos7.fenestros.loc exportfs[4649]: exportfs: No options for /tmp *: suggest *(sync) to avoid warning Oct 01 14:24:50 centos7.fenestros.loc systemd[1]: Started NFS server and services.
Puisque aucune option ne soit spécifiée pour les montages, ceux-ci ont été exportés avec des option par défaut. En utilisant l'option -v de la commande exportfs, il est possible de consulter ces options :
[root@centos7 ~]# exportfs -v /home/trainee 192.168.1.1(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash) /tmp <world>(ro,wdelay,root_squash,no_subtree_check,fsid=0,sec=sys,ro,secure,root_squash,no_all_squash)
Important : Arrêtez votre VM. Créez une clône de votre VM. Démarrez la VM clonée.
Re-configurez ensuite l'interface réseau de votre VM Client :
[root@centos7 ~]# nmcli connection del ip_fixe [root@centos7 ~]# nmcli connection show ip_fixe Error: ip_fixe - no such connection profile. [root@centos7 ~]# nmcli connection add con-name ip_fixe ifname enp0s3 type ethernet ip4 10.0.2.17/24 gw4 10.0.2.2 Connection 'ip_fixe' (5b54ad20-c3e2-4606-b54d-38b225cc578f) successfully added. [root@centos7 ~]# nmcli connection mod ip_fixe ipv4.dns 8.8.8.8 [root@centos7 ~]# nmcli connection mod ip_fixe +ipv4.addresses 192.168.1.1/24 [root@centos7 ~]# nmcli connection up ip_fixe Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1) [root@centos7 ~]# systemctl restart NetworkManager.service
Important : Démarrez la VM d'origine.
Dans la VM d'origine (serveur) passez SELinux en mode permissive et arrêtez le pare-feu :
[root@centos7 ~]# getenforce Enforcing [root@centos7 ~]# setenforce permissive [root@centos7 ~]# systemctl status firewalld.service firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) since Thu 2015-10-01 14:54:57 CEST; 19min ago Main PID: 479 (firewalld) CGroup: /system.slice/firewalld.service └─479 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid Oct 01 14:54:57 centos7.fenestros.loc systemd[1]: Started firewalld - dynamic firewall daemon. [root@centos7 ~]# systemctl stop firewalld.service
A partir de votre client, consultez les répertoire exportés du serveur :
[root@centos7 ~]# showmount --exports 192.168.1.2 Export list for 192.168.1.2: /tmp * /home/trainee 192.168.1.1
Créez maintenant le répertoire /nfs dans le client et montez le partage 192.168.1.2:/home/trainee :
[root@centos7 ~]# mkdir /nfs [root@centos7 ~]# mount -t nfs 192.168.1.2:/home/trainee /nfs
Notez que quand vous essayer de rentrer dans le répertoire en tant que root, vous obtenez le message -bash: cd: /nfs: Permission non accordée :
[root@centos7 ~]# cd /nfs -bash: cd: /nfs: Permission denied
Important : Puisque le répertoire /home/trainee a été exporté avec l'option par défaut root_squash. Ceci implique que root perd ses droits sur le répertoire quand il est monté. En fait, le service nfs remplace l'UID de 0 avec l'UID de l'utilisateur nobody.
Retournez donc dans le serveur et modifiez le fichier /etc/exports ainsi :
[root@centos7 ~]# cat /etc/exports /home/trainee 192.168.1.1(async,rw,no_root_squash) /tmp *
Redémarrez le service nfs :
[root@centos7 ~]# systemctl restart nfs.service
Vous noterez que maintenant vous êtes capable de vous positionner dans le répertoire /nfs du client en tant que root
[root@centos7 ~]# cd /nfs [root@centos7 nfs]#
La commande rpcinfo permet de faire une requête RPC sur le serveur et de voir les démons gérés :
[root@centos6 ~]# rpcinfo program version netid address service owner 100000 4 tcp6 ::.0.111 portmapper superuser 100000 3 tcp6 ::.0.111 portmapper superuser 100000 4 udp6 ::.0.111 portmapper superuser 100000 3 udp6 ::.0.111 portmapper superuser 100000 4 tcp 0.0.0.0.0.111 portmapper superuser 100000 3 tcp 0.0.0.0.0.111 portmapper superuser 100000 2 tcp 0.0.0.0.0.111 portmapper superuser 100000 4 udp 0.0.0.0.0.111 portmapper superuser 100000 3 udp 0.0.0.0.0.111 portmapper superuser 100000 2 udp 0.0.0.0.0.111 portmapper superuser 100000 4 local /var/run/rpcbind.sock portmapper superuser 100000 3 local /var/run/rpcbind.sock portmapper superuser 100024 1 udp 0.0.0.0.182.127 status 29 100024 1 tcp 0.0.0.0.182.157 status 29 100024 1 udp6 ::.146.50 status 29 100024 1 tcp6 ::.139.119 status 29 100011 1 udp 0.0.0.0.3.107 rquotad superuser 100011 2 udp 0.0.0.0.3.107 rquotad superuser 100011 1 tcp 0.0.0.0.3.107 rquotad superuser 100011 2 tcp 0.0.0.0.3.107 rquotad superuser 100005 1 udp 0.0.0.0.204.191 mountd superuser 100005 1 tcp 0.0.0.0.196.122 mountd superuser 100005 1 udp6 ::.177.18 mountd superuser 100005 1 tcp6 ::.229.141 mountd superuser 100005 2 udp 0.0.0.0.215.201 mountd superuser 100005 2 tcp 0.0.0.0.174.127 mountd superuser 100005 2 udp6 ::.199.96 mountd superuser 100005 2 tcp6 ::.147.162 mountd superuser 100005 3 udp 0.0.0.0.210.10 mountd superuser 100005 3 tcp 0.0.0.0.155.14 mountd superuser 100005 3 udp6 ::.147.130 mountd superuser 100005 3 tcp6 ::.220.126 mountd superuser 100003 2 tcp 0.0.0.0.8.1 nfs superuser 100003 3 tcp 0.0.0.0.8.1 nfs superuser 100003 4 tcp 0.0.0.0.8.1 nfs superuser 100227 2 tcp 0.0.0.0.8.1 nfs_acl superuser 100227 3 tcp 0.0.0.0.8.1 nfs_acl superuser 100003 2 udp 0.0.0.0.8.1 nfs superuser 100003 3 udp 0.0.0.0.8.1 nfs superuser 100003 4 udp 0.0.0.0.8.1 nfs superuser 100227 2 udp 0.0.0.0.8.1 nfs_acl superuser 100227 3 udp 0.0.0.0.8.1 nfs_acl superuser 100003 2 tcp6 ::.8.1 nfs superuser 100003 3 tcp6 ::.8.1 nfs superuser 100003 4 tcp6 ::.8.1 nfs superuser 100227 2 tcp6 ::.8.1 nfs_acl superuser 100227 3 tcp6 ::.8.1 nfs_acl superuser 100003 2 udp6 ::.8.1 nfs superuser 100003 3 udp6 ::.8.1 nfs superuser 100003 4 udp6 ::.8.1 nfs superuser 100227 2 udp6 ::.8.1 nfs_acl superuser 100227 3 udp6 ::.8.1 nfs_acl superuser 100021 1 udp 0.0.0.0.163.78 nlockmgr superuser 100021 3 udp 0.0.0.0.163.78 nlockmgr superuser 100021 4 udp 0.0.0.0.163.78 nlockmgr superuser 100021 1 tcp 0.0.0.0.137.82 nlockmgr superuser 100021 3 tcp 0.0.0.0.137.82 nlockmgr superuser 100021 4 tcp 0.0.0.0.137.82 nlockmgr superuser 100021 1 udp6 ::.175.250 nlockmgr superuser 100021 3 udp6 ::.175.250 nlockmgr superuser 100021 4 udp6 ::.175.250 nlockmgr superuser 100021 1 tcp6 ::.188.197 nlockmgr superuser 100021 3 tcp6 ::.188.197 nlockmgr superuser 100021 4 tcp6 ::.188.197 nlockmgr superuser
[root@centos7 ~]# rpcinfo program version netid address service owner 100000 4 tcp6 ::.0.111 portmapper superuser 100000 3 tcp6 ::.0.111 portmapper superuser 100000 4 udp6 ::.0.111 portmapper superuser 100000 3 udp6 ::.0.111 portmapper superuser 100000 4 tcp 0.0.0.0.0.111 portmapper superuser 100000 3 tcp 0.0.0.0.0.111 portmapper superuser 100000 2 tcp 0.0.0.0.0.111 portmapper superuser 100000 4 udp 0.0.0.0.0.111 portmapper superuser 100000 3 udp 0.0.0.0.0.111 portmapper superuser 100000 2 udp 0.0.0.0.0.111 portmapper superuser 100000 4 local /var/run/rpcbind.sock portmapper superuser 100000 3 local /var/run/rpcbind.sock portmapper superuser 100024 1 udp 0.0.0.0.231.232 status 29 100024 1 tcp 0.0.0.0.176.90 status 29 100024 1 udp6 ::.168.173 status 29 100024 1 tcp6 ::.234.102 status 29 100005 1 udp 0.0.0.0.78.80 mountd superuser 100005 1 tcp 0.0.0.0.78.80 mountd superuser 100005 1 udp6 ::.78.80 mountd superuser 100005 1 tcp6 ::.78.80 mountd superuser 100005 2 udp 0.0.0.0.78.80 mountd superuser 100005 2 tcp 0.0.0.0.78.80 mountd superuser 100005 2 udp6 ::.78.80 mountd superuser 100005 2 tcp6 ::.78.80 mountd superuser 100005 3 udp 0.0.0.0.78.80 mountd superuser 100005 3 tcp 0.0.0.0.78.80 mountd superuser 100005 3 udp6 ::.78.80 mountd superuser 100005 3 tcp6 ::.78.80 mountd superuser 100003 3 tcp 0.0.0.0.8.1 nfs superuser 100003 4 tcp 0.0.0.0.8.1 nfs superuser 100227 3 tcp 0.0.0.0.8.1 nfs_acl superuser 100003 3 udp 0.0.0.0.8.1 nfs superuser 100003 4 udp 0.0.0.0.8.1 nfs superuser 100227 3 udp 0.0.0.0.8.1 nfs_acl superuser 100003 3 tcp6 ::.8.1 nfs superuser 100003 4 tcp6 ::.8.1 nfs superuser 100227 3 tcp6 ::.8.1 nfs_acl superuser 100003 3 udp6 ::.8.1 nfs superuser 100003 4 udp6 ::.8.1 nfs superuser 100227 3 udp6 ::.8.1 nfs_acl superuser 100021 1 udp 0.0.0.0.193.97 nlockmgr superuser 100021 3 udp 0.0.0.0.193.97 nlockmgr superuser 100021 4 udp 0.0.0.0.193.97 nlockmgr superuser 100021 1 tcp 0.0.0.0.132.11 nlockmgr superuser 100021 3 tcp 0.0.0.0.132.11 nlockmgr superuser 100021 4 tcp 0.0.0.0.132.11 nlockmgr superuser 100021 1 udp6 ::.151.89 nlockmgr superuser 100021 3 udp6 ::.151.89 nlockmgr superuser 100021 4 udp6 ::.151.89 nlockmgr superuser 100021 1 tcp6 ::.234.241 nlockmgr superuser 100021 3 tcp6 ::.234.241 nlockmgr superuser 100021 4 tcp6 ::.234.241 nlockmgr superuser
La Commande nfsstat permet de vérifier l'activité sur le serveur NFS :
[root@centos6 ~]# nfsstat Server rpc stats: calls badcalls badauth badclnt xdrcall 50 0 0 0 0 Server nfs v4: null compound 2 4% 48 96% Server nfs v4 operations: op0-unused op1-unused op2-future access close commit 0 0% 0 0% 0 0% 5 4% 0 0% 0 0% create delegpurge delegreturn getattr getfh link 0 0% 0 0% 0 0% 45 41% 5 4% 0 0% lock lockt locku lookup lookup_root nverify 0 0% 0 0% 0 0% 3 2% 0 0% 0 0% open openattr open_conf open_dgrd putfh putpubfh 0 0% 0 0% 0 0% 0 0% 46 42% 0 0% putrootfh read readdir readlink remove rename 2 1% 0 0% 3 2% 0 0% 0 0% 0 0% renew restorefh savefh secinfo setattr setcltid 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% setcltidconf verify write rellockowner bc_ctl bind_conn 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% exchange_id create_ses destroy_ses free_stateid getdirdeleg getdevinfo 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% getdevlist layoutcommit layoutget layoutreturn secinfononam sequence 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% set_ssv test_stateid want_deleg destroy_clid reclaim_comp 0 0% 0 0% 0 0% 0 0% 0 0%
[root@centos7 ~]# nfsstat Server rpc stats: calls badcalls badclnt badauth xdrcall 34 0 0 0 0 Server nfs v4: null compound 1 2% 33 97% Server nfs v4 operations: op0-unused op1-unused op2-future access close commit 0 0% 0 0% 0 0% 5 7% 0 0% 0 0% create delegpurge delegreturn getattr getfh link 0 0% 0 0% 0 0% 22 31% 4 5% 0 0% lock lockt locku lookup lookup_root nverify 0 0% 0 0% 0 0% 5 7% 0 0% 0 0% open openattr open_conf open_dgrd putfh putpubfh 0 0% 0 0% 0 0% 0 0% 23 33% 0 0% putrootfh read readdir readlink remove rename 1 1% 0 0% 0 0% 0 0% 0 0% 0 0% renew restorefh savefh secinfo setattr setcltid 5 7% 0 0% 0 0% 0 0% 0 0% 2 2% setcltidconf verify write rellockowner bc_ctl bind_conn 2 2% 0 0% 0 0% 0 0% 0 0% 0 0% exchange_id create_ses destroy_ses free_stateid getdirdeleg getdevinfo 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% getdevlist layoutcommit layoutget layoutreturn secinfononam sequence 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% set_ssv test_stateid want_deleg destroy_clid reclaim_comp 0 0% 0 0% 0 0% 0 0% 0 0%
<html>
Copyright © 2004-2017 I2TCH LIMITED
</html>