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.-
Voor hulp bij het instellen van een niet-root gebruiker met
sudo
-rechten en een firewall, volg onze Initiële Serverinstellingen met Ubuntu 18.04 handleiding. -
Als je DigitalOcean Droplets gebruikt voor je server en client, lees dan Hoe je een VPC kunt maken om een privénetwerk in te stellen.
-
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:
Vervolgens installeer je het pakket:
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:
Vervolgens installeer je het pakket:
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:
Aangezien je het met sudo
maakt, is de directory eigendom van de host’s root gebruiker:
Outputtotal 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:
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
:
Het bestand bevat opmerkingen die de algemene structuur van elke configuratieregel tonen. De syntaxis is als volgt:
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:
/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:
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:
OutputStatus: 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:
U kunt de wijziging verifiëren door het volgende uit te voeren:
U zou een lijst moeten ontvangen van verkeer dat is toegestaan vanaf poort 2049
in de uitvoer:
OutputStatus: 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::
Voer vervolgens dit commando uit om de tweede te maken::
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:
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:
OutputFilesystem 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:
Output44K /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
:
Controleer vervolgens de eigenaar:
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
:
Controleer vervolgens de eigendom van het bestand:
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:
Aan het einde van het bestand voeg je een regel toe voor elk van je shares, zoals de volgende:
. . .
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:
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:
Vervolgens het aankoppelen van /nfs/home
. Let op dat het commando umount
heet, niet unmount
zoals je misschien zou verwachten:
Daarna het aankoppelen van /nfs/general
:
Dit zal de externe gedeelde mappen verwijderen, waardoor alleen je lokale opslag toegankelijk blijft:
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