PAM
previous.png
Cursus Linux       Advanced       Pluggable Audentication System   
gnu.png


up.png Plugable Authentication Modules down.png

Wanneer men op Linux iets met gebruikers verificatie te maken heeft, kan men er zeker van zijn dat PAM op de achtergrond daar een rol in speelt. PAM staat voor Pluggable Authentication Modules en is een systeem dat er voor zorgt dat er op zeer flexibele wijze gebruikers zich kunnen aanmelden en dat hun credentials kunnen worden geauthenticeerd. In dit hoofdstuk kan men lezen hoe PAM werkt.

Wat leren we in dit hoofdstuk ?

up.png 1 Inleiding down.png

Als we het hebben over gebruikers, dan hebben we het in feite over verificatie, ofwel validatie van de gegevens waarmee de gebruiker zich op het systeem of netwerk bekend maakt om gebruik te kunnen maken van de bronnen ervan. Een dag dagelijks voorbeeld is een gebruiker die inlogt op een Linux computer. Als men niets doet, wordt hierbij gebruik gemaakt van de bestanden /etc/passwd en /etc/shadow. Wanneer men echter in een netwerk omgeving tientallen of honderden Linux-werkstations moet beheren, is het onhandig wanneer men op elk van deze computers lokale gebruikers zou moeten maken. In zo een geval is het handig om de verificatie te laten afhandelen door een centraal systeem zoals bv. OpenLDAP. Bij moderne computer systemen is het zeer goed mogelijk dat de gebruikers identificatie niet afhangt van een challenge/respons methode (zoals de paswoord methode eigenlijk is) maar bv. van een vinger-afdruk lezer, een identiteits kaart lezer enzo...
Hierbij doet zich het probleem voor dat de opdracht 'login' wel moet weten dat de identificatie methode de standaard paswoord methode, of OpenLDAP, of een hardware methode is.
Een ander probleem is dat niet alleen 'login' gebruik maakt van identificatie methoden, veel (netwerk) services verlangen op hun beurt dat de gebruiker zichzelf authenticeert. Hoe gemakkelijk zou het zijn als al deze authenticatie methoden op een centrale plaats zouden kunnen beheerd worden.
Door gebruik te maken van PAM kan men zowel de authenticatie methoden instellen als de verschillende programma's of services die authenticatie nodig hebben.
Dankzij PAM wordt de validatie van gebruikers dynamisch configureerbaar gemaakt. Dit betekent dat de systeem beheerder zelf kan bepalen van welke methoden de validatie gebruik maakt. Hiervoor wordt gebruik gemaakt van verschillende configuratie bestanden die gemaakt zijn in de directory /etc/pam.d. In deze configuratie bestanden wordt een verband gelegd tussen de toepassingen (services) enerzijds en de Pluggable Authentication Modules anderzijds, die de daadwerkelijke validatie van gebruikers gegevens uitvoeren. Hieronder ziet men de inhoud van het bestand /etc/pam.d/login als voorbeeld. (Opmerking: het voorbeeld is ontleend aan Ubuntu en ontdaan van elke commentaar)

pam01.png

up.png 2 Voordelen down.png

Voorheen had elke toepassing zijn eigen database met wachtwoorden. De nadelen daarvan zijn evident:

PAM maakt het mogelijk hier iets aan te doen. Het is voldoende om elke toepassing of service voor zijn gebruikers authenticatie door te verwijzen naar de PAM modules om voor iedere toepassing dezelfde vorm van authenticatie te realiseren. Anders gezegd ieder programma wordt opgedragen de authenticatie af te handelen via de PAM modules. Welke modules dit zijn kan worden bepaald door een configuratie bestand. Dus de voordelen zijn legio:

