Izrada autentifikacijskog modula u Linux...

48
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 1870 Izrada autentifikacijskog modula u Linux okruženju Ksenija Poljak 0036416661 Zagreb, rujan 2010.

Transcript of Izrada autentifikacijskog modula u Linux...

Page 1: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

DIPLOMSKI RAD br. 1870

Izrada autentifikacijskog modula u Linux okruženju

Ksenija Poljak

0036416661

Zagreb, rujan 2010.

Page 2: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Abstract. This document gives a short introduction to how PAM (eng. Pluggable Authentication Modules) works, how it is configured, and how to develop new modules. It gives a description of a PAM library, module grupation and configuration files. Then it explains a communication betwean PAM modules and PAM aware application. It also describes how modules can be properly chained as well as their possible returning messages. Aditionaly, it explains the basic concept of NSS (eng. Name Service Switch), its configuration and a few rules about writing a new services.

In the end, a module that alows user autentification on www.fer.hr using "Quilt" is developed. It is shown that a new module can be implemented easily using any awailable C library. It can replace any existing module in authetification proccess with correct changes of configuration file for given application. There is also a NSS module that gives basic information about the user and completes the autorization process.

Sažetak. Ovaj rad ukratko objašnjava koncept PAM (eng. Pluggable Authentication Modules) modula, kako PAM funkcionira, kako se konfigurira, te daje osnovne upute o izradi novih modula. Najprije su opisane PAM biblioteka, grupacija modula i konfiguracijske datoteke. Zatim način na koji komuniciraju moduli i aplikacija. Također objašnjava način na koji se moduli mogu ispravno ulančavati, te njihove povratne poruke. Dodatno, objašnjen je osnovni koncep NSS-a (eng. Name Service Switch), konfiguracijska datoteka i pravila za pisanje novih usluga.

Razvijen je modul koji omogućuava autentifikaciju korisnika na www.fer.hr putem autentifikacijskog mehanizma sustava "Quilt". Pokazalo se da moduli mogu na jednostavan način biti implementirani korištenjem bilo koje C biblioteke. Novi autentifikacijski modul može zamjeniti bilo koji postojeći uz ispravnu promjenu konfiguracijske datoteke za aplikaciju koja ga koristi. Kao dodatak autentifikacijskom modulu, napravljen je NSS modul koji daje osnovne podatke o korisniku i time upotpunjava proces autorizacije.

Page 3: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Sadržaj

1.Uvod...................................................................................................................1

2.Uvod u PAM.......................................................................................................2

3.Infrastrktura i osnovne karakteristike.................................................................3

3.1.PAM biblioteka............................................................................................4

3.2.Grupacija modula........................................................................................5

3.3.Konfiguracijska datoteka.............................................................................9

3.4.Komunikacija između aplikacije i modula..................................................12

3.5.Ulančavanje modula..................................................................................15

4.Višestruke lozinke i mapiranja.........................................................................16

4.1.Način rukovanja lozinkama.......................................................................16

4.2.Sigurnosna pitanja....................................................................................17

5.Pregled modula................................................................................................18

5.1.Konvencija prilikom pisanja modula..........................................................19

6.NSS biblioteka.................................................................................................20

6.1.Uvod u NSS...............................................................................................20

6.2.Konfiguracijska datoteka NSS biblioteke..................................................20

6.2.1.Format zapisa konfiguracijske datoteke.......................................................21

6.2.2.Statusni kodovi............................................................................................22

6.2.3.Akcije...........................................................................................................22

6.2.4.Kriteriji pretraživanja izvora..........................................................................23

6.2.5.Opis rada.....................................................................................................23

6.3.Pravila za pisanje NSS modula.................................................................24

6.3.1.Pravila imenovanja za NSS modul..............................................................24

6.3.2.Sučelje funkcija NSS modula.......................................................................24

7.Praktični rad.....................................................................................................28

7.1.Osnovne značajke protokola XML-RPC...................................................28

7.2.Opis ostvarenog autentifikacijskog modula..............................................29

7.2.1.Funkcija pam_sm_authenticate...................................................................29

7.2.2.Funkcija pam_parse_arguments................................................................30

7.2.3.Funkcija pam_syslog...................................................................................31

Page 4: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

7.2.4.Funkcija do_xmlrpc_client_call()..................................................................32

7.2.5.Funkcija check_if_fault_occurred...............................................................34

7.2.6.Ostale PAM_EXTERN funkcije....................................................................34

7.3.Instalacija modula.....................................................................................34

7.4.Opis ostvarene NSS biblioteke.................................................................35

7.4.1.Funkcija _nss_webauth_getpwnam_r..........................................................36

7.4.2.Funkcija nss_webauth_get_data_from_xmlrpc_server...............................36

7.4.3.Funkcija fault_occured.................................................................................37

7.4.4.Funkcija nss_webauth_result_to_struct......................................................37

7.4.5.Funkcija dir_exists......................................................................................38

7.4.6.Funkcija nss_webauth_strtol.......................................................................38

7.4.7.Funkcija nss_webauth_copy_to_buffer.......................................................38

7.4.8.Funkcija nss_syslog ...................................................................................38

7.5.Instalacija NSS biblioteke..........................................................................39

7.6.Ispitivanje modula.....................................................................................39

8.Zaključak..........................................................................................................41

9.Literatura..........................................................................................................42

Page 5: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM
Page 6: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

1. Uvod

Od same pojave računala, autentifikacija predstavlja kritičnu komponentu svakog sigurnosnog sustava. Autentifikacija je proces identifikacije osobe ili nekog sustava, te validiranje njihovih vjerodajnica. Slijedi proces autorizacije kojim se utvrđuje ima li korisnik pravo pristupa određenom resursu kojem želi pristupiti.

U sustavima nalik Unix-u uobičajeno je da se autentifikacija (i autorizacija) zasnivaju na podacima iz /etc/passwd i /etc/shadow datoteka. Međutim ta metoda nije dovoljno fleksibilna za mrežnu okolinu. U tu svrhu razvijeni su PAM i NSS moduli.

Linux PAM je paket biblioteka koji omogućuje administratoru sustava odabir načina kako će aplikacije autentificirati korisnike. PAM sučelje pruža mogućnost dodavanja novih autentifikacijskih metoda jednostavnom instalacijom novih modula, te promjenu autentifikacijske politike promjenom konfiguracijske datoteke. Svrha cijelog projekta je odvajanje razvoja programa za pridjeljivanje prava od razvoja različitih autentifikacijskih shema. PAM je razvijen u svrhu autentifikacije i to ostaje njegova primarna funkcija. Međutim, njegove mogućnosti su proširene te danas može obaviti niz različitih sigurnosnih zadataka.

NSS arhitektura dozvoljava korištenje različitih mehanizama za dobavljanja podataka o korisnicima i grupama. Omogućava administratoru da specificira gdje će se i na koji način ti podaci tražiti. Mogu biti spremljeni u običnim tekstualnim datotekama, tablicama ili bazama.

U ovom radu opisane su osnovne značajke PAM paketa i NSS biblioteke, te izrada novog autentifikacijskog modula. Poglavlje 3 daje detaljan pregled PAM infrastrukture, datotečnog sustava i opisuje sučelje PAM biblioteke. Opisuje četiri grupacije modula i strukturu konfiguracijske datoteke, ulančavanje modula u ovisnosti o vrijednosti zastavica te način komunikacije između aplikacije i modula tijekom procesa autentifikacije. Poglavlje 4 opisuje način rukovanja lozinkama te ističe neka sigurnosna pitanja. Poglavlje 5 daje pregled najčešćih gotovih modula koji dolaze u paketu s postojećim PAM implementacijama.

Poglavlje 6 predstavlja kratki uvod u NSS. Objašnjava zapise konfiguracijske datoteke, moguće statuse i akcije. Daje pregled osnovnih pravila za pisanje NSS modula te prototipove funkcija.

Poglavlje 7 objašnjava izradu autentifikacijskog modula, pri čemu je dan detaljan opis funkcija koje on koristi. Modul autentificira korisnike putem FERweb-a i za to koristi XML-RPC protokol. Na početku ovog poglavlja opisan je protokol. Klijentske funkcije XML-RPC protokola koje modul koristi objašnjene su u sklopu funkcije koja ih poziva. Također je objašnjena osnovna funkcionalnost ostvarenog NSS-a, koji vraća informacije o korisniku pomoću passwd strukture i po potrebi stvara njegov /home direktorij.

1

Page 7: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

2. Uvod u PAM

Nekad je bilo uobičajeno da je proces autentifikacije korisnika sastavni dio aplikacije. Bilo kakvi sigurnosni propusti ili poboljšanje korištenog sigurnosnog mehanizma, zahtjevali su novu inačicu aplikacije, a time i dodatna novčana ulaganja. Stoga, sve više pažnje posvećuje se tome da resursi budu na odgovarajući način zaštićeni, a da istovremeno aplikacije budu jednostavne za korištenje i održavanje, te lako nadogradive.

Budući da većina usluga za prijavu u sustav (login, rlogin, ftp, rsh) traži neovisnost o načinu autentifikacije određene za konkretno računalo, javila se potreba za infrastrukturom koja omogućuje enkapsulaciju različitih mehanizama. Htjelo se postići da se zaštita sustava konfigurira prema svakom okruženju te da administrator bude u mogućnosti instalirati odgovarajuće autentifikacijske module bez potrebe promjene aplikacija.

Jedno od rješenja problema autentifikacije predstavlja PAM infrastruktura (eng. Pluggable Authentication Modules) koju su prvi puta predstavili Sun Microsystems razvojni programeri Vipin Samar i Charlie Lai 1995. godine. Već iduće godine postao je dio operacijskog sustava Solaris 2.6. 1997. godine započeo je Linux PAM projekt. Danas je implementiran u većini sustava kao što su Solaris, GNU/Linux, FreeBSD, NetBSD, HP UX, Mac OSX, AIX 5L.

PAM je složeni autentifikacijski sustav koji omogućuje razvoj programa neovisnih o autentifikacijskoj shemi. Modularan je i fleksibilan. Omogućuje promjenu metoda autentifikacije kao i enkapsulaciju svih lokalnih autentifikacijskih metoda bez ponovnog prevođenja ijednog programa, odabir željenog mehanizma autentifikacije za svaku aplikaciju, pri čemu dozvoljava korištenje više autentifikacijskih protokola za istu. Smanjuje složenost autentifikacije jer omogućuje korištenje iste baze korisnika za svaki proces prijave. Današnje PAM implementacije zasnivaju se na normi XSSO, zbog čega poznavanje modula u jednom sustavu omogućava jednostavan rad u svim ostalim operacijskim sustavima u kojima je ostvaren.

2

Page 8: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

3. Infrastrktura i osnovne karakteristike

Svrha Linux-PAM projekta je odvajanje razvoja programske podrške za pridjeljivanje prava (eng. privilege granting software) i razvoja sigurnosnih autentifikacijskih shema. To je ostvareno bibliotekom funkcija koje aplikacija koristi pri zahtjevu za autentifikacijom korisnika. Naziv biblioteke je obično libpam-X.so.0, gdje X predstavlja verziju, a smještena je u /lib direktoriju. Ta biblioteka je lokalno konfigurirana sustavskom datotekom ili više datoteka u /etc direktoriju. Moduli su dijeljeni objekti (*.so datoteke) smješteni u /lib/security ili /lib64/security direktoriju ovisno o distribuciji. Odgovarajuća zaglavna datoteka pam_modules.h smještena je u /usr/include/security. Raspored datotečnog sustava prikazan je na slici 3.1.

Infrastrukturu čine PAM biblioteka, moduli, konfiguracijska datoteka i PAM svjesna aplikacija. Aplikacije koriste PAM biblioteku za pristup odgovarajućem modulu. Koji moduli se koriste za pojedinu aplikaciju definirano je u pam.conf datoteci. Odgovor modula aplikaciji također se prenosi preko biblioteke. Slika 3.2. prikazuje povezanost pojedinih dijelova infrastrukture i način njihova međudjelovanja.

3

Slika 3.1: Stablo direktorija gdje su raspoređene datoteke PAM infrastrukture

Page 9: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

PAM API je gotovo jednak u svim operacijskim sustavima. Postoje malene razlike prvenstveno u funkciji za komunikaciju. Linux-PAM koristi komunikacijsku funkciju iz biblioteke. Prilikom ostvarenja modula za druge sustave komunikacijsku funkciju, ukoliko se ona koristi, treba razviti programer modula.

3.1. PAM biblioteka

PAM biblioteka, /user/lib/libpam povezuje sve komponente PAM infrastrukture u kompaktnu cjelinu. Sadrži API koji služi kao standardno sučelje za sve PAM aplikacije, omogućuje komunikaciju aplikacije i modula, čita konfiguracijsku datoteku, kontrolira učitavanje odgovarajućih modula i upravlja redoslijedom njihova izvođenja, koristeći pritom ulančavanje modula.

Sučelje biblioteke sastoji se od šest kategorija API funkcija:

(1) Funkcije za početak i kraj PAM transakcije:

int pam_start(const char *service,

const char *user,

const struct pam_conv *pam_conv,

pam_handle_t **pamh);

int pam_end(pam_handle_t *pamh, int status);

Funkcije za dobavljanje i postavljanje specifičnih podataka modula:

int pam_get_data(const pam_handle_t *pamh,

const char *module_data_name,

const void **data);

4

Slika 3.2: Način rada

Page 10: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

int pam_set_data(pam_handle_t *pamh,

const char *module_data_name,

void *data,

void (*cleanup)(pam_handle_t *pamh,

void *data, int pam_end_status));

Funkcije za dobavljanje i postavljanje specifičnih informacija:

int pam_get_item (const pam_handle_t *pamh,

int item_type,

const void **item);

int pam_set_item (pam_handle_t *pamh,

int item_type,

const void *item);

Funkcija koja vraća status greške u obliku string vrijednosti:

const char *pam_strerror(const pam_handle_t *pamh,

int error_number);

(2) Funkcije za autentifikaciju individualnog korisnika i postavljanje vjerodajnica:

int pam_authenticate(pam_handle_t *pamh, int flags);

int pam_setcred(pam_handle_t *pamh, int flags);

(3) Funkcija za upravljanje računom:

int pam_acct_mgmt(pam_handle_t *pamh, int flags);

(4) Funkcije za upravljanje sjednicom:

int pam_open_session(pam_handle_t *pamh, int flags);

int pam_close_session(pam_handle_t *pamh, int flags);

(5) Funkcija za provjeru valjanosti lozinke:

int pam_chauthtok(pam_handle_t *pamh, int flags);

(6) Funkcije za postavljanje i provjeru vrijednosti PAM varijabli okoline:

int pam_putenv(pam_handle_t *pamh, const char *name_value);

const char *pam_getenv(pam_handle_t *pamh,

const char *name);

char **pam_getenvlist(pam_handle_t *pamh);

3.2. Grupacija modula

Svaka PAM implementacija sastoji se od skupa modula. Svaki modul pruža implementaciju specifičnog mehanizma. Moduli pružaju funkcionalnost na razini usluge

5

Page 11: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

(eng. service layer functionality). To je skup objekata koji se dinamički pokreću nakon programskog poziva. Kao odgovor na poziv pam_*() funkcije, poziva se odgovarajuća pam_sm_*() funkcija od modula navedenog u pam.conf datoteci. pam_sm_*() funkcije zahtjevaju dodatne parametre za prijenos opcija specifičnih za pojedinu uslugu. Prema funkcionalnosti, module možemo podijeliti u četiri grupe:

(1) Autentifikacijski moduli (auth) sadrže primitive:

pam_sm_authenticate() - autentificira korisnika, ugalvnom zahtjevajući ime i lozinku koje uspoređuje sa podacima pohranjenim u bazi ili dobivenih od autentifikacijske usluge.

int pam_sm_authenticate(pam_handle_t *pamh, int flags,

int argc, const char **argv);

pam_sm_setcred() - uspostavlja dozvolu za korisnički račun, poput ID korisnika, pripadnost grupi i ograničenja za resurse.

int pam_sm_setcred(pam_handle_t *pamh, int flags,

int argc, const char **argv);

(2) Moduli za upravljanje korisničkim računima (account) određuju dostupnost računa i ograničenja na resurse. Tipično se koristi da se dozvoli ili zabrani pristup s obzirom na doba dana, trenutno dostupnim sustavskim resursima (npr. maksimalni broj korisnika) ili lokaciji korisnika (npr. root prijava samo preko konzole). Sadrže primitiv:

pam_sm_acct_mgmt() - potvrđuje dostupnost traženog korisničkog računa.

int pam_sm_acct_mgmt(pam_handle_t *pamh,int flags,

int argc, const char **argv);

(3) Sjednički moduli (session) sadrže primitive:

pam_sm_open_session() - obavlja zadaće potrebne za otvaranje sjednice: dodaje zapis u utmp i wtmp bazu, pokreće SSH agenta, itd. /var/run/utmp i /var/log/wtmp su datoteke koje vode evidenciju o svim prijavama u sustav i odjavama iz sustava.

int pam_sm_open_session(pam_handle_t *pamh, int flags,

int argc, const char **argv);

pam_sm_close_session() - obavlja zadaće potrebne za zatvaranje sjednice.

int pam_sm_close_session(pam_handle_t *pamh, int flags,

int argc, const char **argv);

(4) Moduli za upravljanje lozinkama (password) omogućuju stvaranje ili promjenu lozinke korištenjem funkcije:

pam_sm_chauthtok() - mijenja autentifikacijsku oznaku, provjerava je li već bila korištena i je li dovoljno složena.

int pam_sm_chauthtok(pam_handle_t *pamh, int flags,

6

Page 12: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

int argc, const char **argv);

Argument pamh stvoren je pomoću pam_start funkcije i sadrži sve podatke vezane uz trenutnu sjednicu. Moguće vrijednosti argumenta flags razlikuju se u ovisnosti o grupi. Ovdje su navedene sve moguće vrijednosti zastavica:

Tablica 3.1: Vrijednosti zastavice

Ime Značenje

Zastavica zajednička za sve grupe.

PAM_SILENT Ne vraća nikakvu vrijednost.

Zastavica karakteristična za pam_sm_authenticate i pam_sm_acct_mgmt

PAM_DISALLOW_

NULL_AUTHTOK

Vrati PAM_AUTH_ERR ukoliko je u bazi za taj autentifikacijski mehanizam unesena NULL vrijednost.

Zastavice karakteristične za pam_sm_setcred

PAM_DELETE_CRED Obriši korisničke informacije.

PAM_REINITIALIZE_CRED

Reinicijaliziraj informacije o korisniku.

PAM_REFRESH_

CRED

Produži vrijednost informacijama o korisniku

Zastavice karakteristične za pam_sm_chauthtok

PAM_CHANGE_

EXPIRED_AUTHTOK

Korisnička autentifikacijska oznaka (lozinka) smije biti promijenjena samo ukoliko joj je istekao rok valjanosti.

PAM_PRELIM_

CHECK

Ispituje je li modul spreman za promjenu korisničke autentifikacijske oznake. Ako modul traži pristup drugom sustavu preko mreže, provjerava mogućnost spajanja na taj sustav. Ako modul ne može ustanoviti spremnost za promjenu oznake, treba vratiti PAM_TRY_AGAIN vrijednost koja se vraća aplikaciji.

PAM_UPDATE

_AUTHTOK

Potrebno je ažurirati autentifikacijsku oznaku. Ako je izvršena OR operacija te vrijednosti sa PAM_CHANGE_EXPIRED_AUTHTOK, oznaka se mijenja samo ako je istekla.

Argumenti argc i argv su preuzeti od linije čije ime usluge u konfiguracijskoj datoteci odgovara onome u aplikaciji. Prenose argumente karakteristične za dotični modul.

7

Page 13: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Modul može podržavati jednu ili više grupa. Svaka od grupa implementirana je jednom ili više odgovarajućih funkcija. Ispravni modul definira sve funkcije iz barem jedne grupe. S obzirom na nezavisnost grupa usluga, trebao bi biti moguć bilo koji redoslijed njihova pozivanja.

Za ispravnu inicijalizaciju implementirane grupe, prije uključivanja <security/pam_modules.h> datoteke potrebno je definrati tu grupu sa #define PAM_SM_IME GRUPE .

Kako bi se izbjegli administratorski problemi ili problemi vezani uz lošu konfiguracijsku datoteku, preporuča se definiranje svih grupa. Za funkcije koje se zapravo neće pozivati, modul bi trebao vratiti PAM_SERVICE_ERR i upisati odgovarajuću poruku u sustavski dnevnik. Druga opcija je da takve funkcije vrate PAM_IGNORE.

S obzirom na ulančavanje modula, važno je da svaki modul u lancu daje povratnu vrijednost. U protivnom, ne može se donijeti odluka hoće li korisniku biti dozvoljen pristup ili ne. Slijedi tablica mogućih povratnih vrijednosti.

Tablica 3.2: Povratne vrijednosti modula

Povratna vrijednost Grupacija modula Značenje

PAM_SUCCESS sve četiri grupe Uspjeh.

PAM_AUTH_ERR autentifikacijska, upravljanje računom

Neuspjeh autentifikacije.

PAM_CRED_

INSUFFICIENT

autentifikacijska Nedovoljne informacije za autentifikaciju korisnika.

PAM_AUTHINFO_

UNAVAIL

autentifikacijska Moduli ne mogu doći do autentifikacijskih informacija.

PAM_USER_UNKNOWN autentifikacijska, upravljanje računom, upravljanje lozinkom

Nepoznato korisničko ime.

PAM_MAXTRIES autentifikacijska Maksimalan broj neuspješnih pokušaja autentifikacija.

PAM_CRED_UNAVAIL autentifikacijska Modul ne može doći do autentifikacijskih informacija.

PAM_CRED_EXPIRED autentifikacijska Informacije o korisniku su zastarjele.

PAM_CRED_ERR autentifikacijska Modul ne može postaviti vrijednosti o korisniku.

PAM_ACCT_EXPIRED upravljanje računom Korisnički račun više ne vrijedi.

8

Page 14: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

PAM_NEW_AUTHTOK_REQD

upravljanje računom Zastarjela korisnička autentifikacijska oznaka.

PAM_PERM_DENIED upravljanje računom,

upravljanje lozinkom

Zabranjen pristup.

PAM_SESSION_ERR upravljanje sjednicom

Ne mogu se dodati odnosno ukloniti vrijednosti vezane za dotičnu sjednicu.

PAM_AUTHTOK_ERR upravljanje lozinkom Modul nije uspio dohvatiti novu autentifikacijsku oznaku.

PAM_AUTHTOK_RECOVERY_ERR

upravljanje lozinkom Modul ne može dohvatiti staru autentifikacijsku oznaku.

PAM_AUTHTOK_LOCK_BUSY

upravljanje lozinkom Autentifikacijska oznaka trenutno zatvorena za promjene.

PAM_AUTHTOK_

DISABLE_AGING

upravljanje lozinkom Onemogućeno zastarijevanje autentifikacijske oznake.

PAM_TRY_AGAIN upravljanje lozinkom Provjera završila neuspješno.

3.3. Konfiguracijska datoteka

Konfiguracijska datoteka određuje politiku provođenja autentifikacije. Ona određuje koje module će koristiti koja aplikacija. Ostvaruje jedan od osnovnih koncepata PAM-a: mogućnost da administrator promjeni sigurnosnu politiku sustava jednostavnom promjenom tekstualne datoteke.

Postoje dva načina konfiguracije. Prvi način je pomoću centralne konfiguracijske datoteke /etc/pam.conf. Datoteka se sastoji od liste pravila smještenih u zasebnu liniju. Format zapisa /etc/pam.conf datoteke:

service_name module_typecontrol_flag module_path[module_arguments]

Drugi način konfiguracije je pomoću više manjih datoteka nazvanih prema aplikaciji, odnosno usluzi koju obavljaju smještenih u /etc/pam.d/ direktoriju. Format /etc/pam.d/* datoteke:

module_type control_flag module_path [module_arguments]

Značenje pojedinih polja ekvivalentno je onima u /etc/pam.conf datoteci, pri čemu je izostavljeno ime usluge, jer je ono zadano imenom same datoteke. Prednost se daje ovom načinu, jer je jednostavnije odjednom raditi sa samo jednim servisom, te također zbog veće preglednosti.

9

Page 15: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Značenja polja konfiguracijske datoteke:

service_name:

Najčešće je jednako imenu odgovarajuće aplikacija, npr. login, rlogin, password, su. Ime other je predviđeno za postavljanje podrazumijevanih pravila, tj. određuje modul kojeg će koristiti sve ostale aplikacije koje nisu izravno navedene. Također se upotrebljava ukoliko sve usluge istog tipa imaju iste zahtjeve.

module_type:

Označava tip modula tj. pripadnost jednoj od četiri grupe. Mogući su: auth, account, session, password tipovi, objašnjeni u poglavlju 3.2.

control_flag:

Određuje kakav će biti konačni rezultat, uspjeh ili neuspjeh. Postoje dvije različite sintakse za ovo polje. U prvoj se koristi samo ključna riječ. Moguće vrijednosti kontrolne zastavice u tom slučaju su:

• required:

Ako modul uspije, izvršava se ostatak lanca i pristup je dozvoljen ukoliko ni jedan drugi modul nije neuspješno završio. Ako ne uspije, PAM API vraća neuspjeh, ali tek nakon što se svi ostali moduli izvrše.

• requsite:

Ako modul uspije, ostali moduli iz lanca se izvrše i pristup je dozvoljen ako svi uspiju. Ako modul ne uspije, lanac se odmah prekida i pristup je zabranjen.

• sufficient:

Ako modul i svi njegovi prethodnici uspiju, lanac se prekida i zahtjev se prihvaća. Ako modul ne uspije, ignorira se, a ostatak lanca se izvršava.

• optional:

Modul se izvrši, ali se njegov rezultat zanemaruje. Ako su svi moduli u lancu opcionalni, svi će zahtjevi uvijek biti odobreni.

• include:

Uključi sve linije danog tipa iz konfiguracijske datoteke specificirane kao argument za ovu kontrolu.

• substack:

Uključi sve linije danog tipa iz konfiguracijske datoteke specificirane kao argument za ovu kontrolu. Ovo se razlikuje od include u tome što evaluacija done i die akcija u podstogu ne uzrokuje preskakanje ostatka stoga. Skokovi u podstogu također ne mogu napraviti skok izvan njega, a cijeli podstog se broji kao jedan modul kada je izvršen skok u

10

Page 16: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

roditeljskom stogu. Akcija reset vraća stanje stoga modula u stanje u kojem je bio od početka evaluacije podstoga.

• binding:

Ako modul uspješno završi i svi prethodni moduli uspiju, lanac se odmah prekida i zahtjev je odobren. Ako modul ne uspije, ostatak lanca se izvrši, ali je zahtjev konačno odbaćen. Ova zastavica je podržana samo u Sun Solaris i OpenPAM.

Druga sintaksa koristi parove vrijednost = akcija. Vrijednost predstavlja vrijednost vraenu od funkcije koju poziva dotični modul. Potpuna lista mogućih vrijednosti nalazi se u datoteci /usr/include/security/_pam_types.h. Za primjer navodimo samo neke: success, open_err, user_unknown, no_module_data, module_unknown, itd.

Akcija može biti unsigned integer n, koji predstavlja akciju skoka preko sljedećih n modula, ili jedna od liste akcija:

• ignore:

Povratni status modula neće utjecati na vrijednost koja se vraća aplikaciji.

• bad:

Ova akcija ukazuje da se povratni kod treba uzeti kao pokazatelj da modul nije uspješno završio. Ako je taj modul prvi u lancu, njegov status će se koristiti za cijeli lanac.

• die:

Ekvivalentno s bad, uz trenutno prekidanje izvršavanja modula u lancu i povratak aplikaciji.

• ok:

Ova povratna vrijednost izravno utječe na povratnu vrijednost cijelog lanca. Ako prethodno stanje vodi do povratka PAM_SUCCESS vrijednosti, povratna vrijednost ovog modula će nadjačati tu vrijednost. Ako prethodno stanje ima vrijednost koja implicira na neuspjeh modula, ok vrijednost ju neće nadjačati.

• done:

Ekvivalentno s ok, uz trenutno prekidanje izvršavanja modula u lancu i povratka aplikaciji.

• reset:

Očisti svu memoriju modula i počni iznova s novim modulom u lancu.

Ekvivalentni izrazi za prve četiri ključne riječi glase:

11

Page 17: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

required [success=ok new_authtok_reqd=ok ignore=ignore default=bad]

requisite

[success=ok new_authtok_reqd=ok ignore=ignore default=die]

sufficient

[success=done new_authtok_reqd=done default=ignore]

optional

[success=ok new_authtok_reqd=ok default=ignore]

module_path:

Definira lokaciju modula. Ako nije zadan, podrazumijeva se /usr/lib/security ili /usr/lib64/security ovisno o arhitekturi.

module_arguments:

Definira opcije koje se prenose modulu, a koje određuju ponašanje. Parsiranje i interpretaciju vrši sam modul.

Ako neko od polja poprimi nedozvoljenu vrijednost, ako nisu definirani svi parametri ili modul nije pronađen, dotična linija konfiguracijske datoteke se zanemaruje i bilježi se pogreška syslog(3). Ako nisu zadane ulazne vrijednosti za tip modula, pogreška se dojavljuje aplikaciji.

3.4. Komunikacija između aplikacije i modula

PAM biblioteka dozvoljava izravnu komunikaciju aplikacije s modulom. U tu svrhu koristi se komunikacijska funkcija. Linux PAM sadrži gotovu komunikacijsku funkciju definiranu u pam_misc.h datoteci, dok ostale distribucije zahtjevaju da istu razvije programer aplikacije.

Za aplikacije koje pokreću PAM module kaže se da su PAM svjesne. Provjeru je li aplikacija PAM svjesna moguće je obaviti ldd naredbom koja ispisuje sve biblioteke koje koristi aplikacija. Ukoliko se u popisu datoteka nalaze libpam ili libpam_misc, aplikacija podržava primjenu modula.

Kako bi aplikacija mogla pozivati PAM funkcije, potrebno je uključiti zaglavlja:

#include <security/pam_appl.h>

#inclide <security/pam_misc.h>

Datoteka pam_appl.h sadrži sučelje za pisanje aplikacije. To je uobičajena zaglavna datoteka libpam biblioteke. Sadrži definicije funkcija spomenutih u poglavlju 3.1.

Druga zaglavna datoteka, pam_misc.h karakteristična je za Gnu/Linux sustave, te ne dolazi kao dio uobičajene libpam biblioteke. Sadrži dodatne funkcije koje olakšavaju pisanje PAM svjesne aplikacije, među kojima je i komunikacijska funkcija.

extern int misc_conv(int num_msg,

12

Page 18: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

const struct pam_message **msgm,

struct pam_response **response,

void *appdata_ptr);

Aplikacija inicijalizira pam_conv sturkturu koja sadrži pokazivač na spomenutu funkciju.

struct pam_message{

int msg_style;

const char *msg;

}; struct pam_response {

char *resp;

int resp_retcode;

};

struct pam_conv {

int (*conv)(int num_msg,

const struct pam_message **msg,

struct pam_response **resp,

void *appdata_ptr);

void *appdata_ptr;

};

Vrijednosti definirane pam_conv strukturom prenose se pam_start() funkciji na početku transakcije. Komunikacija između modula i aplikacije je dvosmjerna i sinkrona. Aplikacija prikuplja potrebne podatke i šalje ih modulu. Mora odgovarati na sve upite od modula. Poruke između modula i aplikacije prenose se pomoću pam_msg strukture. Povratna informacija dana je pomoću pam_response strukture.

Prije pozivanja bilo koje PAM funkcije potrebno je uspostaviti sjednicu. Svaka sjednica započinje stvaranjem i inicijalizacijom strukture podataka. Struktura koja sadrži sve važne podatke o sjednici je pam_handle_t struktura.

Aplikacija koja koristi PAM sučelje mora imati dovoljno ovlasti za obavljanje svih operacija vezanih uz uslugu na koju se odnosi. Slika 3.3. prikazuje kako tipična aplikacija koristi PAM za autentifikaciju.

Slijedi opis uobičajene PAM transakcije:

(1) Ukoliko je potrebno, poslužitelj pribavlja vjerodajnicu arbitra postupkom koji je neovisan o PAM (najčešće kao root korisnik).

(2) Poslužitelj poziva pam_start(3) funkciju kojom inicijalizira biblioteku, definira ime usluge i korisnički račun za koji se zahtijeva autentifikacija, te registrira odgovarajuću autentifikacijsku funkciju.

13

Page 19: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

(3) Poslužitelj dobiva podatke vezane za transakciju i predaje ih PAM infrastrukturi pomoću pam_set_item(3).

(4) Poslužitelj poziva pam_authenticate(3) za autentifikaciju aplikacije.

(5) Poslužitelj poziva pam_acct_mgmt(3) funkciju da potvrdi dostupnost i valjanost korisničkog računa. Ako je lozinka ispravna, ali zastarjela, funkcija vraća PAM_NEW_AUTHTOK_REQD umjesto PAM_SUCCESS.

(6) Ako je u prethodnom koraku vraćeno PAM_NEW_AUTHTOK_REQD, poslužitelj poziva pam_chauthok(3) funkciju kojom prisiljava klijenta da promjeni autentifikacijsku oznaku za traženi račun.

(7) Nakon uspješne autentifikacije poziva se pam_setcred(3) funkcija koja izradi potvrdu za zahtijevani račun.

(8) Poslužitelj otvara sjednicu pozivom funkcije pam_open_session(3).

(9) Poslužitelj obavlja zahtjeve dobivene od klijenta.

(10) Kada poslužitelj završi s posluživanjem klijenta, zatvara sjednicu pozivom pam_close_session(3) funkcije.

(11) Poslužitelj poziva pam_end(3) da obavjesti PAM biblioteku o završetku. Oslobađaju se zauzeti resursi.

Ako u jednom od koraka dođe do pogreške, poslužitelj dojavljuje odgovarajuću poruku klijentu i prekida transakciju.

14

Slika 3.3: PAM autentifikacija

Page 20: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

3.5. Ulančavanje modula

Kako bi podržao višestruke mehanizme atuentifikacije, PAM infrastruktura je proširena tako da podržava slaganje usluga u stogovnu strukturu tzv. ulančavanje modula (stacking). Svaki put kada je pozvan API, moduli su učitani u slijednu listu, a rezultat vraćen pozivatelju.

Politika ulančavanja sastoji se od četiri lanca, po jedan za svaku grupaciju modula. Lanac predstavlja slijed modula. Svaki određuje koji će moduli biti pozvani i kojim redoslijedom, parametre koji se prenose modulu (opcionalno) i kontrolnu zastavicu koja opisuje kako interpretirati povratnu vrijednost modula. Moguće vrijednosti kontrolne zastavice opisane su u poglavlju 4.3.

Kada aplikacija pozove pam_start(3) funkciju, biblioteka generira četiri lanca. Kada se pozove jedna od šest funkcija primitiva, pokreće se odgovarajući lanac, te se izvršavaju svi moduli onim redoslijedom kojim su navedeni sve dok se ne dođe do kraja lanca ili dok se ne odredi da se lanac može ranije prekinuti, bilo zbog uspjeha binding ili sufficient modula, ili zbog neuspjeha requisite modula. Zahtjev je odobren ako i samo ako je barem jedan modul pokrenut i svi neopcionalni moduli uspješno završe.

Redoslijed modula i kontrolnih zastavica je jako bitan. Ukoliko redoslijed nije ispravan, može se dogoditi da je dozvoljen pristup resursima iako nisu izvršene sve potrebne provjere da bi se on omogućio. Redoslijed je također bitan iz jednostavnog razloga što je rezultat jednog modula potreban za ispravan rad drugoga.

Ako je na kraju lanca fail = true ili dođe do prekida, vraća se šifra greške prvog modula koji nije uspio. U protivnom se vraća PAM_SUCCESS. Prva iznimka tog pravila je da se PAM_NEW_AUTHTOK_REQD tretira kao uspjeh. Ta poruka je rezultat lanca ukoliko ni jedan modul ne završi s pogreškom i barem jedan modul vrati PAM_NEW_AUTHTOK_REQD. Sljedeća iznimka je kada pam_setcred(3) tretira binding i sufficient module kao required. Treća iznimka je kada pam_chauthtok(3) pokrene cijeli lanac dva puta, jednom radi pripremne provjere, a drugi put radi stvarnog postavljanja lozinke. Tada u prvom prolazu tretira binding i sufficient module kao required.

Isti modul se u istom lancu može pojaviti nekoliko puta s različitim parametrima. Višestruko pojavljivanje istog modula sa različitim parametrima tretira se kao zasebno pojavljivanje novog modula.

PAM API razvijen je tako da ne vraća nikakve podatke aplikaciji, osim statusa. U protivnom, bilo bi teško odlučiti koji će modul vratiti podatke aplikaciji. U slučaju pogreške, aplikacija ne zna koji modul je neuspješan. Ovo ponašanje omogućuje (zahtijeva) da aplikacije budu u potpunosti neovisne o modulima. Moduli moraju biti dizajnirani tako da se mogu pojaviti bilo gdje u lancu bez popratnih nuspojava.

15

Page 21: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

4. Višestruke lozinke i mapiranja

Korištenje višestrukih autentifikacijskih mehanizama može zahtjevati veći broj lozinki za pojedinog korisnika. Rješenje tog problema je mogućnost korištenja iste lozinke za sve mehanizme, tzv. mapiranje lozinki (password mapping). To može narušiti sigurnost sustava. Ukoliko je probijen jedan od autentifikacijskih mehanizama, moguće je proći sve ostale. Drugi nedostatak ovog rješenja je postojanje razlika u zahtjevima nad lozinkom (npr. duljina lozinke, dozvoljeni znakovi).

Mapiranje dozvoljava različite lozinke za različite mehanizme. Ideja je da se koristi primarna lozinka za enkripciju sekundarnih lozinki korisnika. Kada je primarna lozinka verificirana, odgovarajući modul pomoću nje dekriptira potrebnu lozinku (mapiranu) i predaje ju autentifikacijskoj usluzi.

Ukoliko dođe do pogreške u mapiranju ili ono ne postoji, svaki autentifikacijski modul treba zatražiti lozinku od korisnika. Način kriptiranja i spremanja lozinke u potpunosti ovisi o implementaciji modula.

4.1. Način rukovanja lozinkama

Definirana su četiri načina rukovanja lozinkama:

(1) use_first_pass:

Koristi istu lozinku kao i prvi modul koji ju je izravno tražio. Ako autentifikacija

tom lozinkom ne uspije za neki od modula, on ne traži novu lozinku. Obično se

koristi kada administrator želi nametnuti istu lozinku većem broju različitih

modula.

(2) try_first_pass:

Koristi se prva lozinka za sve module. Ako prva lozinka nije valjana za sve

module, traži se nova lozinka od korisnika.

(3) use_mapped_pass:

Koristi se jedna primarna lozinka (najjača) kojom se kriptiraju sve ostale lozinke. Ukoliko je primarna lozinka valjana, moduli pomoću nje po potrebi dekriptiraju sve ostale lozinke. Ako pojedini modul ne može autentificirati korisnika tako dobivenom lozinkom, ne traži novu lozinku od korisnika. Način spremanja lozinke i njeno dobavljanje ovisi u potpunosti o dotičnom modulu.

(4) try_mapped_pass:

Kao use_mapped_pass, s tom razlikom da se od korisnika traži nova lozinka ukoliko se ne može autentificirati primarnom.

16

Page 22: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

4.2. Sigurnosna pitanja

Dijeljenje lozinke kod višestrukih autentifikacijskih mehanizama:

Ako postoji više autentifikacijskih modula, moguće je za sve koristiti istu lozinku. Ukoliko se kompromitira lozika jednog modula, kompromitirani su svi. Razmatra se izbjegavanje višestrukog korištenja jedne iste lozinke po cijenu jednostavnosti korištenja.

Mapiranje lozinke:

Ova metoda pretpostavlja da je primarna lozinka najjača i dovoljno zaštićena, tj. da ju je puno teže razbiti nego bilo koju od sekundarnih. Napadač može primijeniti napad na primarnu lozinku. Ako jedan od drugih modula pruža veću sigurnost od sigurnosti zasnovanoj na lozinki, negirala bi se jaka sigurnost koristeći mapiranje lozinki. Razmatra se primjena višestrukih lozinki po cijenu jednostavnosti korištenja. Ukoliko se koriste pametne kartice, potreba za mapiranjem je u potpunosti uklonjena.

Sigurnost konfiguracijske datoteke:

S obzirom da određuje način na koji će se autentificirati korisnici, ova datoteka mora biti zaštićena od neovlaštenog pristupa.

Ulančavanje modula:

Administrator mora, iz sigurnosnih razloga, pažljivo razmotriti različite mogućnosti kompozicije modula. Svi instalirani moduli moraju biti na pravilan način i pravilnim redoslijedom povezani u lanac.

17

Page 23: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

5. Pregled modula

Postoje mnoge PAM implementacije, međutim sve se pridržavaju istog koncepta. Stoga postoji skup modula zajedničkih svim implementacijama. S obzirom da je PAM dio Open Source software-a, mogu se lako prilagoditi za prevođenje u bilo kojem sustavu zasnovanom na UNIX-u. Ovo poglavlje daje pregled modula koji se pojavljuju u većini implementacija.

Tablica 5.1: Pregled uobičajenih modula u paketu

Moduli koji se odnose na korisničko okružnje

pam_mkhomedir Kod većih instalacija vrijeme potrebno da se stvore korisnički računi na svakom računalu je preveliko, stoga se koristi centralizirana autentifikacija. Ona uključuje NIS ili LADP. Ako korisnički računi nisu stvoreni na svakom poslužitelju, korisnici neće imati home direktorij tijekom prvog logiranja. Iz ovog razloga koristi se mkhomedir modul, koji stvara home direktorij ukoliko ga korisnik nema.

pam_mount Modul može montirati direktorij kada se korisnik prijavi.

Moduli koji se koriste za ograničavanje pristupa

pam_succed_if Modul se može koristiti za ograničavanje pristupa na način da se samo određeni korisnici mogu prijaviti. Sljedećom linijom može se zabraniti pristup svim system korisnicima (ID veći od 1000 za Debian i Ubuntu). Korisnici moraju imati bash ljusku.

auth requisite pam_succeed_if.so uid >= 1000 shell ~= bash

pam_nologin Kod mnogih sustava zasnovanih na UNIX-u, samo se root korisniku dozvoljava prijava u sustav ukoliko postoji /etc/nologin datoteka. Ova zadaća dodijeljena je pam_nologin modulu.

pam_wheel Nekad su članovi wheel grupe bili sustavski administratori (root korisnici). Kako bi se promijenio ID korisnika u ID root, koristi se naredba su. pam_wheel modul će korišten sa su jedino članovima wheel grupe omogućiti promjenu ID-a u root ID.

pam_access Modul se može koristiti za dobivanje iste funkcionalnosti kao sa pam_succeed_if modulom. Primarno je određen za prijavu i odjavu na mreži, dok pam_succeed_if ne zna odakle se korisnik prijavljuje. Kontrola pristupa na osnovu imena, računala, IP adrese, terminala.

pam_deny Uvijek vraća non-OK. To znači da modul uvijek može korisniku zabraniti pristup sustavu, neovisno o tome koji su njegovi ulazni podaci.

Moduli koji se odnose na back-end pohranu

18

Page 24: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

pam_unix pam_unix modul je najčešće korišten modul u bilo kojoj PAM instalaciji. Modul pruža tradicionalnu unix autentifikaciju korisnika. Koristi se za validaciju korisnika pomoću /etc/passwd datoteke u klasičnim UNIX autentifikacijskim procesima i /etc/shadow datoteke u modernijim sustavima.

Linux-PAM sadrži modul pam_unix2, koji također koristi /etc/passwd datoteku. On podržava NIS/NIS+, jaku enkripciju lozinke i zastarijevanje.

Podrazumijevane postavke za većinu Unix operativnih sustava uključuje pam_unix za autentifikaciju.

pam_winbind Pomoću ovog modula, Microsoft domene i Active Directories mogu se upotrijebiti kao back-end storage.

pam_ldap Omogućuje dobavljanje korisničkih podataka od LDAP poslužitelja.

pam_mysql Modul se može upotrijebiti za autentifikaciju korisnika pomoću podataka spremljenih u MySQL bazu.

5.1. Konvencija prilikom pisanja modula

Prema konvenciji moduli bi trebali biti locirani u /usr/lib/security direktoriju. Dodatni moduli mogu biti smješteni u /opt/<pkg>/lib.

Naziv modula je određen kao pam_<service_name>_<module_type>.so.1. Ako dani modul implementira više tipova, izostavlja se module_type sufiks iz imena.

Moduli bi trebali podržavati opcije:

debug:

Syslog debugging informacija na LOG_DEBUG razini. Valja biti oprezan da se ne logiraju važni i osjetljivi podaci poput lozinki.

nowarn:

Isključi poruke upozorenja.

Preporuča se da auth i password moduli podržavaju use_first_pass i try_first_pass opcije. Ako se modulu preda nepodržana opcija, modul treba logirati grešku na razini LOG_ERR. Bitovi dozvola na modulu usluge bi trebali biti takvi da group i other nemaju pravo pisanja. PAM infrastruktura neće učitati modul ako prava pristupa modulu ne zadovoljavaju gore navedena pravila.

19

Page 25: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

6. NSS biblioteka

6.1. Uvod u NSS

Za ispravan rad mreže potrebno je pohraniti niz informacija kao što su korisničko ime i lozinka za različite korisnike, e-mail adresa, informacije o ethernet sučelju, grupama korisnika, uslugama koje se pružaju u mreži, itd. Bez centralnog pohranjivanja, svaki sustav bi morao održavati vlastitu kopiju tih informacija. Promjenom podataka, administrator bi ih morao ažurirati na svakom sustavu u mreži.

Rješenje tog problema je NSS (Name Service Switch). Mrežne informacije pohranjuju se na poslužitelju i predaju se klijentu, sustavu ili aplikaciji koja ih traži. Informacije su pohranjene u datotekama, mapama, tablicama ili bazama podataka. Pohranjivanje tih podataka na jedno centralno mjesto olakšava administraciju većih mreža.

NSS je prvi puta predstavljen od Sun developera, a prihvaćen je od svih sustava nalik Unix-u uz neke minimalne razlike u implementaciji.

Temeljna ideja je implementirati različite usluge za pristup bazama kao različite module. Prednosti su što nove usluge mogu biti dodane bez njihovog dodavanja u C biblioteku, a moduli se mogu nadograditi odvojeno jedni od drugih.

6.2. Konfiguracijska datoteka NSS biblioteke

nsswitch.conf datoteka kontrolira kako klijent ili aplikacija dolazi do mrežnih informacija. Određuje koje usluge aplikacija koristi za dobivanje informacija i kojim redoslijedom.

U svakom sustavu ta datoteka pohranjena je u /etc direktoriju. Također, u tom direktoriju za svaku NSS uslugu postoji posebna predložak datoteka koja služi da bi administratoru olakšala konfiguraciju.

Table 1: Popis datoteka predložaka za NSS

Ime Opis

nsswitch.files Ovaj predložak se kristi kada se upotrebljavaju lokalne datoteke u /etc direktorju.

nsswitch.nis Koristi NIS bazu kao primarni izvor svih informacija osim password, group, automount i alias. Za njih se najprije koriste lokalne /etc datoteke, a potom NIS baza.

nsswitch.nisplus Koristi NIS+ bazu kao primarni izvor svih informacija osim password, group, automount i alias. Za njih se najprije koriste lokalne /etc datoteke, a potom NIS+ baza.

20

Page 26: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

nsswitch.dns Lokalne /etc datoteke koriste se za sve informacije osim za hosts. Za hosts se koristi DNS.

nsswitch.ldap Koristi LDAP kao primarni izvor svih informacija osim password, group, automount i alias. Za njih se najprije koriste lokalne /etc datoteke, a potom LDAP baza.

6.2.1. Format zapisa konfiguracijske datoteke

BNF opis sintakse nsswitch.conf datoteke:

<entry> ::= <database> ":" [<source>[<criteria>]]*

<criteria> ::= "[" <criterion>+ "]"

<criterion> ::= <status> "=" <action>

<status> ::= "success" | "notfound" | "unavail" | "tryagain"

<action> ::= "return" | "continue"

Svaki unos započinje u novoj liniji. Prazne linije se ignoriraju. Znak "#" definira komentar i on vrijedi do kraja linije. Znak "\" na kraju linije govori da je sljedeća linija nastavak trenutne linije.

Svaka linija te datoteke identificira zaseban tip mrežnih informacija. Datoteka podržava nekoliko tipova mrežnih informacija, koji se još nazivaju bazama, i one čine prvi stupac zapisa u datoteci. Ostatak linije određuje izvor gdje se pojedine informacije trebaju tražiti.

Tipovi infirmacija (baze) su sljedeći:

• aliases: Mail alias korišten od sendmail.

• ethers: Ethernet brojevi.

• group: Grupe korisnika, korišteno od getgrent funkcije.

• hosts: Ime i oznaka za host,koriste ga gethostbyname i slične funkcije.

• netgroup: Lista korisnika i domaćina u mreži, a koristi se za pravila o pristupu.

• networks: Imena i brojevi mreže, korišteni od getnetent funkcije.

• passwd: Korisnička lozinka, korištene od getpwent funkcije.

• protocols: Mrežni protokoli, za funkciju getprotoent.

• publickey: Javni i tajni ključevi za sigurni RPC, korišteni od NFS i NIS+.

• rpc: Imena i brojevi za udaljene proceduralne pozive. Koriste ga getrpcbyname i slične funkcije.

• services: Mrežne usluge, korištene od getservent funkcije.

21

Page 27: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

• shadow: Lozinke za shadow korisnika, a koristi ga getspnam.

U nekim sustavima postoje i automount, bootparams, netmasks.

Slijedi popis mogućih izvora informacija:

Tablica 6.1: Popis mogućih izvora informacija za NSS

Izvor Opis

files Datoteka pohranjena u klijentski /etc direktorij, npr /etc/passwd.

nis NIS mapa, npr. hosts mapa.

nisplus NIS+ tablica, npr. hosts tablica.

compat Može se koristiti za password i group informacije.

dns Može se koristiti da definira kako će host informacije biti dobavljene od DNS -a.

ldap Informacije se dobavljaju od LDAP-a.

Za svaki proces koji koristi nsswitch.conf datoteku, cijela datoteka čita se samo jednom. Ako je tijekom procesa datoteka naknadno izmijenjena, proces će nastaviti koristiti staru konfiguraciju.

6.2.2. Statusni kodovi

Nakon svake pretrage izvora vraćen je statusni kod koji govori o uspjehu ili neuspjehu.

Tablica 6.2: Statusni kodovi

Poruka Značenje

SUCCESS Informacije su pronađene.

UNAVAIL Informacija je nedostupna, tj. ne mogu biti pronađene ni NIS+ tablica, ni NIS mapa, niti /etc datoteke.

NOTFOUND Informacija nije pronađena.

TRYAGAIN Tablica, mapa ili datoteka za pretragu je pronađena, ali ne može odgovoriti na upit.

6.2.3. Akcije

Za svaki status moguće su dvije akcije :

• return: Prestani tražiti informaciju.

22

Page 28: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

• continue: Pokušaj sa sljedećim izvorom.

Koristi se sljedeća sintaksa: [ ( !? status = action )+ ]

Kombinacija statusnih poruka i akcija određuje što rutina radi u svakom koraku. Podrazumijevane akcije za savku povratnu vrijednost su:

SUCCESS=return

Prestani tražiti informaciju. Nastavi sa informacijom koja je pronađena.

UNAVAIL=continue.

NOTFOUND=continue.

TRYAGAIN=continue.

Idi na sljedeći izvor naveden u nsswitch.conf datoteci i nastavi s pretraživanjem. Ako je taj izvor zadnji ili jedini navedeni, vrati NOTFOUND status.

Kriterij pretraživanja može se promijeniti eksplicitnim navođenjem nekog drugog kriterija korištenjem STATUS=akcija sintakse. U slučaju neispravne sintakse koristi se podrazumijevani kriterij.

6.2.4. Kriteriji pretraživanja izvora

• Ako je naveden samo jedan izvor, rutina traži informaciju samo iz tog izvora. Ako je informacija pronađena vraćena je poruka o uspjehu. Ako informacija nije pronađena, prekida se pretraga.

• Ako ima više izvora, pretraga počinje od prvog navedenog. Ako je informacija pronađena, vraća se poruka o uspjehu. Ako informacija nije pronađena, ide na sljedeći izvor i tako redom sve dok informacija nije pronađena ili provjereni svi mogući izvori informacije.

6.2.5. Opis rada

Kada je pozvana NSS funkcija, NSS implemenacija čita konfiguracijsku datoteku /etc/nsswitch.conf, koja imenuje biblioteku u kojoj je implementiran postupak dobavljanja potrebnih podataka. Biblioteka se dinamički pokreće i poziva se odgovarajuća funkcija implementirana unutar te biblioteke. Otvara se navedeni izvor podataka, parsiraju se zapisi i vraća se rezultat, obično u obliku strukture.

23

Page 29: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

6.3. Pravila za pisanje NSS modula

6.3.1. Pravila imenovanja za NSS modul

Ime svake funkcije sastoji se od nekoliko dijelova:

_nss_service_function

service dio imena se odnosi na ime modula u kojem se funkcija nalazi, a function dio je izveden iz sučelja u C biblioteci.

Dakle, ako korisnik poziva funkciju gethostbyname i koristi se usluga files , koristi se funkcija

_nss_files_gethostbyname_r iz modula libnss_files.so.2

NSS moduli zapravo sadrže samo reentrant inačicu funkcije.1

6.3.2. Sučelje funkcija NSS modula

Prototipovi non-reentrant i reentrant inačice gore spomenute funkcije su:

1 Reentrant funkcija je funkcija koju je moguće ponovno pozvati u višeprocesnim, odnosno višedretvenim sustavima, dok non-reentrant funkciju poziva jedna dretva koja ju tada zaključa i onemogući njen ponovni poziv od strane druge dretve.

24

Slika 6.1: Opis rada NSS biblioteke za getpwuid()

Page 30: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

struct hostent *gethostbyname (const char *name)

int gethostbyname_r (const char *name,

struct hostent *result_buf,

char *buf,

size_t buflen,

struct hostent **result,

int *h_errnop);

Prototip funkcije u NSS modulu je zapravo:

enum nss_status _nss_files_gethostbyname_r (const char *name,

struct hostent *result_buf,

char *buf,

size_t buflen,

int *errnop,

int *h_errnop);

Dok funkcija na korisničkoj razini vraća pokazivać na rezultat, reentrant funkcija vraća enum nss_status vrijednost. U slučaju da funkcija sučelja mora vratiti pogrešku, potrebno je pohraniti ispravan kod greške u *errnop. Moguće povratne vrijednosti:

Tablica 6.3: nss_status i odgovarajući kodovi grešaka za errnop

nss_status Num.vrij.

Kod geške za *errnop

NSS_STATUS_TRYAGAIN -2 EAGAIN:

Jedna od korištenih funkcija ostala je trenutno bez resursa ili je usluga trenutno nedostupna.

ERANGE:

Spremnik nije dovoljno velik. Funkcija bi tebala biti pozvana ponovno sa većim spremnikom.

NSS_STATUS_UNAVAIL -1 ENOENT:

Potrebna datoteka nije pronađena.

NSS_STATUS_NOTFOUND 0 ENOENT:

Tražena vrijednost nije dostupna.

NSS_STATUS_SUCCESS 1

25

Page 31: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Dozvoljeno je korištenje i drugih kodova grešaka ili drugačiju interpretaciju spomenutih. Iznimka je kod ERRANGE za NSS_STATUS TRYAGAIN. On mora imati značenje da je predan premalen spremnik.

Postoji i peta vrijednost: NSS_STATUS_RETURN. Ona se koristi samo na mjestima gdje se ne može upotrijebiti ni jedna od gore navedenih vrijednosti, interno u modulu.

U sučelju se mogu pojaviti četiri različite funkcije. Kratica db u sljedećoj tablici je kratica za bazu (npr., to je pw za passwd bazu).

• enum nss_status _nss_database_setdbent (void)

Ova funkcija priprema uslugu za izvršavanje operacija. Za jednostavno pretraživanje bazirano na datoteci (file lookup) to znači da bi se datoteka mogla otvoriti, a za ostale usluge ova funkcija je noop. Poseban slučaj za tu funkciju je da prima dodatni argument za baze (npr. sučelje je int setdbent (int)). Povratna vrijednost bi trebala biti NSS_STATUS_SUCCESS ili odgovarajuća poruka u slučaju greške.

• enum nss_status _nss_database_enddbent (void)

Ova funkcija zatvara sve datoteke koje su još uvijek otvorene ili oslobađa memoriju spremnika. Obično nema povratne vrijednosti različite od NSS_STATUS_SUCCESS.

• enum nss_status _nss_database_getdbent_r (STRUCTURE *result, char *buffer, size_t buflen, int *errnop)

S obzirom na to da će ova funkcija biti pozivana nekoliko puta za redom, mora čuvati neko stanje. Ovakve funkcije neće pokušati zapisivati vraćene vrijednosti na isto mjesto. Umjesto toga, zapisuju u strukturu na koju pokazuje result parametar.

Pozivi imaju zajedničko stanje, i u slučaju datoteke, vraćaju susjedne zapise iz datoteke. Spremnik buffer duljine buflen može se koristiti za spremanje dodatnih podataka za rezultat. Nema garancije da će isti spremnik biti predan sljedećem pozivu ove funkcije. Zbog toga se spremnik ne smije koristiti za spremanje informacija stanja jednog poziva drugome.

Prije povratka iz funkcije, potrebno je pohraniti vrijednost lokalne errno varijable u varijablu na koju pokazuje errnop. Za baze host i network ova funkcija ima dodatni argument.

Funkcija vraća NSS_STATUS_SUCCESS dokle ima novih vrijednosti. Kada je posljedni zapis pročitan , vraća NSS_STATUS_NOTFOUND. Ako je spremnik predan kao argument premalen za podatke koji trebaju biti vraćeni , vraća se NSS_STATUS_TRYAGAIN. Ako usluga prethodno nije inicijalizirana pozivom _nss_DATABASE_setdbent , mogu se vratiti sve dozvoljene vrjednosti za ovu funkciju.

26

Page 32: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

• enum nss_status _nss_database_getdbbyXX_r (PARAMS, STRUCTURE *result, char *buffer, size_t buflen, int *errnop)

Ova funkcija će vratiti zapis iz baze koji je adresiran s parametrom PARAMS. Tip i broj ovih argumenata je varijabilan.

Rezultat mora biti pohranjen u strukturu na koju pokazuje result. Ako ima dodatnih podataka koje treba vratiti, funkcija mora koristiti spremnik buffer i buflen.

Implementacija ove funkcije treba poštivati stayopen zastavicu postavljenu sa setDBent funkcijom kad god takvo ponašanje ima smisla. Prije povratka iz funkcije, potrebno je pohraniti vrijednost lokalne errno varijable u varijablu na koju pokazuje errnop. Ova funkcija prima dodatni argument za host i networks baze. Povratna vrijednost treba slijediti gore navedena pravila.

27

Page 33: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

7. Praktični rad

Na Fakultetu elektrotehnike i računarstva razvijen je sustav koji autentificira i dohvaća podatke o djelatnicima i studentima putem web usluga na poslužitelju www.fer.hr. Za komunikaciju klijenta sa poslužiteljem koristi se protokol XML-RPC.

U svrhu izvođenja nekih laboratorijskih vježbi pokazala se potreba izrade modula koji će na jednostavan način autentificirati korisnike i sukladno tome dozvoliti im pristup resusrsima. Zadatak je bio ostvariti PAM modul koji će autentificirati korisnika pomoću sustava "Quilt", a koji će se moći pozivati iz već postojećih PAM svjesnih aplikacija kao što je login. Modul je poopćen na način da poslužitelj nije točno definiran u samom kodu, već njegovu adresu prima kao ulazni parametar preko konfiguracijske datoteke. Na taj način može poslužiti kao klijentska strana komunikacije sa nekim drugim XML-RPC poslužiteljem, a ne samo sa www.fer.hr.

Također je izrađena biblioteka NSS koja vraća informacije strukture passwd koje dobiva od poslužitelja i kreira korisnički /home direktorij ako ne postoji.

Slijedi kratki opis XML-RPC protokola kao i osnovnih fukcija korištenih u modulu i NSS biblioteci.

7.1. Osnovne značajke protokola XML-RPC

Protokol XML-RPC omogućuje proceduralne pozive preko Interneta (eng. Remote Procedure Call), neovisno o operativnom sustavu i okruženju. Za transport podataka koristi se protokol HTTP. Točnije, koristi se HTTPS protokol. HTTPs je inačica HTTP protokola koja koristi SSL/TLS za zaštitu i skrivanje prometa. Omogućava zaštitu komunikacije čak i u slučaju kada je samo jedna strana (obično poslužitelj) autentificirana. Podaci koji se prenose su oblikovani u XML formatu. Iako je protokol izrađen da bude što jednostavniji, omogućava prijenos i obradu složenih struktura podataka. Protokol ne čuva stanje, pa funkcije koje moraju očuvati neko stanje traže dodatni parametar.

28

Slika 7.1: Protokol XML-RPC

Page 34: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Osnovne značajke protokola:

• adresiranje preko URI-a (eng. Uniform Resource Identifier)

• poruke u obliku XML-a

• korištenje HTTP protokola za transport.

Za korištenje XML-RPC protokola, potrebno je imati odgovarajuću klijentsku biblioteku. Biblioteke postoje za gotovo sve jezike i okruženja: Java, PHP, .Net, Python, C, C++, Perl, itd. U ovom radu koristi se xmlrpc-c klijentska biblioteka. Funkcije iz te biblioteke koje modul koristi spomenute su i objašnjene u poglavlju 7.2.4. koje opisuje funkciju modula do_xmlrpc_client_call, a koja stvara novog klijenta i ostvaruje komunikaciju s poslužiteljem.

7.2. Opis ostvarenog autentifikacijskog modula

Modul je ostvaren programskim jezikom C, budući da je to uobičajeni jezik za razvoj sustava nalik Unix-u. S obzirom na to da je zadaća modula autentificirati korisnika na www.fer.hr, modul podržava autentifikacijsku grupu. U skladu s time, implementirana je funkcija pam_sm_authenticate.

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh,

int flags,

int argc,

const char **argv){}

7.2.1. Funkcija pam_sm_authenticate

Funkcija pam_sm_authenticate predstavlja main funkciju modula. Za ispravan rad potrebno je definirati autentifikacijsku grupu i uključiti zaglavnu datoteku:

#define PAM_SM_AUTH

#include <security/pam_modules.h>

Interpretaciju ulaznih vrijednosti modul vrši pozivom pam_parse_arguments funkcije objašnjene u poglavlju 9.2.2. Modul dobavlja korisničko ime pomoću pam_get_user funkcije.

int pam_get_user(pamh, user, prompt);

const pam_handle_t *pamh;

const char **user;

const char *prompt;

Funkcija vraća korisničko ime određeno pam_start(3) funkcijom pozvanom od strane aplikacije. Ukoliko korisničko ime nije određeno tom funkcijom, vraća vrijednost koju bi vratila pam_get_item funkcija. Ukoliko je ta vrijednost NULL, dohvaća korisničko

29

Page 35: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

ime pomoću pam_conv(3) mehanizma. Dakle, za korisničko ime uzima se prva ne NULL vrijednost od:

• prompt argumenta poslanog funkciji

• od vrijednosti vraćene pam_get_item funkcijom

• podrazumijevanog upita: "login:"

Korisničko ime vraća se kao vrijednost pokazivača *user. Funkcija postavlja PAM_USER item.

Ukoliko pam_get_user ne uspije dohvatiti korisničko ime, vrijednost varijable user ostaje NULL, te se izvođenje modula odmah prekida i vraća se PAM_USER_UNKNOWN.

Lozinku dobavlja pomoću pam_get_authtok funkcije.

int pam_get_authtok(pam_handle_t *pamh, int item,

const char **authtok, const char *prompt);

Ova funkcija vraća spremljenu autentifikacijsku oznaku ili traži unos od korisnika ukoliko je trenutno nema u memoriji.

Argument item postavljen je na PAM_AUTHTOK, kako bi bila vraćena trenutna oznaka.

Argument prompt određuje upit koji će se koristiti u slučaju da nemamo spremljenu oznaku. Postavljen je na NULL, pa se koristi PAM_AUTHTOK_PROMPT.

Ukoliko je za lozinku unesena NULL vrijednost, a ta opcija nije dozvoljena putem zastavice, prekida se izvođenje i vraća PAM_AUTH_ERR.

if(password[0] == '\0' && !(flags & PAM_DISALLOW_NULL_AUTHTOK))

return PAM_AUTH_ERR;

Nakon uspješnog dobavljanja korisničkog imena i lozinke, modul vrši xmlrpc poziv prema poslužitelju pozivom funkcije do_xmlrpc_client_call. Ako autentifikacija na poslužitelju prođe, modul vraća PAM_SUCCESS.

U slučaju bilo kakve greške, prekida se daljnje izvođenje modula i vraća se PAM_AUTH_ERR. Sve poruke vezane uz neuspjeh neke od funkcija zapisuju se u sustavski dnevnik ovisno o vrijednosti syslogging zastavice.

7.2.2. Funkcija pam_parse_arguments

int pam_parse_arguments(int flags, int argc, const char **argv);

Funkcija pam_parse_arguments služi za dobavljanje ulaznih argumenata modula. Ulazni argumenti zadani su konfiguracijskom datotekom u obliku:

... server_url=URL use_syslog=yes/no

Pri tome njihov redoslijed nije bitan. Argument server_url definira URL adresu poslužitelja na kojem se vrši autentifikacija korisnika i obavezno ga je navesti. Argument use_syslog je opcionalan, a definira hoće li modul dojave o uspjehu ili

30

Page 36: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

neuspjehu odgovarajućih operacija bilježiti u sustavski dnevnik. Njegova vrijednost se interpretira syslogging zastavicom. Ukoliko se taj argument izostavi, podrazumijevana vrijednost zastavice je true (vrijednost 1).

U slučaju da je opcija korištenja sustavskog dnevnika isključena, dvije situacije će ipak biti zabilježene. Prva je ako modul primi nedozvoljene vrijednosti argumenata i tada se bilježi poruka: "Opcija nepoznata.":

pam_syslog(LOG_ERR, "Unknown option %s\n", argv[i]);

Druga je ukoliko nije zadan URL poslužitelja. U tom slučaju modul nikada neće uspjeti.

Te dvije poruke zapisuju se kako bi administrator mogao dobiti obavijest o neispravnoj konfiguraciji modula.

Funkcija vraća 1 za uspjeh, 0 za neuspjeh.

7.2.3. Funkcija pam_syslog

Ova funkcija koristi se za zapisivanje poruka u sustavski dnevnik. Poziva se ukoliko je postavljena zastavica syslogging.

static void pam_syslog(int priority, const char *format, ...);

Fukcija zahtjeva uključivanje zaglavne datoteke <syslog.h>. Koriste se već gotove funkcije iz zaglavne datoteke sa sljedećim parametrima:

openlog(const char * ident, int logopt, int facility);

ident definira tekstualnu vrijednost koja je nadodana na početak svakog zapisa. U našem slučaju to je ime modula pam_webauth.

Dodatne opcije kod ispisa definirane su sa logopt varijablom. Postavljena je tako da se svakom zapisu dodaje OR operacija cjelobrojnih vrijednosti LOG_PID|LOG_CONS|LOG_NDELAY, gdje LOG_PID predstavlja oznaku procesa, LOG_CONS prisilno ispisuje poruku u konzoli ako ju nije moguće poslati do syslogd, a LOG_NDELAY definira da se čeka na otvaranje sustavskog dnevnika do pojave prve syslog() funkcije.

Varijabla facility indicira aplikaciju ili sustavsku komponenu koja je generirala poruku. Postavljena je na LOG_AUTH, što označava da se radi o sigurnosnoj, odnosno autorizacjskoj poruci.

Sam upis poruke vrši se pozivom funkcije:

vsyslog(int priority, const char * format, va_list ap);

Dozvoljeni su sljedeći prioriteti:

LOG_ERR koristi se za zapis svih grešaka koje su se dogodile tijekom rada modula, a koje se odnose na greške od strane XML-RPC komunikacije sa poslužiteljom. Primjer zapisa:

May 20 11:55:47 kp41666-laptop pam_webauth[8098]: ERROR (in function: xmlrpc_client_call2f): Curl failed to perform HTTP POST request. curl_easy_perform() says: Couldn't resolve host 'www.fer.hr' (-504)

31

Page 37: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

LOG_NOTICE koristi se u slučaju unosa neispravnog korisničkog imena ili lozinke, tj. za slučaj neuspješne autentifikacije. Potvrda o uspjehu autentifikacije također se bilježi na toj razini. Primjer zapisa:

May 20 12:11:32 kp41666-laptop pam_webauth[9008]: User unknown (NULL)

May 20 12:12:32 kp41666-laptop pam_webauth[9008]: Incorrect password or unknown user: kp41666

May 20 12:12:32 kp41666-laptop pam_webauth[9008]: User kp41666 exists on www.fer.hr/xmlrpc/xr_auth.php.#012 Authentication sucessful.

LOG_ALERT odnosi se na zapise koji će se bilježiti u sustavski dnevnik neovisno o tome je li uključena use_syslog opcija. Zapisuju se poruka o neispravnim argumentima predanih modulu i/ili izostanku server_url argumenta koji je nužan za rad modula. Ove poruke uvijek se zapisuju u svrhu pomoći administratoru u uklanjanju mogućih nedoumica prilikom konfiguracije usluge koja koristi taj modul. Primjer zapisa:

May 20 12:09:12 kp41666-laptop pam_webauth[8771]: server_url required. Not an optional argument.

Podrazumijevano, opcija upisivanja u sustavski dnevnik se uvijek koristi. Ukoliko nije zadan use_syslog argument ili ukoliko nije postavljen na vrijednost "no", zastavica syslogging je podrazumijevano postavljena i ova funkcija se poziva svaki put kad se za to pokaže potreba.

Sve poruke zapisuju se u /var/log/auth.log datoteku.

7.2.4. Funkcija do_xmlrpc_client_call()

Ukoliko su unesene dozvoljene vrijednosti za korisničko ime i lozinku, poziva se funkcija do_xmlrpc_client_call() koja vrši XML-RPC poziv poslužitelju. Pomoću te funkcije provjerava se valjanost para korisničko ime - lozinka. .

int do_xmlrpc_client_call(const char *username, const char *password);

Ulazni argumenti funkcije su korisničko ime i lozinka za koje se provjerava valjanost pozivom poslužitelju.

Za ispravan rad ove funkcije potrebno je uključiti zaglavne datoteke:

#include <xmlrpc.h>

#include <xmlrpc_client.h>

Zaglavna datoteka xmlrpc.h deklarira sučelje iz libxmlrpc biblioteke koja dozvoljava korištenje uobičajenih XML-RPC funkcija ostvarenih u programskom jeziku C, a druga sadrži funkcije tipične za funkcionalnost klijenta.

Funkcija najprije inicijalizira varijablu okoline potrebnu za tumačenje XML-RPC poruka o pojavi greške s:

xmlrpc_env_init(&env);

32

Page 38: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Time inicijalno postavlja varijablu okoline na valjanu vrijednost koja indicira da se pogreška nije dogodila.

Postavlja se globalna konstanta klijenta:

xmlrpc_client_setup_global_const(&env);

Funkcija stvara objekt XML-RPC klijenta bez dodatnih parametara sa:

xmlrpc_client_create(&env, XMLRPC_CLIENT_NO_FLAGS,

APP_NAME, VERSION, NULL, 0, &clientP);

Izvršava udaljeni proceduralni poziv:

xmlrpc_client_call2f(&env, clientP, SERVER_URL, METHOD_NAME,

&responseP,"(ss)", username, password);

Za ovu finkciju potrebno je definirati URL poslužitelja s kojim se uspostavlja komunikacija, ime XML-RPC metode te XML-RPC parametre koje će metoda koristiti. URL poslužitelja je ulazni argument modula, dok je ime metode definirano sa:

#define METHOD_NAME "auth.auth".

Koristi se auth.auth metoda sustava "Quilt" koja kao parametre prima korisničko ime i lozinku u obliku tekstualnih vrijednosti, tj. format "(ss)", te ukoliko takav korisnik postoji na poslužitelju, vraća true ili false.

Odgovor se dobiva u obliku XML-RPC vrijednosti. XML-RPC je dizajniran tako da udaljeni proceduralni pozivi budu nalik tradicionalnim programskim pozivima procedura. Zbog toga su povratne vrijednosti vrlo slične vrijednostima uobičajenih programskih jezika. Dakle postoje vrijednsti: XMLRPC_TYPE_BOOL, XMLRPC_TYPE_INT, XMLRPC_TYPE_DOUBLE, itd. Podržani su i složeni tipoivi kao što su nizovi i strukture. Za svaki od tip podataka postoji odgovarajuća XML-RPC funkcija ili više njih za pretvaranje iz XML-RPC vrijednsti u C vrijednost i obrnuto.

Metoda auth.auth vraća boolean vrijednost, pa ju je iz XMLRPC_TYPE_BOOL potrebno pretvoriti u cijelobrojnu vrijednost 1 ili 0. Pretvorba se vrši funkcijom:

xmlrpc_read_bool(&env, responseP, &boolValue);

Na kraju funkcije oslobađaju se svi zauzeti resursi (varjable okoline, globalne varijable klijenta):

xmlrpc_env_clean(&env);

xmlrpc_client_destroy(clientP);

xmlrpc_client_teardown_global_const();

Funkcija do_xmlrpc_client_call može vratiti tri vrijednosti. Ukoliko je bilo koja od XML-RPC funkcija vratila xmlrpc grešku, povratna vrijednost je -1. Ako je auth.auth funkcija vratila vrijednost istina, povratna vrijednost je 1, a ako je odgovor neistina, povratna vrijednost je 0.

33

Page 39: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

7.2.5. Funkcija check_if_fault_occurred

Provjeru je li u nekom od XML-RPC funkcija došlo do pogreške, funkcija do_xmlrpc_client_call vrši pozivom funkcije check_if_fault_occurred.

int check_if_fault_occurred(char *function,

xmlrpc_env* const envP, int syslogging);

Prvi argument je ime XML-RPC funkcije za koju se provjerava je li uspjela ili ne. Drugi argument je varijabla okoline, a treći zastavica o kojoj ovisi hoće li greška, ukoliko se dogodila, biti upisana u sustavski dnevnik.

Poruka o pogreški je zapisana u envP->fault_occurred.

U slučaju pogreške povratna vrijednost je 1, inače 0.

7.2.6. Ostale PAM_EXTERN funkcije

Kako bi se mogli uspješno ulogirati u sustav, potrebno je da uspije otvaranje odnosno zatvaranje sjednice kao i postavljanje vjerodajnica. U tu svrhu, implementirana je trivijalna funkcionalnost za pam_sm_open_session, pam_sm_close_session i pam_sm_setcred funkcije:

PAM_EXTERN int pam_sm_ime (pam_handle_t *pamh, int flags, int argc,const char *argv[])

{

(void)pamh;

(void)flags;

(void)argc;

(void)argv;

return PAM_SUCCESS;

};

Ostale funkcije vraćaju PAM_SERVICE_ERR.

7.3. Instalacija modula

Izvorni kod modula nalazi se u pam_webauth.tar.gz datoteci. Datoteku je potrebno dekompresirati i dearhivirati što se postiže naredbama:

gunzip pam_webauth.tar.gz

tar -xvf pam_webauth.tar

Potrebno je pozicionirati se u pam_webauth direktorij naredbom: cd pam_webauth.

Osim izvornog koda, u datoteci se nalazi Makefile dtoteka i check.sh skripta.

Pozivom make check naredbe provjerava se jesu li zadovoljeni svi zahtjevi koji se odnose na biblioteke potrebne za ispravan rad modula.

34

Page 40: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Modul se zatim instalira pozivom make i make install naredbe. Za make install naredbu potrebno je imati root ovlasti.

Prilikom prevođenja modula moguće je uključiti standardne sustavske biblioteke, kao i kod običnog prevođenja programa. Ovdje su uključene XML-RPC biblioteke, što je vidljivo u liniji 2.

Datoteke pam_webauth.o i pam_webauth.so iz trenutnog direktorija moguće je ukloniti naredbom make clean.

Naredba make uninstall uklanja izvršnu datoteku modula iz /user/security direktorija. Također zahtjeva root ovlasti.

7.4. Opis ostvarene NSS biblioteke

Iako bi osnovne NSS funkcije po definiciji trebale biti reentrant funkcije, ovdje se ne koriste monitori, jer poslužitelj radi kao multiuser pa to nije potrebno. Dakle, nije potrebno štititi pristup bazi korisnika jer se ona obavlja XML-RPC pozivom poslužitelju.

35

sh ./check.sh

Cheking for PAM library and XML-RPC library installation.

...looking for /lib/libpam.so.

PAM library installed.

pam_appl.h found.

pam_modules.h found.

...looking for /usr/lib/xmlrpc.so.

XML-RPC library installed.

xmlrpc.h found.

xmlrpc_client.h found.

Slika 7.2: Ispis make check

$ gcc -fPIC -c pam_webauth.c

$ gcc -shared `xmlrpc-c-config --cflags` -o pam_webauth.so pam_webauth.o `xmlrpc-c-config --libs` -lxmlrpc_client -lpam

$ cp pam_webauth.so /lib/security

Slika 7.3: popis naredbi za make install

Page 41: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

7.4.1. Funkcija _nss_webauth_getpwnam_r

enum nss_status _nss_webauth_getpwnam_r (const char *name,

struct passwd * pw,

char *buffer,

size_t buflen,

int *errnop);

Funkcija služi za dobavljanje korisničkih podataka u passwd strukturu. Varijabla char *name sadrži korisničko ime prema kojem se pretražuje baza u svrhu dobivanja ostalih podatak. Struktura pw je passwd struktura koju je potrebno popuniti dobivenim podacima, a izgleda ovako:

struct passwd {

char *pw_name; //korisničko ime

char *pw_passwd; //lozinka, kriptirana

uid_t pw_uid; //korisnički ID

gid_t pw_gid; //ID grupe

time_t pw_change; //vrijeme promjene lozinke

char *pw_class; //

char *pw_gecos; //puno ime korisnika

char *pw_dir; //korisničko /home direktorij

char *pw_shell; //korištena ljuska

time_t pw_expire; //

char *fields;

};

U nekim sustavima u datoteci pwd.h izostavljene su neke od navedenih vrijednosti, pa se u kodu one nalaze unutar idef bloka.

Za lozinku funkcija uvijek vraća prazan string, a za ljusku /bin/sh. Korisnički direktorij je /home/$username. Ako ne postoji, stvara novi direktorij prema dobivenom korisničkom imenu.

Varijabla buffer (velićine buflen) služi za privremenu pohranu vrijednosti. Koristi se u funkciji za popunjavanje passwd strukture objašnjene u kasnijem poglavlju. errnop služi za pohranu vrijednosti errno varijable.

7.4.2. Funkcija nss_webauth_get_data_from_xmlrpc_server

enum nss_status nss_webauth_get_data_from_xmlrpc_server(

const char * username,

struct passwd * pw,

36

Page 42: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

char * buffer,

size_t buflen,

int * errnop);

Ova funkcija stvara novog XML-RPC klijenta i ostvaruje komunikaciju sa poslužiteljem na identičan način kao što je već opisano u poglavlju 9.2.4. za do_xmlrpc_client_call() funkciju.

Razlika je u tome što se sada poziva metoda nss.getpwnam, te adresa poslužitelja glasi: https://www.fer.hr/xmlrpc/xr_nss.php.

Funkcija vraća NSS_STATUS_UNAVAIL ako komunikacija sa poslužiteljem nije uspješno uspostavljena ili NSS_STATUS_NOTFOUND ako tražena vrijednost nije pronađena. U oba slučaja varijabla errno se postavlja na vrijednost ENOENT.

Ako su podaci uspješno dohvaćeni, vraća se NSS_STATUS_SUCCESS.

7.4.3. Funkcija fault_occured

int fault_occurred(char *function, xmlrpc_env* const envP);

Funkcija je identična funkciji check_if_fault_occurred iz poglavlja 9.2.5.

Provjerava envP->fault_occurred varijablu i vraća vrijednost 0 ako nije došlo do pogreške, vrijednost 2 ako traženi korisnik ne postoji ili vrijednost 1 za sve ostale pogreške koje se mogu dogoditi tijekom komunikacije s poslužiteljem.

7.4.4. Funkcija nss_webauth_result_to_struct

enum nss_status nss_webauth_result_to_struct(struct passwd *pw,

xmlrpc_value *responseP,

int *errnop,

char * buffer,

size_t buflen,

xmlrpc_env* const envP);

Funkcija parsira podatke dobivene od poslužitelja i popunjava passwd strukturu.

Odgovarajuća vrijednost dobiva se pretraživanjem elemenata strkture po imenu, a vrijednost se sprema u varijablu array_elementP:

xmlrpc_struct_find_value(envP, responseP, "pw_name", &array_elementP);

Dobivena xmlrpc vrijednost se pretvara u tekstualnu vrijednost programskog jezika C sa:

xmlrpc_read_string(envP, array_elementP, (const char **) &string);

37

Page 43: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

Vrijednost se dodjeljuje odgovarajućem elemenu passwd srukture pozivom funkcije nss_webauth_copy_to_buffer ako je vrijednost elementa string ili pozivom nss_webauth_strtol funkcije ako je vrijednost long.

U slučaju da nema dovoljno memorije za pohranjivanje vrijednosti, vraća se NSS_STATUS_TRYAGAIN i varijabla errno se postavlja na ERANGE. To znači da spremnik buffer nije dovoljno velik i da bi funkcija tebala biti pozvana ponovno s većim spremnikom.

Ako su svi podaci uspješno dohvaćeni i struktura popunjena, vraća se NSS_STATUS_SUCCESS.

7.4.5. Funkcija dir_exists

int dir_exists(char *dirname);

Funkcija provjerava postoji li direktorij /home/korisničko_ime. Vraća 1 ako postoji, 0 ako ne postoji.

7.4.6. Funkcija nss_webauth_strtol

long nss_webauth_strtol(char * str, long fallback);

Pretvara string vrijednost u long. Ako dobivena string vrijednost nije zadovoljavajuća, vraća FALLBACK_UID odnosno FALLBACK_GID s vrijednošću 65534.

7.4.7. Funkcija nss_webauth_copy_to_buffer

char * nss_webauth_copy_to_buffer(char ** buffer,

size_t * buflen, const char * string);

Funkcija kopira string vrijednost u buffer varijablu koja je dobivena kao argument funkcije. Vraća pokazivač na adresu.

7.4.8. Funkcija nss_syslog

static void nss_syslog(int priority, const char *format, ...);

Funkcija je identična funkciji pam_syslog iz poglavlja 9.2.3.

LOG_ERR koristi se za zapis svih grešaka koje su se dogodile tijekom rada modula (status NOTFOUND ili UNAVAIL), a koje se odnose na greške od strane XML-RPC komunikacije s poslužiteljom. Također se koristi za dojavu poruke da je predan premalen spremnik buffer, te da se vraća status TRYAGAIN.

LOG_NOTICE koristi se za zapis o uspješnom izvršenju getpwnam funkcije (završava sa statusom SUCCESS). Također se koristi za zapis poruke o uspješnom ili neuspješnom stvaranju korisničkog /home direktorija kada je to potrebno.

38

Page 44: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

7.5. Instalacija NSS biblioteke

Izvorni kod nalazi se u nss_webauth.tar.gz datoteci. Datoteku je potrebno dekompresirati i dearhivirati:

gunzip nss_webauth.tar.gz

tar -xvf nss_webauth.tar

Instalacija se vrši pozivom naredbi prikazanih na slici 7.4.

Time će se generirati dijeljena biblioteka libnss_webauth.so.2.0, odbgovarajuće veze sa ld (libnss_webauth.so) i dinamički loader (libnss_webauth.so.2). Install naredba premješta biblioteku u /usr/lib direktorij gdje su i ostvarene odgovarajuće veze sa ln naredbom. Stvara sve direktorije koji nedostaju i postavlja postavke za vlasnika, grupu i način rada.

7.6. Ispitivanje modula

Modul je ispitan na sustavu Ubuntu 9.10. Za korištejne na drugim sustavima potrebno je provjeriti lokaciju potrebnih biblioteka, kao i njihove verzije te, po potrebi, prilagoditi priložene Makefile datoteke.

Za ispitivanje modula korištena je već postojeća aplikacija login. Konfiguracijska datoteka /etc/pam.d/login promjenjena je na taj način da za autentifikaciju korisnika definira:

auth sufficient pam_webauth.so use_syslog=yesserver_url=https://www.fer.hr/xmlrpc/xr_auth.php

Napomena: cijeli zapis mora biti jedna linija.

Prilikom otvaranja nove konzole sa ctrl+alt+f1, pokreće se login aplikacija i traži unos korisničkog imena i lozinke. Ukoliko se unesu pravilne vrijednosti za www.fer.hr,

39

$ mkdir .libs

$ gcc -Wall -fPIC -c nss_webauth.c -o .libs/nss_webauth.o

$ gcc -shared `xmlrpc-c-config --cflags`-o .libs/libnss_webauth.so.2.0 .libs/nss_webauth.o `xmlrpc-c-config --libs` -lxmlrpc_client

# install .libs/libnss_webauth.so.2.0 /usr/lib

# cd /usr/lib

# ln -s libnss_webauth.so.2.0 libnss_webauth.so.2

# ln -s libnss_webauth.so.2 libnss_webauth.so

Slika 7.4: Instalacija NSS biblioteke

Page 45: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

potvrđuje se da takav korsnik postoji, te je logiranje u sustav uspješno. Pri tome je potrebno da taj korisnik postoji lokalno, tj. da ima svoj /home direktorij. U protivnom, autentifikacija će proći uspješno, ali login neće uspjeti.

Ukoliko korisnik postoji na FERwebu, a nema svoj /home direktorij, pozivom modula nove NSS biblioteke (s odgovarajućim ovlastima), direktorij će biti stvoren. Istovremeno će u passwd strukturu biti dohvaćeni dostupni podaci za tenutnog korisnika. Za korištenje biblioteke, potrebno je provesti instalaciju na već opisan način, te promijeniti liniju nsswitch.conf datoteke da ukazuje da se informacije traže pomoću webauth modula. Ispravnost rada getpwnam funkcije može se utvrditi zasebnim C programom koji će ispisivati pojedina polja passwd strukture nakon njezina poziva za nekog korisnika. Također se može, npr. pozvati adduser username funkcija, koja će ukoliko korisnik postoji na feru ispisati odgovarajuću poruku. Ukoliko ne postoji matični direktorij za korisnika, on će biti stvoren. Ako korisnik ne postoji adduser funkcija će ga stvoriti lokalno, pri čemu traži dodatne informacije.

40

Page 46: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

8. Zaključak

U ovom diplomskom radu, u programskom jeziku C, ostvareni su autentifikacijski modul koji koristi XML-RPC protokol za komunikaciju s poslužiteljem i tako vrši autentifikaciju korisnika te nova NSS biblioteka za dohvaćanje podataka o korisnicima. Modul se na jednostavan način može dodati u sustav i koristiti kao i svaki drugi autentifikacijski modul iz uobičajenog PAM paketa. Promjena procesa autentifikacije vrši se izmjenom ili nadopunom konfiguracijske datoteke za aplikaciju, tako da se doda linija koja definira korištenje pam_webauth.so modula. Pri tome nema potrebe za izmjenom i ponovnim prevođenjem aplikacije.

Budući da je modul pisan u programskom jeziku C, mogu se koristiti bilo koje postojeće biblioteke, što olakšava pisanje koda i proširuje mogućnosti njegove primjene. Ostvareni autentifikacijski modul ne implementira sve pam_sm_ funkcije. Mogao bi se proširiti implementacijom pam_sm_chauthtok funkcije, čime bi se omogućila promjnea korisničke lozinke.

NSS nadopunjava ostvareni autentifikacijski modul na način da dohvaća podatke o korisniku u passwd strukturu i po potrebi stvara matični direktrij. Ostvarena je samo funkcija getpwnam() koja dohvaća podatke pomoću korisničkog imena. Dodavanje novog modula u biblioteku je jednostavno, ne zahtjeva promjenu ili proširenje postojećih biblioteka i modula. Potrebno je samo u konfiguracijsku datoteku dodati zapis koji ukazuje na njegovo korištenje.

Autentifikicijski modul je ostvaren u svrhu korištenja na laboratorijskim vježbama na Fakultetu elektrotehnike i računarstva u Zagrebu. Vrši se komunikacija sa sustavom Quilt na ferwebu , koji za različite korisnike nudi različitenačine autentifikacije (za studente Active Directory, za djelatnike interna baza, a za specijalne goste [email protected]). Trenutno ne postoji neki drugi integrator koji na isti način omogćava autentifikaciju za sve navedene vrste korisnika. Stoga je lakše imati jedan modul koji pristupa ovakvom servisu, osobito ako se u budućnosti promijeni način autentifikacije.

41

Page 47: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

9. Literatura

[1] V. Samar, R. Schemers, Unified Login With Pluggable Authentication Modules (PAM), October 1995., dokument je dostupan na adresi: http://www.kernel.org/pub/linux/libs/pam/documentation/

[2] V. Samar, R. Schemers, Making Login Services Independent of Authentication Technologies, dokument je dostupan na adresi: http://www.sun.com/software/solaris/pam

[3] Andrew G. Morgan, Thorsten Kukuk, The Linux-PAM System Administrators' Guide, dokument je dostupan na adresi: http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html

[4] Andrew G. Morgan, Thorsten Kukuk, The Linux-PAM Module Writers' Guide, dokument je dostupan na adresi: http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_MWG.html

[5] Andrew G. Morgan, Thorsten Kukuk, The Linux-PAM Application Developers' Guide, dokument je dostupan na adresi: http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_ADG.html

[6] Understanding /etc/passwd File Format, dokument je dostupan na adresi: http://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/

[7] Understanding /etc/shadow File Format, dokument je dostupan na adresi: http://www.cyberciti.biz/faq/understanding-etcshadow-file/

[8] Dag-Erling Smørgrav, Pluggable Authentication Modules, dokument je dostupan na adresi: http://www.freebsd.org/doc/en/articles/pam/article.html

[9] Kenneth Geisshirt, Pluggable Authentication Modules, The Definitive Guide to PAM for Linux SysAdmins and C Developers, January 2007.

[10] Daniel J. Barrett, Richard E. Silverman, Robert G. Byrnes, Linux security cookbook, dokument je dostupan na adresi: http://books.google.hr/books?id=NRSQTD2b98IC&pg=PA74&lpg=PA74&dq=PAM+aware+application&source=bl&ots =p3km7d WtEK&sig=32ynRXE8Ipf7DTRfvjEvpBm2VF8 &hl=hr&ei=4eFJSufZHo3K_gb8 r7SFCQ&sa=X&oi=book_result&ct=result &resnum=9

[11] XMLRPC-EPI standalone C API for XML-RPC, dokument je dostupan na

adresi: http://xmlrpc-epi.sourceforge.net/

[12] XML-RPC za C i C++, dokument je dostupan na adresi: http://xmlrpc-

c.sourceforge.net/

42

Page 48: Izrada autentifikacijskog modula u Linux okruženjusigurnost.zemris.fer.hr/protokoli/2010_poljak/Diplomski.pdf · 2010. 9. 5. · 3.Infrastrktura i osnovne karakteristike Svrha Linux-PAM

[13] XML-RPC dokumentacija, dokument je dostupan na adresi: http://xmlrpc-

c.sourceforge.net/doc/

[14] XML-RPC web stranica, dokument je dostupan na adresi:

http://www.xmlrpc.com/

[15] FERweb team, Autentifikacija studenata i djelatnika putem web servisa na

www.fer.hr

[16] Name Services Overview, dokument je dostupan na adresi: http://hzfenghe.com/book/Solaris_admin/ch12lev1sec4.html

[17] System Databases and Name Service Switch, dokument je dostupan na adresi: http://www.linuxselfhelp.com/gnu/glibc/html_chapter/libc_28.html

43