Zolang er computers zijn, zijn er wachtwoorden. Zolang er wachtwoorden zijn, zijn er discussies over wat een sterk wachtwoord is. Hier vind je een link naar het historisch perspectief. Helaas kan ik het zelf niet zo leuk vertellen. Maar het doet niets af aan het nut en de kracht van wachtwoorden. Een goed wachtwoord houdt heel veel ongenode gasten buiten de deur.

Arjan ten Hoopen

Hive Systems heeft een mooi overzicht gemaakt waarin duidelijk aangegeven staat hoe lang een hacker nodig heeft om een bepaald wachtwoord te kraken. Ook hier zijn natuurlijk heel veel discussies over mogelijk, maar met een beetje boerenverstand kom je snel tot de conclusie; hoe langer en hoe meer verschillende soorten karakters in het wachtwoord, des te beter. Houd het overzicht maar aan als leidraad.

Sterk wachtwoord

Niet alleen de sterkte van een wachtwoord bepaalt hoelang je ongenodigde gasten buiten de deur houdt, maar ook of je voor elk systeem hetzelfde of een verschillend wachtwoord hebt. Lange tijd was er de consensus dat je een sterk wachtwoord moest hebben en dat om de zoveel tijd moest veranderen. Tegenwoordig, en de opkomst van wachtwoord managers heeft daar zeker aan bijgedragen, is de consensus dat je voor elk systeem een apart sterk wachtwoord moet hebben. Blijft de vraag: wat is nu een sterk wachtwoord? En als ik een sterk wachtwoord heb, en ik verander dat in een nieuw sterk wachtwoord dat er wel veel op lijkt, is het dan nog steeds sterk? Onze Linux systemen hebben allemaal cracklib. Maar de tand des tijds heeft ook zijn vat gekregen op cracklib. Maar gelukkig heeft cracklib een opvolger: pwquality.

Opvolger

Linux gebruikt PAM (Pluggable Authentication Modules) voor authenticatie. In de password module van PAM wordt pam_cracklib gebruikt om vast te stellen of je wachtwoord aan de gestelde eisen voldoet. Laten we met de tijd meegaan en overgaan op pam_pwquality. In dit artikel ga ik uit van een fris geïnstalleerd openSUSE Leap 15.2 systeem, voor andere distributies zal het gelijkaardig gaan.

Maar eerst een paar woorden over pam_config, dit tool genereert alle pam configuratie bestanden. Pas je deze bestanden aan, dan zullen, wanneer pam_config weer uitgevoerd wordt, al je aanpassingen overschreven worden. Kijk je echter in /etc/pam.d, dan zul je zien dat er een aantal bestanden zijn die eindigen op -pc en dat deze broertjes hebben zonder de extensie -pc. De bestanden die eindigen op -pc worden door pam_config gegenereerd. De overeenkomstige bestanden zonder -pc worden door het systeem werkelijk gebruikt. Als je goed kijkt zie je dat de bestanden zonder -pc symbolische links zijn naar de bestanden met -pc. Wil je dus aanpassingen maken, maak dan van de symbolische links echte bestanden. Je kunt daarna deze bestanden zelf aanpassen zonder dat ze overschreven worden bij een rerun van pam_config. Ben je verantwoordelijk voor een groot aantal systemen, dan is het mogelijk raadzaam om de configuratie van pam_config aan te passen. Dit valt echter buiten de scope van dit artikel.

 

Install

De eerste stap is het installeren van het pakket pam_pwquality. Doe dit via je package manager. Vervolgens open je een terminal en ga je naar /etc/pam.d. en maakt daar van het bestand common-password een echt bestand (zie Listing 1 hieronder). Nu kun je common-password aanpassen zonder dat het overschreven gaat worden door pam_config. Voordat we dit bestand gaan aanpassen, we willen immers pam_pwquality gaan gebruiken, moeten we eerst pam_pwquality configureren. Dit zorgt ervoor dat we straks meteen het gewenste effect krijgen.

Listing 1:

cd /etc/pam.d
sudo cp common-password common-password2
sudo rm -f common-password
sudo mv common-password2 common-password

De configuratie van pam_pwquality staat in /etc/security/pwquality.conf. Echter je kunt ook opties opgeven in common-password. Deze overschrijven de waardes in het pwquality.conf bestand. Ik hou alles graag op één plek, in dit geval; in het configuratie bestand. Dit bestand is goed gedocumenteerd. Dit is zo, totdat je de uitleg van minlen leest. Trouwens minlen heeft een minimale waarde van 6, deze is hard gecodeerd en zorgt ervoor dat echt simpele wachtwoorden nooit geaccepteerd worden.

Credits

Ze praten over credits. Maar wat zijn credits? Pam_cracklib, en ook pam_pwquality,  combineren wachtwoord lengte en wachtwoord sterkte. Deze combinatie geeft je wachtwoord via een simpel rekensommetje een aantal credits. Met minlen stel je het aantal minimale credits in waaraan een wachtwoord moet voldoen. Zie die credits dus maar als punten die je wachtwoord kan scoren door de lengte en sterkte. Maar wat is het sommetje? Ook dat is recht door zee, je kunt in het configuratie bestand aangeven hoeveel credits een getal, een hoofdletter, een kleine letter en andere karakters ($#@& etc.) in je wachtwoord opleveren. Je kunt tevens configureren uit hoeveel types, of classes, het wachtwoord minimaal moet bestaan. Je raadt het al, hoofdletters, kleine letters, getallen en andere karakters zijn elk een type. Stel ook maxrepeat in! Dit geeft aan hoeveel gelijke karakters achter elkaar mogen staan. Via maxclassrepeat kun je dit ook instellen per type. In onderstaande tabel vind je mogelijk een goede startinstelling.

Let op: in het configuratie bestand staan #-jes voor elke instelling, verwijder die, anders blijft het een commentaar regel.

difok = 4 
minlen = 13 
dcredit = 1 
ucredit = 1 
lcredit = 0 
ocredit = 1 
minclass = 4 
maxrepeat = 2 
maxclassrepeat = 2 
gecoscheck = 0 
dictcheck = 1 
usercheck = 1 
enforcing = 1 
dictpath =

Gebruik

Configuratie van pam_pwquality is klaar, nu zorgen dat het systeem pam_pwquality ook gaat gebruiken. Ga naar de map /etc/pam.d en open (als root) het bestand common-password met je favoriete editor. De eerste niet commentaar regel is password requisite pam_cracklib.so Verander in deze regel pam_crocklib.so in pam_pwquality.so en sla dit bestand weer op. Nu is pwquality actief, je hoeft geen daemons etc te herstarten. Maak nu even een tijdelijke gebruiker aan (als root) om mee te testen sudo useradd -m tester. Straks gooi je deze gebruiker weer weg via (als root) sudo userdel tester. Log in als de nieuwe gebruiker en probeer nu het wachtwoord te veranderen met passwd tester. Probeer verschillende mogelijkheden van zwak tot sterk. Op deze manier kun je er voor zorgen dat alle wachtwoorden sterk worden.

Cracklib Dictionary

Maar wat nu als de systemen waar jij verantwoordelijk voor bent in een omgeving staan, denk eens aan liefhebbers van Pokémon, waarbij normale woorden in deze context al snel sterk zijn maar toch ook behoorlijk voor de hand liggen. Het zou dan makkelijk zijn om een tool te hebben om een eigen dictionary aan te leggen naast de al geïnstalleerde dictionaries op je systeem. Een dergelijk tool is create-cracklib-dict (onderdeel van cracklib). Maak een lijst met woorden, in een bestand, die niet gebruikt mogen worden als wachtwoord. Per regel één woord. Leef je hier in uit en sla het bestand op in de map /usr/share/dict (opslaan moet je doen als root). Vervolgens gebruik je het create-cracklib-dict commando (als root) met het zojuist gecreëerde bestand als argument een nieuwe dictionary. Het commando zorgt ervoor dat het naast de andere cracklib dictionaries opgeslagen wordt. Heb je veel woorden, dan kun je natuurlijk ook meerdere bestanden creëren.

Create-cracklib-dict

Conclusie

pam_pwquality kan met een goede configuratie je systeem heel goed beveiligen tegen zwakke wachtwoorden. Je kunt tevens met create-cracklib-dict eigen dictionaries maken om de sterkte van de wachtwoorden te verhogen.