Het omgaan met Kerberos-keytabbestanden in Linux-omgevingen, of zelfs in bepaalde Windows-configuraties, kan een behoorlijke uitdaging zijn bij het automatiseren van serviceauthenticatie. Een keytab is in feite een soort geheime handdruk: het bevat versleutelde sleutels waarmee services zich kunnen authenticeren zonder steeds om een wachtwoord te hoeven vragen. Als je ooit een service (bijvoorbeeld nginx of apache) met Active Directory hebt proberen in te stellen en het werkt niet, is de kans groot dat dit komt doordat de keytab niet correct is ingesteld of de SPN (Service Principal Name) niet goed is gekoppeld. Dit proces kan in eerste instantie behoorlijk intimiderend lijken, vooral omdat Windows geen eenvoudige tools biedt om de inhoud van een keytab te bekijken zonder allerlei ingewikkelde stappen. Met een paar commando’s en wat inzicht in de werking ervan wordt het echter een stuk minder frustrerend.
Ons doel is om een keytab-bestand te genereren voor een serviceaccount of een machineobject, de juiste SPN te koppelen en ervoor te zorgen dat de service probleemloos kan authenticeren met Kerberos. Een werkend keytab-bestand betekent soepelere authenticatie zonder wachtwoord – handig voor cronjobs, webservers of alles wat op de achtergrond veilig moet communiceren. Dus als uw service niet werkt met Kerberos omdat het keytab-bestand ontbreekt of verkeerd is geconfigureerd, zou deze handleiding u moeten helpen.
Hoe maak en beheer je Kerberos-keytabbestanden voor Active Directory-services?
Een Active Directory-gebruiker aanmaken voor Kerberos-authenticatie
Allereerst hebt u een speciaal gebruikersaccount in Active Directory nodig dat de service zal gebruiken. U kunt dit aanmaken via de ADUC-console (dsa.msc) of PowerShell. Het is belangrijk om een bekend wachtwoord toe te wijzen en ervoor te zorgen dat het wachtwoord nooit verloopt en niet kan worden gewijzigd. Anders wordt uw keytab ongeldig als het wachtwoord later wordt gewijzigd. Hier is een voorbeeld met PowerShell:
New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "[email protected]" -Path "OU=Services, OU=Munich, OU=DE, DC=test, DC=com" -AccountPassword (ConvertTo-SecureString "Sup6r!Pa$s" -AsPlainText -Force) -Enabled $true
Leg nu het wachtwoordbeleid vast:
Get-ADUser web | Set-ADUser -PasswordNeverExpires:$true -CannotChangePassword:$true
Dit is min of meer noodzakelijk om te voorkomen dat Kerberos vastloopt doordat het wachtwoord is gewijzigd.
SPN koppelen aan het account
Hier wordt het wat “technisch”.Een SPN is een soort identificatiecode voor de service waarmee je je authenticeert. Meestal ken je een SPN toe met behulp van `setspn`. Bijvoorbeeld om HTTP aan het account te koppelen:
setspn -A HTTP/web.domain.com web
Controleer of de SPN’s correct zijn gekoppeld:
setspn -L web
Als je je SPN ziet, is alles in orde. Zo niet, voeg deze dan toe. De koppeling zou nu tot stand moeten komen. Deze stap is essentieel voor Kerberos om te bepalen welk account verantwoordelijk is voor de service.
Het genereren van de Keytab met ktpass
Dit is de cruciale stap waar mensen vaak de mist in gaan. Het gebruikte commando is ktpass, waarmee een keytab-bestand wordt aangemaakt voor de SPN die je hebt toegewezen. Hier is een typisch voorbeeld van een commando:
ktpass -princ HTTP/web.domain.com@DOMAIN. COM -mapuser web -crypto all -ptype KRB5_NT_PRINCIPAL -pass "Sup6r!Pa$s" -target yourdomaincontroller.example.com -out C:\share\web.keytab
Waarom -crypto all gebruiken ? Omdat in sommige configuraties niet alle versleutelingstypen zijn ingeschakeld, maar dit zorgt over het algemeen voor een brede compatibiliteit. De uitvoer zal aangeven dat de SPN aan de gebruiker is gekoppeld en dat de keytab succesvol is aangemaakt. Houd er rekening mee dat het msDS-KeyVersionNumber -attribuut op het Active Directory-object wordt verhoogd wanneer u wachtwoorden wijzigt. Als het accountwachtwoord wordt bijgewerkt, moet u de keytab dus opnieuw genereren.
Het controleren en gebruiken van de Keytab
Windows heeft geen ingebouwde tools voor het inspecteren van toetsenbordtabs, maar als Java is geïnstalleerd, kunt u klist.exe gebruiken vanuit de Java bin-directory:
cd "C:\Program Files\Java\jre1.8.0_181\bin" & klist.exe -K -e -t -k C:\share\web.keytab
Dit toont gegevens zoals de SPN’s, versleutelingstypen en tijdstempels. Let op: als uw keytab niet werkt, controleer dan de bestandsrechten; het bestand moet goed beveiligd zijn, want iedereen met leesrechten kan zich mogelijk voordoen als de service.
Een vreemd detail: als je het accountwachtwoord in Active Directory wijzigt, wordt het KVNO (Key Version Number) verhoogd en worden alle oude keytabs ongeldig. Houd daarom goed in de gaten wanneer je de keytab opnieuw genereert om serviceonderbrekingen te voorkomen.
Kortom? Het aanmaken van een keytab is geen toverkunst, maar zo voelt het soms wel. Verwacht wat vallen en opstaan, vooral met SPN-bindingen en versleutelingstypen, maar zodra het is ingesteld, maakt het Kerberos-authenticatie een stuk soepeler, met name voor Linux-services of platformoverschrijdende integraties.
Samenvatting
- Maak een speciale AD-gebruiker aan met een vast wachtwoord.
- Stel de gebruikersaccountopties zo in dat wachtwoordverloop en -wijzigingen worden voorkomen.
- Koppel een SPN met behulp van setspn.
- Genereer de keytab met ktpass en bewaar deze veilig.
- Controleer de inhoud met Java’s klist.exe.
- Houd er rekening mee dat het wijzigen van het AD-wachtwoord betekent dat de keytab opnieuw gegenereerd moet worden.
Samenvatting
Dit hele proces kan wat omslachtig zijn, vooral als je nieuw bent met Kerberos en Active Directory. Maar zodra je het aanmaken en verifiëren van keytabs onder de knie hebt, wordt het toepassen ervan op je Linux- of Windows-services een stuk minder lastig. Verwacht nog steeds wat gepruts, bijvoorbeeld met SPN’s en encryptietypen, maar ach, dat hoort erbij. Hopelijk helpt dit iemand om zijn Kerberos-configuratie soepeler te laten verlopen. Vergeet niet om die keytabs goed te beveiligen – niemand mag er onbevoegden aan komen.