Hoe een NFS-mount op Ubuntu 18.04 in te stellen

Introductie

NFS, of Network File System, is een gedistribueerd bestandssysteemprotocol dat het mogelijk maakt om externe mappen op uw server te koppelen. Hiermee kunt u de opslagruimte beheren op een andere locatie en ernaar schrijven vanaf meerdere clients. NFS biedt een relatief standaard en prestatiegerichte manier om toegang te krijgen tot externe systemen via een netwerk en werkt goed in situaties waarin de gedeelde middelen regelmatig moeten worden gebruikt.

In deze handleiding leert u hoe u de benodigde software voor NFS-functionaliteit installeert op Ubuntu 18.04, NFS-koppelingen configureert op een server en client, en externe gedeelde mappen koppelt en ontkoppelt.

Vereisten

We zullen twee servers gebruiken in deze tutorial, waarbij de ene een deel van zijn bestandssysteem deelt met de andere. Om deze tutorial te voltooien, heeft u nodig:

  • Twee Ubuntu 18.04 servers. Elk van deze moet een niet-root gebruiker hebben met sudo-rechten geconfigureerd, een firewall opgezet met UFW, en privénetwerken indien beschikbaar.

Tijdens deze tutorial verwijzen we naar de server die zijn mappen deelt als de host en de server die deze mappen aankoppelt als de client. We zullen de volgende IP-adressen gebruiken als stand-ins voor de host en client waarden:

  • Host: 203.0.113.0
  • Client: 203.0.113.24

Wanneer deze IP-adressen verschijnen in commando’s en configuratiebestanden, vervang ze dan door uw eigen respectieve host en client IP-adressen.

Stap 1 — Downloaden en Installeren van de Componenten

Begin eerst met het installeren van de benodigde componenten op elke server.

Op de Host

Op de host-server, installeer het nfs-kernel-server-pakket, waarmee je jouw mappen kunt delen. Aangezien dit de eerste bewerking is die je uitvoert met apt in deze sessie, vernieuw je eerst je lokale pakketindex:

  1. sudo apt update

Vervolgens installeer je het pakket:

  1. sudo apt install nfs-kernel-server

Zodra deze pakketten zijn geïnstalleerd, schakel je over naar de client-server.

Op de Client

Op de client-server, installeer een pakket genaamd nfs-common, dat NFS-functionaliteit biedt zonder serveronderdelen op te nemen. Vernieuw opnieuw de lokale pakketindex voor de installatie om ervoor te zorgen dat je over up-to-date informatie beschikt:

  1. sudo apt update

Vervolgens installeer je het pakket:

  1. sudo apt install nfs-common

Nu beide servers de benodigde pakketten hebben, kun je ze gaan configureren.

Stap 2 – Het Delen van Mappen op de Host

We gaan twee afzonderlijke mappen delen met verschillende configuratie-instellingen om twee belangrijke manieren te illustreren waarop NFS-koppelingen kunnen worden geconfigureerd met betrekking tot supergebruikerstoegang.

Supergebruikers kunnen alles overal op hun systeem doen. NFS-gemonteerde mappen maken echter geen deel uit van het systeem waarop ze zijn gemonteerd, dus weigert de NFS-server standaard om handelingen uit te voeren die supergebruikersrechten vereisen. Deze standaardbeperking betekent dat supergebruikers op de client geen bestanden kunnen schrijven als root, eigenaarschap kunnen herschikken of andere taken met supergebruikersrechten kunnen uitvoeren op de NFS-mount.

Soms zijn er echter vertrouwde gebruikers op het client-systeem die deze acties moeten uitvoeren op het gekoppelde bestandssysteem, maar die geen supergebruikerstoegang nodig hebben op de host. U kunt de NFS-server configureren om dit toe te staan, hoewel dit een element van risico met zich meebrengt, aangezien zo’n gebruiker root-toegang tot het hele host-systeem zou kunnen verkrijgen.

Voorbeeld 1: Het exporteren van een algemene doelmontage

In het eerste voorbeeld maakt u een algemene NFS-mount die de standaard NFS-gedrag gebruikt om het voor een gebruiker met root-privileges op de client-machine moeilijk te maken om met die client-supergebruikersrechten te interacteren met de host. U zou zoiets kunnen gebruiken om bestanden op te slaan die zijn geüpload met behulp van een contentmanagementsysteem of om ruimte te maken voor gebruikers om projectbestanden te delen.

