NFS is nog steeds een veel gebruikt protocol in Linux omgevingen. Met de algemene introductie van NFSv4 in alle Linux distributies is het nu ook mogelijk om goede user-level authenticatie tot de NFS shares te regelen. In dit artikel lees je hoe dat moet.

Een Kerberized NFS server werkt niet met Kerberos alleen. Je hebt ook een LDAP server nodig, waarop de user accounts voorkomen, die je wilt gebruiken in de NFS omgeving. Wanneer we het hebben over “Kerberized NFS” hebben we het dan ook eigenlijk over een LDAP log-in, waarbij de authenticatie door middel van Kerberos extra beveiligd is. Om Kerberized NFS te kunnen configureren, moet je er als voorwaarde voor gezorgd hebben dat LDAP authenticatie met Kerberos beveiligd is.

Ook is het belangrijk dat op die LDAP server DNS goed geregeld is. Kerberos informatie wordt namelijk als resource record in DNS weggeschreven. In de ideale situatie is de LDAP server zelf ook DNS server. Een eenvoudige manier om dit te regelen is door middel van free IPA: een oplossing waarover je eerder in Linux Magazine gelezen hebt. Als je dan gebruikmaakt van IPA, is het aan te bevelen om alle servers, die een rol spelen in deze configuratie, als IPA client toe te voegen aan het Kerberos domein. Hiervoor gebruik jede opdracht:

ipa-client-install

 

Kerberos credentials

In een Kerberized NFS omgeving komt het er op neer dat de NFS service zelf ook aanmeldt door middel van Kerberos. Hiervoor is een keytab bestand nodig. Dit bestand maak je aan op de LDAP/Kerberos server. De onderstaande stappen beschrijven hoe je dit doet, als je gebruikmaakt van een Free IPA server. De stappen in dit artikel zijn gebaseerd op CentOS 7.3. Als je een andere distributie gebruikt, kunnen de stappen hier en daar afwijken:

1.         Open op de IPA server een root shell met kinit admin

2.         Voeg dan de Kerberos credentials voor de NFS server toe met ipa service-add. Als het commando vraagt voor welke service je dit wilt, antwoord je nfs/server.example.com, waarbij server.example.com overeenkomt met de DNS naam van de server.

3.         Als je NFS server al client is van de IPA server, kan je daar vervolgens de Kerberos credentials importeren en wegschrijven naar het bestand /etc/krb5.keytab met de opdracht ipa-getkeytab -s labipa.example.com -p nfs/server.example.com -k /etc/krb5.keytab. Gebruik vervolgens de opdracht klist -k om te controleren dat dit goed is gegaan.

4.         In een Kerberized NFS omgeving heb je natuurlijk ook een client nodig. Ook deze client moet een keytab bestand hebben. Als je de NFS client met ipa-client-install lid gemaakt hebt van het Kerberos domain, zal deze de keytab al hebben. Dit controleer je door met kinit een root shell te openen en vervolgens met klist -k de keytab op te vragen.

Als de keytab bestanden aanwezig zijn, kun je de NFS export zelf aanmaken. Dit doe je met behulp van de volgende stappen, waarbij we ervan uitgaan dat server1 de NFS server is en server2 de NFS client (de server waarop je de mount gaat gebruiken).

1.         Begin op server1 de NFS share aan te maken: mkdir /secureshare. Als je dit op een CentOS of verwante Linux distributie doet, gebruik je vervolgens semanage fcontext -a -t public_content_rw_t “/secureshare(/.*)?”; restorecon -Rv /secureshare om ook de SELinux context goed in te stellen.

2.         Stel er dan permissies op in. Laten we het eenvoudig houden, zodat we op NFS kunnen focussen en hiervoor gewoon chmod 777 /secureshare gebruiken.

3.         Vervolgens kun je de NFS secured mount definiëren. Hiervoor neem je de volgende regel op in het bestand /etc/fstab op de NFS Server: /secureshare           *(sec=krb5p,rw). In deze regel is het de mount optie sec=krb5p, die ervoor zorgt dat het hoogste niveau van Kerberos protectie op de share wordt toegepast.

4.         Nu kun je op de NFS server die NFS service starten en de onderliggende Kerberos credentials initialiseren. Om de server te starten, gebruik je systemctl start nfs-server. Om de benodigde NFS credentials te initialiseren, gebruik je systemctl start nfs-secure-server. Tot slot zorg je ervoor dat de NFS server automatisch gestart wordt na een herstart met de opdracht systemctl enable nfs-server.

5.         Tot slot zorg je dat de firewall ook open staat. Dit doe je met de opdracht firewall-cmd –permanent –add-service=nfs –add-service=rpc-bind –add-service=mountd; firewall-cmd –reload

6.         Je bent nu klaar met de configuratie van de server en kunt verder met de configuratie van de client. De eerste belangrijke stap bestaat eruit om te zorgen dat de benodigde software packages aanwezig zijn. Hiervoor gebruik je yum groups install “Network File System Client”

7.         Vervolgens dien je het ondersteunende Kerberos materiaal aan te maken met de opdracht systemctl start nfs-secure. Als dit geregeld is, kun je een mountpunt aanmaken met mkdir /securenfs.

8.         Nu kun je testen dat alles in orde is en de mount uitvoeren. Hiervoor gebruik je de opdracht mount -o sec=krb5p server1.example.com:/secureshare /securenfs.

9.         Als het voorgaande succesvol is en de share op dit moment gemount is, kun je testen of het ook inderdaad goed gaat als je er als LDAP user naartoe gaat. Hiervoor maak je gebruik van een LDAP user account met lees en schrijf-permissies in de share. Het is aan te raden om in te loggen als LDAP user (en niet gebruik te maken van een subshell, die je met su –  opent).

10.       Na ingelogd te hebben als LDAP user, type je in de shell van deze user de opdracht klist. Je moet nu zien dat de user Kerberos credentials heeft. Als dit niet het geval is, heeft het geen zin om verder te gaan. De Kerberos credentials van de LDAP user worden namelijk gematcht aan de Kerberos credentials van de NFS share en op basis daarvan krijgt de gebruiker toegang.

11.       Ga nu als LDAP user met cd /securenfs naar het mountpunt van de NFS share en controleer met touch eenbestand dat je eenbestand aan kunt maken. Als dit het geval is, maak je de mount persistent door hem op te nemen in /etc/fstab. Dit doe je door hier de volgende regel in te zetten: server.example.com:/secureshare /securenfs nfs sec=krb5p 0 0.

In het voorgaande heb je gelezen hoe je een Kerberized NFS share kunt exporteren en vervolgens aan de client kant kunt mounten. Door deze procedure te gebruiken, zorg je ervoor dat NFS eindelijk op een veilige wijze gebruikt wordt. De kans is aanzienlijk dat tijdens het toepassen van deze procedure je tegen de nodige problemen aanloopt. De procedure is namelijk nogal gevoelig voor kleine foutjes. Daarom tot slot van dit artikel een korte checklist, waarmee je eenvoudig nagaat of je niets over het hoofd gezien hebt.

·         Als kinit admin niet lukt, zijn je servers geen onderdeel van het IPA domain.

·         Als je op de client bij het mounten de melding “Unsupported mount” krijgt, gebruik dan yum groups install “Network File System Client” om de benodigde client packages te installeren.

·         Als je deze procedure op CentOS uitvoert, controleer dat je versie 7.3 of later gebruikt, want hierin is de procedure eindelijk stabiel.

·         Als na het aanmaken van bestanden in de share alle files de user nfsnobody als eigenaar hebben, open je het bestand /etc/sssd/sssd.conf op de server en neem je er de regel use_fully_qualified_names = false in op. Hierna herstart je de server.

Als je dan uiteindelijk alles werkend hebt, heb je ervoor gezorgd dat de beveiliging van je NFS server aanzienlijk versterkt is en kun je deze service nog jaren blijven gebruiken!