Een aantal PAM modules worden standaard met de distributie meegeleverd, anderen worden mee-geïnstalleerd op het moment dat men een toepassing of service op het systeem installeert.
Op deze wijze wordt het mogelijk om op verschillende manieren een configuratie samen te stellen, van een configuratie waar beveiligde toegangsmethoden nagenoeg helemaal gedeactiveerd zijn tot configuraties waarbij eerst een iris-analyse dient te gebeuren gevolgd door het ingeven van het wachtwoord. De mogelijkheden zijn onbegrensd, zolang er maar een PAM module beschikbaar is. Iedere programmeur is in staat om zijn eigen PAM module te maken, het enige dat vereist is, is voldoende kennis van zaken.
De manier waarop PAM voor de systeem beheerder interesssant is, is tweeledig. Enerzijds is het mogelijk door middel van PAM alle toepassingen op dezelfde wijze verificatie te laten afhandelen. Als men het handig vindt dat alle verificate op een Windows 2000-server plaatsvindt, dan kan dat. Het voordeel hiervan is duidelijk, er is nog maar 1 locatie waarop gebruikers gegevens dienen te worden bijgehouden. Het tweede voordeel voor de systeem beheerder is dat het via configuratie mogelijk is om verhoogde verificatie eisen te implementeren. Het enige dat hiervoor nodig is, is dat de betreffende PAM modules beschikbaar zijn.

up.png 3 Werking down.png

De werking van PAM wordt valt uiteen in de volgende onderdelen:

up.png 3.1 De toepassing's interface down.png

Om in de praktijk met PAM te kunnen werken, is er een aantal zaken waarvan men als beheerder op de hoogte moet zijn. Ten eerste moet men weten of een toepassing met PAM overweg kan. Ten tweede moet de beheerder goed begrijpen wat de een bepaalde module precies doet. Zo zijn er PAM modules die werken met opties die moeten meegegeven worden in het PAM-configuratie bestand; en er zijn modules die een apart configuratie bestand vereisen.
Zoals boven vermeld is iedere toepassing in staat om met PAM te werken, zolang deze optie maar mee-geprogrammeerd is. Voor de beheerder is het interessant om te weten of een toepassing gebruik maakt van PAM modules.
Men kan dit zichtbaar maken met de opdracht ldd
Observeer de 3'de en 4'de lijn.

pam02.png

Nadat bevestigd is dat een toepassing met PAM werkt, moet de beheerder ervoor zorgen dat in /etc/pam.d een bestand wordt gemaakt waarin wordt opgegeven welke PAM modules gebruikt moeten worden. Dit bestand heeft doorgaans dezelfde naam als het programma bestand waarmee de toepassing start. Zo heet het PAM configuratie bestand voor /bin/login dan ook /etc/pam.d/login.
Of een programma daadwerkelijk goed met PAM werkt, is te testen door in het configuratie bestand te verwijzen naar de modules pam_permit.so en pam_warn.so. De eeste module zorgt ervoor dat aan iedereen toegang verleend wordt, de tweede module zorgt ervoor dat er een bericht wordt geschreven naar de syslog. Voor een fictief programma 'pamprog' komt dit bestand er dus als volgt uit te zien:

   # /etc/pam.d/pamprog
   auth required pam_permit.so
   auth required pam_warn.so

Als men nu probeert deze service te gebruiken, zou men daar in de logboek bestanden van het systeem iets van moeten terugvinden. In de meeste gevallen wordt voor dit doel gebruik gemaakt van het algemene logboek bestand /var/log/messages.

up.png 3.2 De opbouw van het PAM configuratie bestand down.png

Voor elke service wordt er in de directory /etc/pam.d een apart configuratie bestand aangemaakt. In dit bestand wordt in een aantal regels gedefinieerd wat op de service van toepassing is.
De layout van iedere regel is als volgt:

pam03.png
In bovenstaand voorbeeld : validatie=auth, criteria=required, module=pam_securetty.so.

up.png 3.2.1 Validatie van een gebruiker down.png

De aanvraag van een gebruiker om een bepaalde service te mogen gebruiken wordt door PAM in vier onderdelen verdeeld.

  1. Account
    Verificatie van de account, zoals :
    Bestaat de gebruiker, is het wachtwoord nog wel geldig en heeft de gebruiker rechten voor de betreffende service.
  2. Authentication
    Het bevestigen van de identiteit van de gebruiker. Het kan hier gaan om challenge-response methoden zoals het invoeren van een wachtwoord, maar ook andere methoden behoren tot de mogelijkheden; bijvoorbeeld het gebruik van smart cards en biometrische apparatuur, zodat men kan inloggen op basis van vingerafdruk of iets dergelijks
  3. Password
    Hierbij gaat het om de technieken die gebruikt worden om het wachtwoord te vernieuwen, wanneer bijvoorbeeld de houdbaarheid verstreken is.
  4. Session
    Zaken die moeten plaatsvinden voordat de gebruiker toegang krijgt tot de service en nadat deze de toegang tot de service heeft beëindigd. Denk aan het activeren van een auditing-mechanisme of het mounten van een home-directory.

up.png 3.2.2 Criteria down.png

Voor elke service wordt er in de directory /etc/pam.d een apart configuratie bestand aangemaakt. In dit bestand wordt in een aantal regels gedefinieerd wat op de service van toepassing is. Het gaat hier om de hierboven genoemde types, account, authentication, password, en session. Voor elk van deze vier verschillende aspecten wordt bepaald wat er moet gebeuren als de module er niet in slaagd de validatie uit te voeren.
De volgende mogelijkheden kunnen daarbij gebruikt worden:

up.png 3.2.3 PAM modules down.png

Als laatste onderdeel van een PAM configuratie regel wordt de bestands naam gegeven van de module die gebruikt moet worden, alsook de bijbehorende argumenten. Of er argumenten moeten meegegeven worden hangt af van de module in questie.
Een succesvolle PAM-toepassing staat of valt met de modules die gebruikt worden. Het overzicht dat volgt kan niet volledig zijn omdat de modules en hun eigenschappen nogal eens per distributie kunnen verschillen (immers iedere ontwikkelaar is vrij).

module commentaar
pam_access Deze module zorgt ervoor dat op basis van de instellingen die hiervoor vastgelegd zijn in /etc/security/access.conf toegang wel of niet verleend wordt. Hiertoe moeten in access.conf namen van gebruikers en/of systemen die wel of geen toegang hebben worden opgenomen. Deze module werkt alleen op systemen waar niet gekeken wordt naar een .rhosts-bestand.
pam_chroot Met deze module kan men ervoor zorgen dat een gebruiker na verificatie in een nep-root directory terecht komt. '/' is dan eigenlijk '/ergens-anders'. Het voordeel van deze werkwijze is dat men gast gebruikers die shell-toegang krijgen tot het systeem kunt beperken, zodat ze niet op locaties kunnen terecht komen waar ze niets te zoeken hebben.
pam_cracklib Deze module zorgt ervoor dat wordt nagegaan of een nieuwe wachtwoord wel veilig genoeg is. Hiervoor is het nodig dat de systeem bibliotheek en het woordenboek /usr/lib/cracklib_dict op het systeem geïnstalleerd zijn. Elk nieuw in te voeren wachtwoord wordt dan eerst vergeleken met woorden in dit woordenboek. Als het nieuwe wachtwoord door deze test heen komt, wordt gekeken of het nieuwe wachtwoord niet teveel gelijkt op het oude wachtwoord. Zorg ervoor dat de module pam_cracklib altijd aangeroepen wordt voordat pam_pwdb wordt aangeroepen.
pam_deny Deze module zorgt ervoor dat toegang ontzegd wordt, waarbij een foutmelding naar de betreffende toepassing wordt doorgegeven. Deze module kan in alle vier componenten van PAM worden aangeroepen; bij het aanroepen van de account-component wordt het onmogelijk in te loggen; indien de authentication-component wordt aangeroepen, wordt toegang tot standaard toepassingen ontzegd.; bij toepassing op de password-component is het niet langer toegestaan het wachtwoord te wijzigen en indien toegepast op de session-component wordt het een toepassing onmogelijk gemaakt een sessie te starten op een hostcomputer.
pam_ftp Om als anonymous gebruiker toegang te krijgen tot een ftp-server, kan man deze module inzetten. De module vraagt tijdens de verifcatie van een anonymous gebruiker op een ftp-server een email-adres van deze gebruiker dat als wachtwoord gebruikt kan worden. Dit gebeurt alleen als een gebruiker met de naam anonymous zich aanmeldt bij het systeem.
pam_group Deze module zorgt ervoor dat de gebruiker automatisch lid wordt van een bepaalde groep. Welke groepen hiervoor voor welke gebruikers gebruikt worden, wordt geregeld in /etc/security/group.conf. Groepen aan wie op deze manier lidmaatschap wordt toegewezen, worden toegevoegd aan de groepen waarvan de gebruiker al lid is op basis van /etc/group.
pam_issue Deze module zorgt ervoor dat het bestand /etc/issue getoond wordt voordat de loginprompt gegenereerd wordt. In /etc/issue kan een tekst worden opgenomen. Denk hierbij aan mededelingen doe men aan de gebruikers wil tonen voordat ze op de server kunnen inloggen.
pam_limits Op basis van deze module kan men, via het configuratie bestand /etc/security/limits.conf beperkingen instellen voor resources die door gebruikers of groepen gebruikt kunnen worden. Deze beperkingen gelden dan voor iedereen, met uitzondering de gebruikers waarvan het UID gelijk is aan 0. De instellingen die hiermee vastgelegd kunnen worden, zijn vergelijkbaar met de beperkingen die door middel van quota kunnen worden ingesteld.
pam_mail Door middel van deze module kan na inloggen aangegeven worden of de gebruiker nieuwe mail heeft. De module kijkt hiervoor in de email directory van de gebruiker.
pam_mkhomedir Als een gebruiker tijdens het inloggen geen homedirectory blijkt te hebben, zorgt deze module ervoor dat er automatisch een homedirectory wordt gemaakt. Deze module kan nuttig zijn als een gebruiker door middel van NIS of LDAP inlogt op verschillende systemen. Het is dan niet nodig dat de systeem beheerder op elk van deze systemen handmatig een home-directory maakt. De module kan als volgt gebruikt worden :
session required pam_mkhomedir.so skel=/etc/skel umaks=0022. Hierbij wordt verwezen naar de skeleton directory. Dit is een directory waarin algemene bestanden geplaatst kunnen worden die bij het maken van een gebruiker automatisch naar diens homedirectory worden gekopieerd.
pam_motd Deze module zorgt ervoor dat het bestand /etc/motd automatiscj wordt weergegeven nadat de gebruiker is aangemeld. De module kan als volgt worden gebruikt : login session pam_motd.so motd=/etc/motd. Let overigens op het verschil in gebruik met pam_issue, dat ervoor zorgt dat een melding gegenereerd wordt voordat de gebruiker een login prompt te zien krijgt.
pam_nologin Deze module zorgt ervoor dat het nologin-mechanisme in werking gezet wordt. Wanneer men gebruik maakt van deze module, kan men het inloggen voor alle gebruikers, met uitzondering van de gebruiker root, onmogelijk maken door een bestand met de naam nologin te maken in de directory /etc op de server. De gebruikers krijgen de inhoud van het bestand /etc/nologin te zien. Als het bestand niet bestaat doet de pam_nologin module niets. Om zinnig gebruik te maken van deze module moet men alle logins ermee beveiligen, dit betekent dat het attribuut required hieraan meegegeven moet worden.
pam_permit Dit is wellicht de onveiligste PAM-module; deze zorgt er namelijk voor dat altijd en overal toegang wordt verleend. Het is hiervoor wel nodig dat een gebruikersnaam opgegeven wordt, de meeste toepassingen willen ook nog dat dit een geldige gebruikers naam is. Sommige toepassingen nemen ook echter genoegen met een ongeldige gebruikers naam. Gebruik van deze module zet het systeem voor iedereen open, gebruik ze dan ook alleen maar voor test doeleinden. Voorbeeld : login account required pam_permit.so
pam_pwcheck Deze module zorgt ervoor dat op basis van een instellingen bestand /etc/login.defs gekeken wordt of een nieuw wachtwoord aan de gestelde minimum eisen voldoet. Daarnaast wordt het nieuwe wachtwoord vergeleken met de cracklib-bibliotheek, die dientgevolge ook geinstalleerd moet zijn.
pam_pwdb Deze module wordt gebruikt ter vervanging van de oudere pam_unix modules. Indien aangeroepen vanuit de account-component, zorgt deze module ervoor dat gecontroleerd wordt of de account en het bijbehorende wachtwoord nog geldig zijn. Om te achterhalen welk wachtwoord daar dan exact voor gebruikt moet worden, wordt gebruikt gemaakt van het instellingen bestand /etc/pwdb.conf, waarin wordt bijgehouden in welke bestanden naar een wachtwoord gekeken wordt wanneer een gebruiker zich aanmeldt. Dit bestand /etc/pwdb.conf is ook het bestand dat men moet aanpassen wanneer men ervoor zou willen zorgen dat tijdens het inloggen niet langer gekeken wordt naar de inhoud van bestand /etc/shadow. Laat overigens duidelijk zijn dat het af te raden is om dit te doen, het is alleen goed om te weten waar het geregeld wordt.
pam_rhosts_auth Deze module bepaald op welke wijze verificatie bij een andere computer moet plaatsvinden als deze binnenkomt via één van de onveilige r-opdrachten.(rlogin, rcp, rshell). De standaard methode hiervoor is dat eerst gebruik gemaakt wordt van de instellingen in /etc/hosts.equiv en vervolgens gekeken wordt in ~/.rhosts. Het exacte gedrag kan echter door middel van argumenten gewijzigd worden; zo bestaat er bijvoorbeeld de opdracht no_rhosts die ervoor zorgt dat de inhoud van het bestand ~/.rhosts niet bekeken wordt.
pam_rootok Deze module zorgt ervoor dat de gebruiker kan gebruik maken van een service zonder dat deze eerst daarvoor een wachtwoord hoeft in te geven. Het klassieke voorbeeld is dat de module gebruikt kan worden om root toegang tot services te geven via de opdracht su. Hiervoor zijn de volgende twee regels nodig
  • su auth sufficient pam_rootok.so
  • su auth required pam_unix_auth.so