Maak eerst een gedeelde map:

  1. sudo mkdir /var/nfs/general -p

Aangezien je het met sudo maakt, is de directory eigendom van de host’s root gebruiker:

  1. ls -la /var/nfs/general
Output
total 8 drwxr-xr-x 2 root root 4096 Feb 7 23:21 . drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..

NFS zal alle root bewerkingen op de client vertalen naar de referenties nobody:nogroup als een beveiligingsmaatregel. Daarom moet je de eigendom van de directory wijzigen om overeen te komen met die referenties:

  1. sudo chown nobody:nogroup /var/nfs/general

Je bent nu klaar om deze directory te exporteren.

Voorbeeld 2: De Home Directory Exporteren

In ons tweede voorbeeld is het doel om gebruikershome-directories opgeslagen op de host beschikbaar te maken op client-servers, terwijl vertrouwde beheerders van die client-servers de toegang krijgen die ze nodig hebben om gebruikers handig te beheren.

Om dit te doen, exporteer je de /home-directory. Omdat deze al bestaat, hoef je deze niet te maken. Je wijzigt ook de machtigingen niet. Als je dat zou doen, zou dat kunnen leiden tot verschillende problemen voor iedereen met een home-directory op de host-machine.

Stap 3 — Configuratie van de NFS-export op de hostserver

Vervolgens duiken we in het NFS-configuratiebestand om het delen van deze bronnen in te stellen.

Op de host-machine opent u het bestand /etc/exports in uw voorkeursteksteditor met root-rechten. Hier gebruiken we nano:

  1. sudo nano /etc/exports

Het bestand bevat opmerkingen die de algemene structuur van elke configuratieregel tonen. De syntaxis is als volgt:

/etc/exports
directory_to_share    client(share_option1,...,share_optionN)

U moet een regel maken voor elk van de mappen die u van plan bent te delen. Aangezien ons voorbeeld client een IP heeft van 203.0.113.24, zien onze regels er als volgt uit. Zorg ervoor dat u het IP-adres wijzigt naar dat van uw client:

/etc/exports
/var/nfs/general    203.0.113.24(rw,sync,no_subtree_check)
/home       203.0.113.24(rw,sync,no_root_squash,no_subtree_check)

Hier gebruiken we dezelfde configuratieopties voor beide mappen, met uitzondering van no_root_squash. Laten we bekijken wat elk van deze opties betekent:

  • rw: Deze optie geeft de client-computer zowel lees- als schrijftoegang tot het volume.
  • sync: Deze optie dwingt NFS om wijzigingen naar de schijf te schrijven voordat er wordt geantwoord. Dit resulteert in een stabielere en consistente omgeving omdat het antwoord de werkelijke staat van het externe volume weerspiegelt. Het vertraagt echter ook de snelheid van bestandsbewerkingen.
  • no_subtree_check: Deze optie voorkomt subtree-controle, waarbij de host moet controleren of het bestand daadwerkelijk nog beschikbaar is in de geëxporteerde boom voor elke aanvraag. Dit kan veel problemen veroorzaken wanneer een bestand wordt hernoemd terwijl de client het open heeft. In bijna alle gevallen is het beter om subtree-controle uit te schakelen.
  • no_root_squash: Standaard vertaalt NFS verzoeken van een root gebruiker op afstand naar een niet-bevoorrechte gebruiker op de server. Dit was bedoeld als beveiligingsfunctie om te voorkomen dat een root account op de client het bestandssysteem van de host als root gebruikt. no_root_squash schakelt dit gedrag uit voor bepaalde shares.

Wanneer je klaar bent met het maken van je wijzigingen, sla het bestand op en sluit het af. Als je nano gebruikt, kun je dit doen door op CTRL + X te drukken, vervolgens Y en ENTER. Daarna, om de shares beschikbaar te maken voor de geconfigureerde clients, herstart de NFS server met de volgende opdracht:

  1. sudo systemctl restart nfs-kernel-server

