Kako konfigurirati i koristiti PAM u Linuxu
Linux-PAM (skraćenica od Pluggable Authentication Modules koji je evoluirao iz Unix-PAM arhitekture) je moćan paket dijeljenih biblioteka koje se koriste za dinamičku autentifikaciju korisnika za aplikacije (ili usluge ) u Linux sistemu.
Integrira više modula za autentifikaciju niske razine u API visokog nivoa koji pruža podršku za dinamičku autentifikaciju za aplikacije. Ovo omogućava programerima da pišu aplikacije koje zahtijevaju autentifikaciju, neovisno o osnovnom sistemu provjere autentičnosti.
Mnoge moderne Linux distribucije podrazumevano podržavaju Linux-PAM (u daljem tekstu “PAM ”). U ovom članku ćemo objasniti kako konfigurirati napredni PAM u Ubuntu i CentOS sistemima.
Prije nego što nastavimo dalje, imajte na umu sljedeće:
- Kao sistem administratoru, najvažnije je da savladate kako PAM konfiguracioni fajl(e) definišu vezu između aplikacija (usluga) i modula za proveru autentičnosti koji se mogu priključiti (PAM) koji obavljaju stvarne zadatke autentifikacije. Ne morate nužno razumjeti interni rad PAM-a.
- PAM ima potencijal da ozbiljno promijeni sigurnost vašeg Linux sistema. Pogrešna konfiguracija može onemogućiti pristup vašem sistemu djelomično ili potpuno. Na primjer, slučajno brisanje konfiguracijskih datoteka pod /etc/pam.d/* i/ili /etc/pam.conf može vas zaključati sopstveni sistem!
Kako provjeriti je li program svjestan PAM-a
Za korištenje PAM-a, aplikacija/program mora biti “PAM svjesna“; mora biti napisan i kompajliran posebno za korištenje PAM-a. Da biste saznali da li je program “PAM-svjestan ” ili ne, provjerite da li je kompajliran sa PAM bibliotekom koristeći ldd komandu.
Na primjer sshd:
sudo ldd /usr/sbin/sshd | grep libpam.so
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)
Kako konfigurirati PAM u Linuxu
Glavni konfiguracijski fajl za PAM je /etc/pam.conf, a /etc/pam.d/ direktorij sadrži PAM konfiguracijske datoteke za svaka PAM aplikacija/usluga. PAM će zanemariti datoteku ako direktorij postoji.
Sintaksa za glavnu konfiguracionu datoteku je sljedeća. Datoteka se sastoji od liste pravila napisanih u jednom redu (pravila možete proširiti koristeći “\ ”
escape karakter) a komentarima prethodi “# ”
oznake i produžiti do sljedećeg kraja reda.
Format svakog pravila je kolekcija tokena odvojena razmakom (prva tri su neosjetljiva na velika i mala slova). Objasnit ćemo ove tokene u sljedećim odjeljcima.
service type control-flag module module-arguments
gdje:
- usluga: stvarni naziv aplikacije.
- tip: tip modula/kontekst/interfejs.
- control-flag: označava ponašanje PAM-API-a u slučaju da modul ne uspije u svom zadatku provjere autentičnosti.
- modul: apsolutno ime datoteke ili relativna putanja PAM-a.
- argumenti modula: razmakom odvojena lista tokena za kontrolu ponašanja modula.
Sintaksa svake datoteke u /etc/pam.d/ je slična onoj glavnog fajla i sastoji se od redova sljedećeg oblika:
type control-flag module module-arguments
Ovo je primjer definicije pravila (bez argumenata modula) pronađene u datoteci /etc/pam.d/sshd, koja onemogućuje ne-root prijave kada je /etc/nologin postoji:
account required pam_nologin.so
Razumijevanje PAM upravljačkih grupa i kontrolnih zastavica
Zadaci provjere autentičnosti PAM podijeljeni su u četiri nezavisne grupe upravljanja. Ove grupe upravljaju različitim aspektima zahtjeva tipičnog korisnika za ograničenom uslugom.
Modul je pridružen jednom od ovih tipova upravljačke grupe:
- račun: pružanje usluga za provjeru računa: je li korisnička lozinka istekla?; da li je ovom korisniku dozvoljen pristup traženoj usluzi?.
- autentifikacija: autentifikujte korisnika i postavite korisničke vjerodajnice.
- lozinka: odgovorni su za ažuriranje korisničkih lozinki i rade zajedno s modulima za autentifikaciju.
- session: upravljajte radnjama koje se izvode na početku sesije i na kraju sesije.
PAM objektne datoteke (moduli) koje se mogu učitati trebaju se nalaziti u sljedećem direktoriju: /lib/security/ ili /lib64/security u zavisnosti od arhitektura.
Podržane kontrolne zastavice su:
- potreban: kvar trenutno vraća kontrolu aplikaciji ukazujući na prirodu prvog kvara modula.
- obavezno: svi ovi moduli su potrebni da bi uspjeli da bi libpam vratio uspjeh aplikaciji.
- dovoljno: s obzirom na to da su svi prethodni moduli uspjeli, uspjeh ovog modula dovodi do trenutnog i uspješnog povratka u aplikaciju (neuspjeh ovog modula se zanemaruje).
- opciono: uspjeh ili neuspjeh ovog modula se općenito ne bilježi.
Pored gore navedenih ključnih riječi, postoje još dvije važeće kontrolne zastavice:
- uključi i podstack: uključi sve linije datog tipa iz konfiguracijske datoteke navedene kao argument za ovu kontrolu.
Kako ograničiti root pristup SSH servisu preko PAM-a
Kao primjer, konfigurirat ćemo kako koristiti PAM za onemogućavanje pristupa root korisnika sistemu preko SSH i programa za prijavu. Ovdje želimo onemogućiti pristup root korisnika sistemu, ograničavajući pristup login i sshd uslugama.
Možemo koristiti /lib/security/pam_listfile.so modul koji nudi veliku fleksibilnost u ograničavanju privilegija određenih naloga. Otvorite i uredite datoteku za ciljnu uslugu u direktoriju /etc/pam.d/ kao što je prikazano.
sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login
Dodajte ovo pravilo u oba fajla.
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
Objašnjavanje tokena u gornjem pravilu:
- auth: je tip modula (ili kontekst).
- obavezno: je kontrolna zastavica koja znači da ako se modul koristi, mora proći ili će ukupni rezultat biti neuspješan, bez obzira na status drugih modula.
- pam_listfile.so: je modul koji pruža način za odbijanje ili dozvoljavanje usluga na osnovu proizvoljnog fajla.
- onerr=uspjeh: argument modula.
- item=user: argument modula koji specificira šta je navedeno u datoteci i što treba provjeriti.
- sense=deny: argument modula koji specificira radnju koju treba poduzeti ako se pronađe u datoteci, ako stavka NIJE pronađena u datoteci, tada se traži suprotna akcija.
- file=/etc/ssh/deniedusers: argument modula koji specificira datoteku koja sadrži jednu stavku po redu.
Zatim moramo kreirati datoteku /etc/ssh/deniedusers i dodati ime root u nju:
sudo vim /etc/ssh/deniedusers
Sačuvajte promjene i zatvorite datoteku, a zatim postavite potrebne dozvole za nju:
sudo chmod 600 /etc/ssh/deniedusers
Od sada, gore navedeno pravilo će reći PAM-u da konsultuje datoteku /etc/ssh/deniedusers i odbije pristup SSH-u i uslugama prijavljivanja za svakog navedenog korisnika.
Kako konfigurirati napredni PAM u Linuxu
Za pisanje složenijih PAM pravila, možete koristiti važeće control-flags u sljedećem obliku:
type [value1=action1 value2=action2 …] module module-arguments
Gdje valueN odgovara povratnom kodu iz funkcije pozvane u modulu za koji je definirana linija. Podržane vrijednosti možete pronaći u on-line PAM Administratorskom vodiču. Posebna vrijednost je zadana, što podrazumijeva da sve vrijednostiN nisu eksplicitno spomenute.
radnjaN može imati jedan od sljedećih oblika:
- ignoriraj: ako se ova radnja koristi sa hrpom modula, status povratka modula neće doprinijeti povratnom kodu koji aplikacija dobije.
- loše: označava da se povratni kod treba smatrati pokazateljem neispravnosti modula. Ako je ovaj modul prvi u steku koji nije uspio, njegova statusna vrijednost će se koristiti za onu cijelog steka.
- die: ekvivalentno lošem, ali može prekinuti stek modula i PAM odmah vraćajući se aplikaciji.
- ok: ovo upućuje PAM-u da administrator sistema misli da bi ovaj povratni kod trebao direktno doprinijeti povratnom kodu punog hrpa modula.
- gotovo: ekvivalentno ok, ali može prekinuti stek modula i PAM se odmah vratiti u aplikaciju.
- N (neoznačeni cijeli broj): ekvivalentno ok, ali može preskočiti sljedećih N modula u stogu.
- Reset: ova radnja briše svu memoriju o stanju steka modula i ponovo pokreće sa sljedećim naslaganim modulom.
Svaka od četiri ključne riječi: obavezno; requisite; dovoljan; i opciono, imaju ekvivalentan izraz u smislu [...]
sintakse, koja vam omogućava da pišete komplikovanija pravila, a ona su:
- obavezno: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
- uvjet: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
- dovoljno: [success=done new_authtok_reqd=done default=ignore]
- opcionalno: [success=ok new_authtok_reqd=ok default=ignore]
Slijedi primjer iz modernog CentOS 7 sistema. Razmotrimo ova pravila iz /etc/pam.d/postlogin PAM datoteke:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session [default=1] pam_lastlog.so nowtmp showfailed
session optional pam_lastlog.so silent noupdate showfailed
Evo još jednog primjera konfiguracije iz /etc/pam.d/smartcard-auth PAM datoteke:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password required pam_pkcs11.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
Za više informacija pogledajte pam.d man stranicu:
man pam.d
Na kraju, sveobuhvatan opis sintakse konfiguracijske datoteke i svih PAM modula može se naći u dokumentaciji za Linux-PAM.
Sažetak
PAM je moćan API visokog nivoa koji omogućava programima koji se oslanjaju na autentifikaciju autentičnih korisnika do aplikacija u Linux sistemu. Snažan je, ali vrlo izazovan za razumijevanje i korištenje.
U ovom članku smo objasnili kako konfigurirati napredne funkcije PAM-a u Ubuntu i CentOS-u. Ako imate bilo kakvih pitanja ili komentara koje želite podijeliti, koristite obrazac za povratne informacije u nastavku.