Linux clients met LDAP

Het draaien van een netwerk met SSO (Single Sign-on) en/of LDAP heeft mij altijd erg gefascineerd, al voor mijn Linux tijdperk aanbrak. Toen ik erachter kwam dat dit ook mogelijk was met Linux in de vorm van OpenLDAP e.a was ik heel erg nieuwsgierig naar hoe de vork in de steel zat.

Echter was het voor mij in die tijd niet te behappen en besloot ik het project in de ijskast te zetten tot ik er klaar voor was. De woud van opties, configuratieopties en keuzes was daar een grote reden toe.

"Het moment" kwam ongeveer een half jaar geleden. Inmiddels ben ik bekwamer met Linux en met netwerken. Ook projecten als OpenLDAP of 389DS zijn alleen maar beter geworden, dus leek het me wel weer eens tijd. Inmiddels is er FreeIPA wat als een soort lijm alle benodigde componenten aan elkaar plakt en ervoor zorgt dat je een goed werkend geheel hebt. Met deze tools heb ik besloten om nogmaals een sprong in het diepe te wagen.

Ik ben niet alleen

Al snel kwam ik erachter dat ik niet de enige was die dit geprobeerd heeft of al voor elkaar had. Het internet staat vol met handleidingen over hoe je dit moet doen. Het probleem is echter dat deze handleidingen:

Daar wil ik met dit project ook iets aan doen, dat het niet alleen een handleiding is die ik zelf kan volgen maar dat andere mensen er ook iets aan hebben.

Verwachtingen / wat moet je zelf weten?

Voor je hieraan begint is het handig dat je ongeveer weet waar je aan toe bent. Om dit te kunnen volgen is verstand van de volgende dingen verstandig:

Ook is het handig als je in ieder geval gehoord hebt van de volgende dingen:

Mijn situatie

Om het voor anderen duidelijk te maken hoe het nu zit volgt hier een overzicht (in vogelvlucht) hoe mijn "netwerk" eruit ziet. Ik draai dit virtueel op een Fedora 24 desktop machine met KVM/QEMU en Virt Manager.

Ik heb een drietal virtuele machines, waarvan hieronder de (relevante) instellingen staan. Die herhaal ik iets later in het document nogmaals, met nog wat meer informatie.

Hoofd IPA server

NFS /home server

Client(s)

Tips en trucs

Netwerkinstellingen

Mijn virtuele netwerk is als volgt:

Installeren FreeIPA server

Installeer eerst CentOS. Hoe je dit doet moet je zelf weten en is buiten het bereik van dit project. Zorg ervoor dat je root / sudo rechten hebt en je voldoende RAM en schijfruimte hebt.

Installeer om te beginnen alle benodigde paketten met yum:

[root@ipa-server ~]# yum install ipa-server ipa-server-dns bind-dyndb-ldap

Zodra dit gedaan is kun je beginnen met het installeren en configureren van FreeIPA:

[root@ipa-server ~]# ipa-server-install --ssh-trust-dns --mkhomedir --setup-dns

Met dit commando krijg je een aantal vragen over hoe je LDAP domein eruit moet gaan zien. Neem voor deze vragen de tijd, want ze zijn het fundament voor je netwerk. Eén enkele vraag wil ik er even uit pikken: de vraag wat je als DNS server(s) wilt instellen.

Aangezien alle andere machines in mijn netwerk als DNS server 192.168.122.2 (met andere woorden, ipa-server.timberwolf.nl) gaan gebruiken omdat het anders niet werkt is het handig als deze machine een paar fallback DNS servers krijgt. Ik heb er zelf 4 opgegeven:

Als je dit zelf nabouwt zou ik zeker de laatste twee meepakken.

Na het beantwoorden van deze vragen gaat FreeIPA zichzelf nu installeren en configureren. Dit is een proces wat een aardige tijd kan duren, dus een kop koffie nu is misschien geen slecht idee.

Nadat dit gebeurd is krijg je een melding op je scherm dat er een aantal poorten in je firewall open gezet moeten worden. Ik doe dit zelf altijd op de volgende manier; hier ga ik ervan uit dat je firewalld hebt draaien (let op: dit moet je zelf installeren in CentOS 7.0 minimal, op alle andere CentOS 7.0 installaties komt hij standaard mee). Heb je dat niet is het niet lastig ombouwen naar iptables regels.

[root@ipa-server ~]# for service in ntp http https ldap ldaps kerberos kpasswd dns; do
    firewall-cmd --permanent --add-service=${service}
done