Voordat je daadwerkelijk gebruik kunt maken van de nieuwe shares, moet je er echter voor zorgen dat het verkeer naar de shares wordt toegestaan door firewallregels.

Stap 4 — Aanpassen van de Firewall op de Host

Eerst, controleer de firewallstatus om te bevestigen of deze is ingeschakeld en, zo ja, bekijk wat momenteel is toegestaan:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

Op ons systeem wordt alleen SSH-verkeer toegestaan, dus we moeten een regel toevoegen voor NFS-verkeer.

Met veel toepassingen kunt u sudo ufw app list gebruiken en ze inschakelen op naam, maar nfs is daar geen van. Omdat ufw echter ook /etc/services controleert op de poort en het protocol van een service, kunt u NFS nog steeds op naam toevoegen. Het beste gebruik raadt aan dat u de meest beperkende regel inschakelt die nog steeds het verkeer toestaat dat u wilt toestaan, dus in plaats van verkeer van overal in te schakelen, zult u specifiek zijn.

Gebruik de volgende opdracht om poort 2049 op de host te openen, waarbij u ervoor zorgt dat u uw client IP-adres vervangt:

  1. sudo ufw allow from 203.0.113.24 to any port nfs

U kunt de wijziging verifiëren door het volgende uit te voeren:

  1. sudo ufw status

U zou een lijst moeten ontvangen van verkeer dat is toegestaan vanaf poort 2049 in de uitvoer:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

Dit bevestigt dat UFW alleen NFS-verkeer op poort 2049 zal toestaan vanaf uw client machine.

Stap 5 — Maken van Koppelingspunten en Koppelen van Mappen op de Client

Nu de host server geconfigureerd is en zijn shares serveert, zult u uw client voorbereiden.

Om de externe shares beschikbaar te maken op de client, moet u de mappen op de host aankoppelen die u wilt delen naar lege mappen op de client.

Opmerking: Als er bestanden en mappen zijn in uw koppelingspunt, worden deze verborgen zodra u de NFS-share koppelt. Om het verlies van belangrijke bestanden te voorkomen, zorg ervoor dat als u koppelt in een map die al bestaat, de map leeg is.

Maak twee mappen voor uw koppelingen. Voer het volgende commando uit om de eerste te maken::

  1. sudo mkdir -p /nfs/general

Voer vervolgens dit commando uit om de tweede te maken::

  1. sudo mkdir -p /nfs/home

Nu u een locatie hebt om de externe shares te plaatsen en de firewall hebt geopend, kunt u de shares koppelen door het IP-adres van uw host-server te gebruiken, dat in deze handleiding 203.0.113.0 is:

  1. sudo mount 203.0.113.0:/var/nfs/general /nfs/general
  2. sudo mount 203.0.113.0:/home /nfs/home

Deze commando’s zullen de shares van de hostcomputer op de client-machine koppelen. U kunt dubbel controleren of ze succesvol zijn gekoppeld op verschillende manieren. U kunt dit controleren met een mount– of findmnt-commando, maar df -h biedt een meer leesbare uitvoer die illustreert hoe schijfgebruik anders wordt weergegeven voor de NFS-shares:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.6M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general 203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home

Beide van de gekoppelde shares verschijnen onderaan. Omdat ze zijn gekoppeld vanuit hetzelfde bestandssysteem, tonen ze hetzelfde schijfgebruik. Om te controleren hoeveel ruimte daadwerkelijk wordt gebruikt onder elk koppelingspunt, gebruikt u het schijfgebruikscommando du en het pad van de koppeling. De -s-vlag biedt een samenvatting van het gebruik in plaats van het gebruik voor elk bestand weer te geven. De -h geeft leesbare uitvoer weer:

  1. du -sh /nfs/home
Output
44K /nfs/home

Dit laat zien dat de inhoud van de gehele home directory slechts 44K van de beschikbare ruimte gebruikt.

Stap 6 — Testen van NFS-toegang

Vervolgens test u de toegang tot de gedeelde mappen door iets naar elk van hen te schrijven.

Voorbeeld 1: De Algemene Doelmap

Schrijf eerst een testbestand naar de gedeelde map /var/nfs/general:

  1. sudo touch /nfs/general/general.test

Controleer vervolgens de eigenaar:

  1. ls -l /nfs/general/general.test
