Met Pluggable Authentication Modules – kortweg PAM – beschikt Linux over een zeer flexibele manier om applicaties te beveiligen. Als beheerder ben je misschien nog niet vaak in aanraking gekomen met PAM. Op het eerste gezicht lijkt de PAM-syntax nogal complex, maar dat valt best wel mee. We leggen de belangrijkste concepten uit aan de hand van een voorbeeld.

 

Vroeger vond je de PAM-configuratie terug in /etc/pam.conf, maar tegenwoordig krijgt elke applicatie een eigen configuratiebestand in /etc/pam.d. Sommige configuratieparameters zijn dan weer op meerdere applicaties van toepassing. Die vind je bijvoorbeeld in de bestanden die beginnen met ‘common-‘ (in Debian) of ‘system-auth’ en ‘password-auth’ (in RHEL). Dergelijke bestanden worden in andere configuratiebestanden ingelezen met een include-statement. Laten we als voorbeeld even naar /etc/pam.d/sshd onder Debian kijken. Dat bestand bepaalt hoe de authenticatie moet verlopen voor gebruikers die via ssh aanloggen. Elke lijn bevat een nieuwe PAM-regel en de individuele regels bestaan uit 3 of 4 velden, namelijk:

 1. type: auth, account, password of session;

 2. control: required, requisite, sufficient, optional of include;

 3. module: de te gebruiken PAM-module. Beschikbare modules vind je in /lib/x86_64-linux-gnu/security (op een 64-bits-systeem) of /lib/i386-linux-gnu/security (32-bits);

 4. module arguments: eventuele argumenten bij de PAM-module (optioneel).

 Vooral de eerste twee velden vragen om een extra woordje uitleg. Zo hebben de vier verschillende typen regels elk hun eigen doel:

 auth: bepaalt hoe gebruikers zich moeten authentiseren, bijvoorbeeld met een lokale gebruikersaccount (pam_unix) of via een LDAP-account (pam_ldap);

  • account: bevat extra loginbeperkingen, bijvoorbeeld op basis van het tijdstip;

  • password: bevat regels die afgedwongen worden bij het wijzigen van wachtwoorden;

  • session: bevat extra acties die moeten gebeuren nadat de gebruiker zich heeft geauthenticeerd, bijvoorbeeld een homedirectory mounten of een kort bericht tonen (de zogenaamde ‘message of the day’).

     

    Het tweede veld vertelt PAM hoe het met die regel moet omgaan:

     required: de gebruiker krijgt enkel toegang als aan deze regel voldaan wordt. De resterende regels worden steeds uitgevoerd, ongeacht de uitkomst van deze regel. Zo is het goed mogelijk dat een latere regel de gebruiker tóch nog de toegang ontzegt.

  • requisite: zoals required, maar PAM stopt meteen indien niet voldaan wordt aan de regel.

  • sufficient: het omgekeerde van requisite: wordt aan deze regel voldaan, dan krijgt de gebruiker meteen toegang en worden de overige regels niet meer bekeken.

  • optional: of aan deze regel voldaan wordt of niet is enkel belangrijk wanneer het de enige regel is voor een bepaalde service. Dit wordt vaak gebruikt voor session-regels.

     

    afbeelding 1

     

    In afbeelding 1 zie je een ingekorte versie van de sshd PAM-configuratie onder Debian. Het merendeel van de regels wordt gedeeld met andere applicaties: dit zijn de regels die met @include beginnen. Specifiek voor ssh zijn er nog regels met pam_env (om environment variables in te stellen), pam_nologin (om root-loginsuit te schakelen als het bestand /etc/nologin bestaat), pam_motd (om een bericht te tonen bij het inloggen), pam_mail (om de gebruiker te verwittigen van nieuwe mail) en pam_limits (om proceslimieten e.d. in te stellen). Bekijk ook even de verschillende common-bestanden in /etc/pam.d. Daarin vind je onder meer terug dat gebruikersaccounts via /etc/passwd en /etc/shadow gecontroleerd worden (pam_unix).

     

    De meeste modules ondersteunen een heleboel (optionele) argumenten en vaak hebben ze nog extra configuratiebestanden onder /etc/security. Zo is er bijvoorbeeld limits.conf voor pam_limits en pam_env.conf voor pam_env. Meer informatie over de ondersteunde argumenten en gebruikte configuratiebestanden vind je in de manpage van elke pam-module (bijvoorbeeld man pam_unix). De PAM-syntax wordt verder uitgelegd in man 5 pam.conf. Als uitsmijter geven we nog een laatste tip: gebruik de pam_cracklib-module om bepaalde voorwaarden op te leggen voor nieuwe wachtwoorden. (In Debian moet je die nog installeren via het pakket libpam-cracklib.) Zo kan je bijvoorbeeld eisen dat wachtwoorden minstens 12 karakters lang zijn en tenminste één hoofdletter, één cijfer en één speciaal karakter bevatten. Test de nieuwe PAM-regel eerst voor één bepaalde applicaties. Ben je zeker dat de regel werkt, voeg ze dan toe aan common-password (Debian) of password-auth (RHEL).