web2 logo

NFS gebruiken om bestanden te delen

Bestanden delen met verschillende computers in je netwerk kan onder andere met NFS (Network File System). De computer waar de map staat die gedeeld moet worden is de server en de overige computers zijn clients.
NFS is een bestandssysteem dat toegang geeft tot bestanden die op schijven in andere computers staan, zodanig dat het lijkt of de bestanden op een schijf in de eigen computer staan.
Met NFS kan je een gedistribueerd bestandsysteem maken waarbij meerdere computers NFS server zijn en bestanden delen.

De werking van NFS

NFS gebruikt voor alle communicatie Remote Procedure Calls (RPCs) met poort 2049 voor de NFS daemon.
In /etc/services kan je dit terugzien:
nfs 2049/tcp # Network File System nfs 2049/udp # Network File System
RPC is een methode voor client-server communicatie die zorgt dat het voor een client niet uitmaakt of iets lokaal of op een server wordt uitgevoerd. De client roept de RPC aan met een aantal parameters en krijgt op dezelfde manier antwoord, of dit nu van het lokale systeem komt, of van een server.
Andere services die met RPC te maken hebben, zoals authenticatie, locks op bestanden en aankoppelverzoeken, gebruiken poorten die ze via de portmapper registreren. De portmapper draait altijd op poort 111. Via de portmapper kan opgevraagd worden welke poort een service gebruikt.
NFS verrichtingen zijn idempotent, wat betekent dat ze meermaals uitgevoerd kunnen worden en dan toch steeds hetzelfde resultaat geven. Dit is belangrijk omdat er storingen in de netwerkcommunicatie kunnen zijn die het noodzakelijk maken om gegevens opnieuw te verzenden.

De versies van NFS

Versie 1: Deze versie was nooit openbaar, maar werd intern gebruikt tijdens de ontwikkeling van NFS.
Versie 2: Gebruikt UDP voor transport van de gegevens. Versie 2 was de 32-bit implementatie van het protocol en had een maximum voor bestandsgrootte van 2GB.
RFC 1094 - NFS Version 2 Protocol Specificatie.

Versie 3: Voegde TCP toe als mogelijkheid voor transport van gegevens. Versie 3 was een 64-bit implementatie van het protocol.
RFC 1813 - NFS Version 3 Protocol Specificatie.

Versie 4: Voegde onder andere caching van gegevens en ondersteuning voor ACLs toe. Deze versie heeft ook een verbeterde beveiliging via Remote Procedure Call Security - Generic Security Services (RPCSEC_GSS). Dit verplicht het gebruik van Generic Security Services Application Programming Interface (GSS-API, gespecificeerd in RFC 2203) om te selecteren tussen beschikbare beveiligingsmechanismen die aangeleverd worden door clients en servers.
RFC 3530 - NFS Version 4 Protocol Specificatie.

Het installeren van voor NFS benodigde programma’s

Zowel op clients als op servers:
sudo apt install nfs-common
Programmas die meekomen: lockd, statd, showmount, nfsstat, gssd, idmapd en mount.nfs.

Op de server:
sudo apt install nfs-kernel-server

Delen wordt exporteren genoemd bij NFS

Een NFS server houdt een tabel bij met lokale fysieke bestandssytemen die beschikbaar zijn voor nfs clients. Het gebruikte jargon voor gedeeld bestandssysteem is exported file system, of in het kort: export.
Om een lijst met via nfs gedeelde mappen te krijgen kan je showmount gebruiken op een nfs server:
sudo showmount -e

NFS gebruikers en authenticatie

NFS gebruikt de user ID (UID) en de group ID (GID) van elke gebruiker in het password bestand (/etc/passwd) van een systeem om te bepalen welke toegang een gebruiker heeft tot de geexporteerde bestanden en mappen, gebasseerd op de UID en GID van de eigenaar van deze mappen op de nfs server. Voor kleine netwerken is dit meestal voldoende, maar voor grotere netwerken is het verstandiger om een netwerk georienteerd authenticatie mechanisme te gebruiken, zoals het Network Information System (NIS).

Handmatig mappen delen via /etc/exports

Het bestand dat gebruikt wordt om te bepalen hoe en wat er gedeeld wordt via NFS, is /etc/exports. De regels in dit bestand hebben de volgende indeling:

volledig-pad-en-naam-van-de-gedeelde-map hosts(aankoppel-opties)