Als alles goed is verlopen heb je nu een werkende FreeIPA server. Dit kun je testen door als de admin gebruiker in te loggen waarvan je in de installatie het wachtwoord hebt opgegeven. Dit doe je zo:

[root@ipa-server ~]# kinit admin

Hierna krijg je een wachtwoord prompt, vul daar het admin wachtwoord in wat je bij de installatie van FreeIPA hebt opgegeven en voer daarna vervolgens het commando klist uit. Je zou dan een lijstje met valide kerberos tickets terug moeten krijgen, wat er maar ééntje zal zijn.

Installeren NFS server

Ook hier is het handig om eerst CentOS te installeren, anders kom je niet ver. Zorg er ook hier weer voor dat je server compleet up-to-date is met alle recente updates en patches.

Als het goed is is NFS (als server) al aanwezig in CentOS, maar is deze standaard niet actief. Je moet deze dus eerst activeren:

[root@homes ~]# systemctl enable nfs-server.service
[root@homes ~]# systemctl start nfs-server.service

Om je gebruikersmappen correct te laten exporteren moet je het volgende toevoegen aan /etc/exports:

/exports/home *(rw,sec=sys:krb5:krb5i:krb5p)

Zorg er dan ook voor dat de map /exports/home bestaat, anders werkt het alsnog niet.

NFS configuratie toevoegen aan je FreeIPA / LDAP domein

Voordat je gebruik kunt maken van je NFS server in je FreeIPA setup moet je eerst je FreeIPA server nog configureren dat deze weet heeft van de NFS server en hem ook gebruikt als /home directories. Dit kun je vanuit de IPA gui (webbased) doen, maar voor het gemak laat ik hier alleen de terminal commando's zien.

Voeg eerst de NFS server toe als service binnen FreeIPA / LDAP:

[root@ipa-server ~]# kinit admin
[root@ipa-server ~]# ipa service-add nfs/homes.timberwolf.nl

Voeg daarna een nieuwe automount map toe aan de bestaande automount configuratie en voeg deze toe aan de "master" configuratie (die elke keer uitgevoerd word)

[root@ipa-server ~]# ipa automountmap-add default auto.home
[root@ipa-server ~]# ipa automountkey-add default --key "/home" --info auto.home auto.master

Als laatste moet je zorgen dat er in de auto.home map wat nuttigs staat zodat FreeIPA (en je client(s)) weten wat ze ermee aan moeten:

[root@ipa-server ~]# ipa automountkey-add default --key "*" --info "-fstype=nfs4,rw,sec=sys:krb5:krb5i:krb5p,soft,fsc  homes.timberwolf.nl:/exports/home/&" auto.home

Let hier vooral op de optie sec=sys:krb5:krb5i:krb5p. In veel andere tutorials die ik gevonden heb word alleen de krb5 optie opgegeven, wat bij mij resulteerde in een niet werkende installatie.

Client configuratie

Het configureren van de clients is niet bijzonder complex. Zorg er wederom voor dat alle updates geïnstalleerd zijn en dat de machine in het domein hangt.

Als dit gebeurd is is het een kwestie van de juiste keytabs ophalen uit FreeIPA en je automount-maps configureren. Dat is twee commando's en een reboot:

[root@client ~]# kinit admin
[root@client ~]# ipa-client-automount --location=default --server=ipa-server.timberwolf.nl --no-sssd
[root@client ~]# reboot

Als je wil testen of alles correct werkt is het handig om even een mount te doen na de reboot, daar zou je het volgende bij moeten zien:

[root@client ~]# mount | grep home
...
auto.home on /home type autofs
homes.timberwolf.nl:/exports/home/ on /home/ type nfs4

Die laatste regel alleen als je al ingelogd bent als gebruiker op die machine.

Gotcha's bij het aanmaken van een of meerdere gebruiker(s)

Omdat de /home directories op een NFS server staan is het van belang dat je, na het aanmaken van een of meerdere gebruiker(s) in de FreeIPA management console (of cli) eerst de thuismap van de desbetreffende gebruiker(s) aanmaakt op de NFS server. Laten we voor het gemak een fictieve gebruiker genaamd pietje pakken met de volgende gegevens:

[root@homes ~]# mkdir /exports/home/pietje
[root@homes ~]# chown pietje:pietje /exports/home/pietje
[root@homes ~]# cp /etc/skel/.bash* /exports/home/pietje

Als je dit niet doet heeft een gebruiker bij de 1e inlog geen thuismap en zal het inloggen hoogstwaarschijnlijk niet lukken.

Bronnen

Voor deze handleiding heb ik zelf gebruik gemaakt van de volgende bronnen: