PAM

Allikas: Kuutõrvaja

PAM

Mõne programmi kasutamine algab kasutajanime ja parooli sisestamisega. Traditsiooniliselt sisaldasid sellised programmid ise kõike vajalikku kasutaja autentimiseks. Skeemil kujutatakse, kuidas selline programm, näiteks passwd suhtleks otse andmebaasiga, milleks on tavaliselt fail /etc/passwd

      _____________                ______________
     | autentimist | ----->------ | kasutajate   |
     |  kasutav    |              |  andmebaas   |
     |   programm  | -----<------ |______________|
     |_____________|


Teine võimalus on kirjutada programm ilma, et seal sisalduks autentimist toimetav osa, kuid vajadusel pöördub ta standardse välise autentimist korraldava mehhanismi poole, milleks on PAM (ingl. k. Pluggable Authentication Modules)

                                                    ______________
                                        ___>______ | /etc/passwd  |
                                       |  ___<____ |______________|
                                       | |
     _____________              _______|_|_         ______________
    | autentimist | ----->---- | PAMi      | --->--| Kerberos     |
    |  kasutav    |            |  moodulid | ---<--|______________|
    |   programm  | -----<---- |___________|        ______________
    |_____________|                          --->--| LDAP         |
                                             ---<--|______________|


Programmi seisukohalt pole oluline, millist autentimismehhanismi kasutatakse või kas seda üldse kasutatakse. PAM lihtsalt teatab programmile, kas kasutaja autenditi või mitte.

Kui klientprogrammiga pöördutakse serveri poole, siis peab PAMi moodulitega oskama suhelda mitte autentimisega seotud klientprogramm, vaid vastav server, näiteks sshd, gdm, vsftpd. Kas see on nii, võib järele vaadata programmiga ldd

bash# ldd /usr/bin/passwd 
        libdl.so.2 => /lib/libdl.so.2 (0x40019000)
	libpam.so.0 => /lib/libpam.so.0 (0x4001d000)
	libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x40025000)
	libpwdb.so.0 => /lib/libpwdb.so.0 (0x40028000)
	libc.so.6 => /lib/libc.so.6 (0x40071000)
	/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
	libcrypt.so.1 => /lib/libcrypt.so.1 (0x40164000)
	libnsl.so.1 => /lib/libnsl.so.1 (0x40191000)

Tarkvara kompileerimisel on võimalik näidata, kas soovitakse saada PAMi toetust või mitte.

Moodulid

Erinevate autentimissüsteemide kasutamiseks on vaja kasutada vastavaid PAMi mooduleid. Näiteks selleks, et autentimist teostaks Kerberos, peab olema olemas PAMi kerberose moodul.

Lisaks on spetsiaalsed moodulid, mis võimaldavad näiteks:

  • pam_time.so - reguleerida programmi kasutamist ajaliselt
  • pam_cracklib.so - tagada, et paroolivahetamisel ei valita liiga lihtsat parooli
  • pam_console.so - määrata millisest terminalist saab programmi käivitada
  • pam_deny.so - programmi ei saa käivitada
  • pam_permit.so - programmi lubatakse käivitada alati

Tavaliselt asuvad moodulid kataloogis /lib/security.

PAMi konfigureerimine

PAMi konfigureerimine toimub vaikimisi kataloogis /etc/pam.d sisalduvate failide redigeerimisel. Tavaliselt pöördub autentimist vajav programm omanimelise teenuse konfiguratsioonifaili poole. Näiteks programmile passwd vastav PAMi konfiguratsioonifaili /etc/pam.d/passwd sisu võiks olla selline

auth       required	/lib/security/pam_pwdb.so shadow nullok
account    required	/lib/security/pam_pwdb.so
password   required	/lib/security/pam_cracklib.so retry=3
password   required	/lib/security/pam_pwdb.so use_authtok nullok md5 shadow

PAMi teenuse poole pöördumine lõppeb programmi jaoks õnnestumise või ebaõnnestumisega. Õnnestumine tähendab, et kasutaja autentimine õnnestus ja ta saab programmi kasutada.

Selgitame PAMi toimimist toodud näite varal. Konfiguratsioonifaili süntaks on selline