Iedere regel in dit bestand wordt een export specificatie genoemd.
Hosts kunnen worden vermeld met een IP-adres, hostnaam of subnet om aan te geven dat alleen deze hosts toegang hebben tot de gedeelde map. Er kunnen ook wildcards gebruikt worden in de IP-adressen:
192.168.1.50 : alleen de host met dit IP-adres heeft toegang
192.168.1.* of 192.168.1.0 : alle hosts in dit subnet hebben toegang
* : iedereen op het netwerk heeft toegang

Meest bekende aankoppel-opties:
all_squash: Geeft alle lees en schrijfacties de UID en GID mee van een specifieke gebruiker, meestal "anonymous". De default is no_all_squash, hierbij blijven de oorspronkelijke UIDs en GIDs behouden.
insecure: Staat toegang toe vanaf niet-standaard NFS poorten. Deze optie kan je in verband met de veiligheid beter niet gebruiken als je via het internet werkt.
no_root_squash: Geeft root gebruikers op clients dezelfde rechten als de root gebruiker op de server. Dit is gevaarlijk, dit kan je beter niet gebruiken.
ro: Alleen lezen.
rw: Lezen en schrijven, dit is de default.
sync: Meteen schrijven, de gebruiker moet wachten tot alles is weggeschreven.
async: De gebruiker kan meteen verder, er hoeft niet gewacht te worden totdat alle gegevens zijn weggeschreven.

Voorbeeld van een regel in exports:

/home/kees/Muziek *(rw)

Als je wijzigingen hebt aangebracht in /etc/exports kan je deze meteen in werking laten treden via:
sudo exportfs -rv resultaat: exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/home/kees/Muziek". Assuming default behaviour ('no_subtree_check'). NOTE: this default has changed since nfs-utils version 1.0.x exporting *:/home/kees/Muziek

NFS bestandssystemen aankoppelen op een client

Het aankoppelen van een NFS bestandssysteem kan met de naam of het IP-adres van de nfs server gevolgd door een dubbele punt en het pad en de naam van de map die gedeeld wordt.
Voorbeeld: 192.168.1.50:/home/kees/Muziek
Maak een map aan waar je de gedeelde map wil aankoppelen (mounten):
sudo mkdir /mnt/nfs
Dan aankoppelen:
sudo mount -t nfs 192.168.1.50:/home/kees/Muziek /mnt/nfs
Nu is de map /home/kees/Muziek bereikbaar op de client waar deze opdracht is gegeven.
Als je de gedeelde map niet meer nodig hebt, kan je op de client de map afkoppelen met:
sudo umount /mnt/nfs
Als je niet na elke herstart van de client computer handmatig de gedeelde map wil aankoppelen, dan kan je het bestand /etc/fstab aanpassen:
192.168.1.50:/home/kees/Muziek /mnt/nfs nfs _netdev,rw,defaults 0 0
De optie _netdev zorgt ervoor dat je computer niet blijft hangen bij het starten als het netwerk niet bereikbaar is.
Het kan ook misgaan als de gedeelde map versleuteld is en deze op het moment dat er aangekoppeld moet worden nog niet ontsleuteld is.
Als je steeds een ander IP-adres krijgt toegewezen, is het ook niet handig om een IP-adres in fstab op te nemen.
Het aankoppelen iets vereenvoudigen kan met een klein script:
#!/bin/bash # dit script koppelt de gedeelde nfs map aan op de nfs server met het ip adres dat je bij de aanroep van het script meegeeft if [[ $# -gt 0 ]] then sudo mount -t nfs $1:/home/kees/Muziek /mnt/nfs else echo "geef het ip-adres van de server bij de aanroep van dit script" fi
Stel je noemt het script aankoppelen.sh, dan kan je het bijvoorbeeld gebruiken met:
./aankoppelen.sh 192.168.1.50

NFS in Windows

In Windows 10 Pro is de NFS client een optioneel onderdeel. Via Windows onderdelen in- of uitschakelen kan deze aangezet worden.

Meer informatie

Meer informatie over NFS is te vinden op: SettingUpNFSHowTo.

Toegevoegd door: Kees de Keijzer
Twitter: @kdkq

~ linux ~

~ Onderwerpen ~

Dit is een website zonder pop-ups

~ Links ~

Design & Development by Cyberwebdesign.nl for web2.nl © 2020.