pam_securetty Met behulp van deze module kan men ervoor zorgen dat op basis van de terminals (tty) die genoemd zijn in /etc/securetty bepaald wordt of de superuser (de gebruiker root) wel of geen toegang krijgt tot het systeem. Aangezien het vanuit de optiek van beveiliging absolute noodzaak is dat eerst dit bestand moet gechecked worden voordat toegang verleend wordt, moet deze module met de flag required worden aangeroepen voordat enig andere module met de flag sufficient wordt aangeroepen. Zo kan men er bijvoorbeeld voor zorgen dat de gebruiker root niet via een onveilige telnet sessie kan binnenkomen.
pam_stack Dit is een algemene module die door RedHat ontworpen is en dus in deze distributie en in Fedora gebruikt wordt. De module pam_stack geldt als de algemene module die specifieke modules aanroept die voor bepaalde services relevant zijn. Deze specifieke modules zijn ook altijd modules die voorkomen in de directory /etc/pam.d.
pam_time Deze module zorgt ervoor dat via instellingen in het configuratie bestand /etc/security/time.conf de toegang tot bepaalde services verboden kan worden. Op elke regel in time.conf staan achtereenvolgens de services, ttys, gebruikers, en tijden gespecifieerd. Zo kan man bijvoorbeeld aan de gebruiker root de toegang via speudo-terminals tot de toepassing xsh ontzeggen in het weekend en op maandag door in time.conf de regel
xsh;ttyp*;root;!WdMo0000-2400 op te nemen. De belangrijkste beperking voor deze module is dat er momenteel geen mechanisme is dat ervoor zorgt dat een sessie wordt afgebroken op het moment dat een verboden tijdstip is aangebroken; wel maakt de service het onmogelijk na het aanbreken van het tijdstip de betreffende service nog te gebruiken.
pam_unix Dit is de standaard UNIX verificatie module die ervoor zorgt dat op basis van /etc/passwd, shadow, of NIS kan ingelogd worden. Deze module is inmiddels opgevolgd door pam_unix2.
pam_warn Deze module zorgt ervoor dat waarschuwingen weggeschreven worden naar syslog. Op deze manier zorgt men ervoor dat wanneer er iets misgaat daar toch een melding van kan terugvinden in de logboek bestanden.