Output
-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test

Omdat u dit volume hebt gemount zonder het standaardgedrag van NFS te wijzigen en het bestand hebt aangemaakt als de root-gebruiker van de client-machine via het sudo-commando, wordt de eigendom van het bestand standaard ingesteld op nobody:nogroup. Client-supergebruikers kunnen geen typische beheeracties uitvoeren, zoals het wijzigen van de eigenaar van een bestand of het maken van een nieuwe map voor een groep gebruikers, op deze NFS-gekoppelde share.

Voorbeeld 2: De Thuismap Share

Om de machtigingen van de Algemene Doelmap te vergelijken met die van de Thuismap, maakt u op dezelfde manier een bestand aan in /nfs/home:

  1. sudo touch /nfs/home/home.test

Controleer vervolgens de eigendom van het bestand:

  1. ls -l /nfs/home/home.test
Output
-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test

Je hebt home.test aangemaakt als root met behulp van het sudo-commando, precies op dezelfde manier als je het bestand general.test hebt aangemaakt. Echter, in dit geval is het eigendom van root omdat je het standaardgedrag hebt overschreven toen je de no_root_squash-optie op deze mount hebt gespecificeerd. Dit maakt het mogelijk dat je root-gebruikers op de client-machine als root kunnen handelen en het beheer van gebruikersaccounts veel handiger maakt. Tegelijkertijd betekent dit dat je deze gebruikers geen root-toegang hoeft te geven op de host.

Stap 7 — Het koppelen van de externe NFS-mappen bij het opstarten

Je kunt de externe NFS-shares automatisch bij het opstarten koppelen door ze toe te voegen aan het /etc/fstab-bestand op de client.

Open het volgende bestand met rootprivileges in je voorkeurteksteditor:

  1. sudo nano /etc/fstab

Aan het einde van het bestand voeg je een regel toe voor elk van je shares, zoals de volgende:

/etc/fstab
. . .
203.0.113.0:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home       /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Let op: Je kunt meer informatie vinden over de hier gespecificeerde opties in de NFS man-pagina. Je kunt hier toegang toe krijgen door het volgende commando uit te voeren:

  1. man nfs

De client-server zal de externe partities automatisch aankoppelen bij het opstarten, hoewel het even kan duren om de verbinding tot stand te brengen en voor de gedeelde mappen beschikbaar te zijn.

Stap 8 — Het Afkoppelen van een NFS Extern Gedeeld Bestandssysteem

Als je niet langer wilt dat de externe map is gekoppeld op je systeem, kun je deze afkoppelen door uit de directorystructuur van de gedeelde map te gaan en deze af te koppelen.

Verander eerst naar de thuismap:

  1. cd ~

Vervolgens het aankoppelen van /nfs/home. Let op dat het commando umount heet, niet unmount zoals je misschien zou verwachten:

  1. sudo umount /nfs/home

Daarna het aankoppelen van /nfs/general:

  1. sudo umount /nfs/general

Dit zal de externe gedeelde mappen verwijderen, waardoor alleen je lokale opslag toegankelijk blijft:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.5M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

Als je wilt voorkomen dat ze bij de volgende herstart opnieuw worden aangekoppeld, bewerk dan /etc/fstab en verwijder de regel of maak er een opmerking van door een #-teken aan het begin van de regel toe te voegen. Je kunt ook voorkomen dat het automatisch wordt aangekoppeld door de auto-optie te verwijderen, waardoor je het handmatig kunt aankoppelen.

Conclusie

In deze handleiding heb je een NFS-host gemaakt en enkele belangrijke NFS-gedragingen geïllustreerd door twee verschillende NFS-mounts te maken, die je hebt gedeeld met je NFS client. Als je van plan bent om NFS in productie te implementeren, is het belangrijk op te merken dat het protocol zelf niet is versleuteld. In gevallen waarin je bestanden deelt via een privénetwerk, is dit mogelijk geen probleem. In andere gevallen is een VPN of een ander type versleutelde tunnel nodig om je gegevens te beschermen. Merk op dat dit vaak leidt tot een aanzienlijke vermindering van de prestaties. Als prestaties een probleem zijn, overweeg dan om SSHFS te gebruiken.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04