PAM
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