Commandline tips – NFS mounten
- November 2, 2018
- 0
Het SMB-protocol van Microsoft (onder Linux geïmplementeerd in Samba) is de meest populaire keuze om bestanden te delen op een NAS of homeserver. Alle grote platformen (Windows, Linux, macOS, Android en iOS) ondersteunen dat immers. Maar om enkel bestanden te delen met Linux-machines is er een prima alternatief: NFS
1. NFS
NFS (Network File System) bestaat al erg lang. De nog steeds populaire versie 3 is al meer dan 20 jaar oud, terwijl de laatste versie (4.2) ongeveer een jaar geleden is verschenen. In tegenstelling tot Samba is de NFS-server een onderdeel van de Linux-kernel, waardoor het veel betere performance biedt. NFS is specifiek ontwikkeld voor UNIX- en Linux-systemen en gedraagt zich bijna hetzelfde als de lokale bestandssystemen op je pc. Bij Samba kan je weleens in de problemen komen met symlinks, case sensitive bestandsnamen (bv. test en Test zijn twee verschillende bestanden) of speciale karakters in bestandsnamen, die Linux wel ondersteunt en Windows niet (of omgekeerd). NFS hoeft geen rekening te houden met de eigenaardigheden van Windows, waardoor zulke problemen zich zelden voordoen.
2. Exports
In NFS-terminologie heet een gedeelde map een “export”. Je benadert exports op de client via het volledige pad op de server en niet via een verkorte naam (zoals bij Samba). Heb je een NFS-export opgezet op je NAS en wil je die nu mounten op je client? Controleer dan eerst met het volgende commando of de export zichtbaar is:
showmount -e <ip-adres-nas>
Vervolgens mount je de export via je grafische bestandsbeheerder of met onderstaande listing (als root!):
$ mount <ip-adres>:<export> <mountpoint>
Je hoeft daarvoor geen gebruikersnaam en wachtwoord op te geven: de NFS-server regelt de toegang tot de verschillende exports op basis van het IP-adres van je client (zie verder tip 5 en 6).
3. Fstab
Een gedeelde map als root mounten via de commandline is niet erg handig, dus dat gaan we even vereenvoudigen. Open (wederom als root) het bestand /etc/fstab en voeg onderaan een extra regel toe, zoals in onderstaande listing. Maar let op: de spaties (of tabs) in die regel zijn erg belangrijk! Zorg ervoor dat de regel uit zes kolommen bestaat: de locatie van de export (server 192.168.1.14 en pad /mnt/data/filip/Documents in ons voorbeeld), het mountpoint op de client (/home/filip/Documenten), het bestandssysteemtype (nfs), de mount-opties (user,noauto) en tot slot twee kolommen met de waarde 0. De optie noauto verhindert dat jouw client de gedeelde map steeds bij het booten mount en met de optie user heb je geen root-rechten meer nodig om de map te mounten. Er verschijnt nu een extra icoontje Documenten in de zijbalk van je bestandsbeheerder om de gedeelde map te mounten.
192.168.1.14:/mnt/data/filip/Documents /home/filip/Documenten nfs user,noauto 0 0
4. Opties
In fstab kan je nog tientallen NFS-specifieke mount-opties toevoegen. De manpage van NFS bevat meer uitleg over de mogelijke opties. In de meeste gevallen heb je die echter niet nodig. Soms lukt het mounten niet, omdat de client dat via NFS-versie 4 probeert, ook al geeft de server aan dat die ook versie 4 ondersteunt. In dat geval kun je expliciet kiezen om NFS-versie 3 te gebruiken met de optie nfsvers=3.
5. Permissies
Op de NFS-server geef je aan welke IP-adressen toegang krijgen tot een export, maar dat is nog niet alles. Om de toegangsrechten van verschillende gebruikers op de client te bepalen, hanteert NFS de standaard UNIX-permissies. Elke gebruiker heeft een (op de client uniek) user id en dàt bepaalt of hij toegang krijgt of niet. De eerste gewone gebruiker op een Linux-systeem heeft altijd user id 1000, de tweede 1001, enzovoorts. Wil je met jouw gebruiker met user id 1000 bestanden op de NFS-server benaderen, dan moet je op de server eenzelfde gebruiker aanmaken met hetzelfde user id als de eigenaar van de gedeelde map. Voor groepen geldt hetzelfde principe.
6. Beveiliging
Het gebruik van user ids om de toegang te bepalen heeft één groot nadeel: je moet vermijden dat twee verschillende gebruikers hetzelfde user id hebben op verschillende systemen. En dat is nu net wat er gebeurt tijdens de meeste installaties van Linux-distributies. Installeer je een desktop user jan, dan heeft die user id 1000. Installeer je nadien een laptop met user piet, dan heeft die óók user id 1000. Deel je vervolgens een map via NFS met beide systemen, dan heeft Jan toegang tot de bestanden van Piet en omgekeerd. Controleer dus steeds de user ids van je gebruikers op alle clients, voordat je NFS gebruikt! Om dezelfde reden laten de meeste NFS-servers geen root-toegang toe tot gedeelde mappen.