up.png 4 Hoe veilig moet het zijn down.png

Op een standaard Linux zal netjes voor elke afzonderlijke service die verificatie behoeft een PAM-oplossing getroffen worden. Hierdoor kunnen deze services op een veilige wijze gebruikt worden. Uiteindelijk wordt dus de toegang tot de service verleend door de PAM-configuratie bestanden. Dit betekent ook dat men geen toegang meer krijgt tot het systeem als deze bestanden (per ongeluk) verwijderd worden. Aangezien dit iedereen die met PAM dingen gaat uitproberen kan overkomen, zullen we hier eerst de procedure beschrijven die men kan toepassen wanneer men onverhoopt niets meer met de computer kan doen omdat men een fout gemaakt heeft in de PAM configuratie. We gaan er daarbij van uit dat het ergst mogelijke gebeurd is, namelijk alle PAM-configuratie bestanden zijn per ongeluk verwijderd.

  1. Start linux opnieuw op in Single-User modus. Kopieer eventueel bewaard gebleven bestanden en maak een nieuwe PAM directory.
       cd /etc
       mv pam.conf pam.conf.orig
       mv pam.d pam.d.orig
       mkdir pam.d
       cd pam.d
  2. Maak vervolgens met een ASCII editor een bestand met de naam other in /etc/pam.d. Alle PAM-toepassingen die zelf geen configuratie bestand hebben, kunnen hiervan gebruik maken. In dit bestand komen de volgende regels:
       auth required pam_unix_auth.so
       account required pam_unix_acct.so
       password required pam_unix_passwd.so
       session required pam_unix_session.so
  3. Als men geen type fouten in het bestand gemaakt heeft kan men nu weer op de normale manier inloggen. Is dit niet het geval, kijk dan in /var/log/messages of er aanwijzingen in zijn weggeschreven waaruit blijkt wat er aan de hand is.
  4. Installeer in elk geval alle PAM-packages en pwdb opnieuw. Gebruik hiervoor een opdracht als rpm -Uvh pam* pwdb*. Uiteraard kan men ook gebruik maken van het gereedschap dat door de distributie wordt aangeboden om software opnieuw te installeren. Vervolgens moeten in elk geval de laatste versies van lic, util-linux, wuftp, en NetKit opnieuw geinstalleerd worden. Dit zorgt ervoor dat ten minste de standaard PAM-configuratie bestanden terug aanwezig zijn.