moodulitüüp   kontrollvõti   mooduli-fail   argumendid
  • Moodulitüüp - PAMis on 4 erinevat moodulitüüpi, iga moodulitüübi kontroll lõpeb õnnestumisega või ebaõnnestumisega. Iga teenuse puhul ei pruugi
     olla kõik moodulitüübid kasutatud. Moodulitüübid:
         * auth - autendib kasutaja ja annab talle nt tema grupist tulenevad õigused
         * account - otsustab, kas kasutajat teenindada, nt kellaaja, kust süsteemi sisenetakse või seda teenust hetkel kasutavate kasutajate arvu järgi
         * session - asjad, mis on vaja teha peale sisselogimist, nt logisse kirjutamine, kasutaja chrootimine
         * password - korraldab parooli muutmist 
  • Kontrollvõti - sama moodulitüüp võib olla kirjeldatud mitmel järjestikusel real (nt password) moodustades pinu. PAMi moodulitüübi õnnestumise
     määrab moodulitüübi pinu kogutulemus, mis on määratud kontrollvõtmetega:
         * required - moodulitüübi õnnestumiseks peavad kõik read õnnestuma. Kui pinu rida ei õnnestu, liigutakse pinus siiski edasi, pinu lõpus
           teatatakse kasutajale õnnestumisest või ebaõnnestumisest
         * requisite - moodulitüübi mitteõnnestumiseks peab selle võtmega rida õnnestuma. Kui rida ei õnnestu antakse kontroll otsekohe koos veateatega
           teenust väljakutsuvale programmile
         * sufficient - selle võtmega rea õnnestumine toob kaasa moodulitüübi õnnestumise juhul, kui varasemad required on õnnestunud; järgnevad      
           required ei loe
         * optional - suva, kasutatakse näiteks logiks 
  • Moodulifail - näitab kus asub PAMi moodulile vastav fail.
  • Argumendid - moodulit kontrollivad argumendid.

Ülaltoodud näites tuleb seatud tingimustest aru saada selliselt:

   * auth - moodulifail pam_pwdb.so viitab sellele, et kasutatakse traditsioonilist UNIXi autentimisskeemi, see tähendab /etc/passwd faili; shadow
     viitab, et tegu on varjatud paroolidega; nullok aga, et lubatud on ka tühiparool. auth teostatakse passwd progrmmi käivitamise järel, kui
     kasutajalt tema vana parooli küsitakse.
   * account - kasutatakse faili /etc/passwd sisu veendumaks, et kasutaja, kuigi sisestanud õige parooli, ikka tohib käesoleval ajal süsteemi siseneda
   * password - see teostatakse uue parooli sisestamisel; nimelt kontrollib cracklib, et uus parool liiga lihtne ei saaks, andes 3 katset; peale selle,
     uus parool talletatakse traditsioonilise skeemi kohaselt, parooli krüptitakse MD5ga ja hoitakse varjatult. See moodulitüüp moodustab pinu; kui üks
     või enam pinu rida ebaõnnestub, siis programmi ei käivitata, st kasutaja parooli ei vahetata. 

Vaikimisi PAMi teenus other

Kui te hooletult või lihtsalt teadmatusest PAMi konfigureerimisel vea teete, siis on võimalik, et te ei saa oma süsteemi ise ka enam sisse logida. Kui tõesti nii peaks juhtuma, siis bootige single user mode'i ja looge omale ainuke PAMi konfiguratsiooni fail /etc/pam.d/other

auth     required       pam_unix_auth.so
account  required       pam_unix_acct.so
password required       pam_unix_passwd.so
session  required       pam_unix_session.so

other on PAMi teenus, mida kasutatakse, kui kliendi poolt nõutavale pole vastavat konfiguratsioonifaili. Toodud fail vastab traditsioonilisele UNIXi autentimisskeemile.

Turvalisus

Kui te ei karda ise 'ukse taha jääda', siis soovitatakse teha sellise sisuga teenus other

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

See tähendab, et teenuseid, mida pole konfigureeritud, ei lubata kasutada, kuid katsed seda teha lähevad süsteemi logisse.

http://kuutorvaja.eenet.ee/wiki/Sshd_mysql autentimine mysql vastu

http://identity-focus.com/pam-modules-listing/ Huvitavaid pam mooduleid