up.png 5 PAM herstellen: Ubuntu 12.04 down.png

Met de volgende procedure kan men de PAM configuratie herstellen onder ubuntu 12.04.

  1. start het systeem met een live cd
  2. open een terminal
  3. zorg dat je een azerty keyboard hebt:
          setxkbmap be
  4. maak jezelf root
  5. mount het volume waar /etc op staat
          mount /dev/sda1 /mnt
  6. maak deze nieuwe mount het root file systeem:
          chroot /mnt
  7. voer de volgende opdracht uit: (dit hersteld de common bestanden)
          pam-auth-update --force
  8. schrijf een nieuw other bestand met de volgende inhoud:
          @include common-auth
          @include common-account
          @include common-password
          @include common-session

Alternatief, men kan de configuratie copiëren vanaf een andere machine:
      cd /etc/pam.d
      scp vdedauw@192.168.50.222:/etc/pam.d/* .

up.png 6 Het bestand other down.png

Het bestand 'other' is de poort waarmee men de veiligheid van de volledige PAM configuratie kan openzetten. Zoals hierboven gezien is het vrij gemakkelijk om 'other' bestand te installeren waarbij alle services open worden gezet. Hieronder volgt een voorbeeld van een 'other' bestand dat helemaal geen toegang verleend maar wel bijhoudt in de syslog als een service probeert in te loggen via het 'other' bestand. Niemand behalve de gebruiker 'root' zou toegangs rechten tot dit bestand mogen hebben.

   auth required pam_deny.so
   auth required pam_warn.so
   account required pam_deny.so
   account required pam_warn.so
   session required pam_deny.so
   session required pam_warn.so
   password required pam_deny.so
   password required pam_warn.so

up.png samenvatting down.png

In dit hoofdstuk hebben we een stukje van de sluier opgelicht die hangt rond het inloggen op een Linux systeem. We hebben kennis gemaakt met de Pluggable Authentication Modules (PAM). We hebben daarbij gezien dat door gebruik te maken van deze modules, we elke toepassing die nood heeft aan verificatie van gebruiker credentials, dezelfde en naar behoefte configureerbare verificatie methodes kunnen aanbieden. Vervolgens hebben we de interne keuken van PAM nader bekeken, en als laatste een noodprocedure besproken ingeval er iets mis zou gaan tijdens de PAM configuratie.

up.png Literatuur down.png



previous.png Gratis Hosting
Cursus Linux       Advanced       Pluggable Audentication System   
Last modified: Tue Dec 15 08:55:28 2015