Kako konfigurirati i koristiti PAM u Linuxu
Linux-PAM (skraćenica za Pluggable Authentication Modules koji se razvio iz Unix-PAM arhitekture) moćan je paket dijeljenih biblioteka koji se koristi za dinamičku autentifikaciju korisnika aplikacijama (ili uslugama) ) u Linux sustavu.
Integrira višestruke module provjere autentičnosti niske razine u API visoke razine koji pruža podršku dinamičke provjere autentičnosti za aplikacije. To programerima omogućuje pisanje aplikacija koje zahtijevaju autentifikaciju, neovisno o temeljnom sustavu autentifikacije.
Mnoge moderne distribucije Linuxa podržavaju Linux-PAM (u daljnjem tekstu “PAM”) prema zadanim postavkama. U ovom ćemo članku objasniti kako konfigurirati napredni PAM u sustavima Ubuntu i CentOS.
Prije nego što nastavimo dalje, imajte na umu sljedeće:
- Kao administratoru sustava, najvažnije je ovladati načinom na koji konfiguracijske datoteke PAM-a definiraju vezu između aplikacija (usluga) i priključnih autentifikacijskih modula (PAM-ova) koji obavljaju stvarne zadatke provjere autentičnosti. Ne morate nužno razumjeti interni rad PAM-a.
- PAM ima potencijal ozbiljno promijeniti sigurnost vašeg Linux sustava. Pogrešna konfiguracija može djelomično ili potpuno onemogućiti pristup vašem sustavu. Na primjer, slučajno brisanje konfiguracijske datoteke(a) pod /etc/pam.d/* i/ili /etc/pam.conf može vas zaključati iz vlastiti sustav!
Kako provjeriti je li program svjestan PAM-a
Za korištenje PAM-a, aplikacija/program mora biti “svjestan PAM-a“; mora biti napisan i kompajliran posebno za korištenje PAM-a. Da biste saznali je li program “PAM-svjestan” ili ne, provjerite je li kompiliran s PAM bibliotekom pomoću ldd naredbe.
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
Glavna konfiguracijska datoteka za PAM je /etc/pam.conf, a direktorij /etc/pam.d/ sadrži PAM konfiguracijske datoteke za svaku PAM-svjesnu aplikaciju/uslugu. PAM će zanemariti datoteku ako direktorij postoji.
Sintaksa glavne konfiguracijske datoteke je sljedeća. Datoteka se sastoji od popisa pravila napisanih u jednom retku (možete proširiti pravila pomoću znaka za izlaz “\ ”
), a komentarima prethodi “# ”
oznake i produžite do sljedećeg kraja retka.
Format svakog pravila je skup tokena odvojenih razmakom (prva tri ne razlikuju 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/sučelje.
- control-flag: označava ponašanje PAM-API-ja ako modul ne uspije u svom zadatku provjere autentičnosti.
- modul: apsolutni naziv datoteke ili relativni naziv putanje PAM-a.
- argumenti-modula: razmakom odvojen popis tokena za kontrolu ponašanja modula.
Sintaksa svake datoteke u /etc/pam.d/ slična je sintaksi glavne datoteke i sastoji se od redaka sljedećeg oblika:
type control-flag module module-arguments
Ovo je primjer definicije pravila (bez argumenata modula) pronađene u /etc/pam.d/sshd datoteci, koja onemogućuje nekorijenske prijave kada /etc/nologin postoji:
account required pam_nologin.so
Razumijevanje PAM grupa za upravljanje i kontrolnih zastavica
PAM zadaci provjere autentičnosti podijeljeni su u četiri neovisne grupe za upravljanje. Ove grupe upravljaju različitim aspektima tipičnog korisničkog zahtjeva za ograničenu uslugu.
Modul je pridružen jednoj od ovih vrsta grupa za upravljanje:
- račun: pružiti usluge za provjeru računa: je li korisnička lozinka istekla?; je li ovom korisniku dopušten pristup traženoj usluzi?.
- Autentifikacija: autentificirajte korisnika i postavite korisničke vjerodajnice.
- lozinka: odgovorni su za ažuriranje korisničkih zaporki i rade zajedno s modulima za provjeru autentičnosti.
- sesija: upravlja radnjama koje se izvode na početku i na kraju sesije.
PAM objektne datoteke (moduli) koje se mogu učitavati moraju se nalaziti u sljedećem direktoriju: /lib/security/ ili /lib64/security ovisno o arhitektura.
Podržane kontrolne zastavice su:
- potrebno: kvar trenutno vraća kontrolu aplikaciji ukazujući na prirodu kvara prvog modula.
- obavezno: svi ovi moduli su potrebni za uspjeh kako 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).
- izborno: uspjeh ili neuspjeh ovog modula općenito se ne bilježi.
Uz gore navedene ključne riječi, postoje još dvije važeće kontrolne zastavice:
- uključi i podskup: uključi sve retke zadane vrste iz konfiguracijske datoteke navedene kao argument ove kontrole.
Kako ograničiti root pristup SSH usluzi putem PAM-a
Kao primjer, konfigurirat ćemo kako koristiti PAM za onemogućavanje root korisničkog pristupa sustavu putem SSH-a i programa za prijavu. Ovdje želimo onemogućiti root korisnički pristup sustavu ograničavanjem pristupa uslugama prijave i sshd.
Možemo koristiti modul /lib/security/pam_listfile.so koji nudi veliku fleksibilnost u ograničavanju privilegija određenih računa. 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 obje datoteke.
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 oznaka 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 dopuštanje usluga na temelju proizvoljne datoteke.
- onerr=succeed: argument modula.
- item=user: argument modula koji navodi što je navedeno u datoteci i što treba provjeriti.
- sense=deny: argument modula koji navodi akciju koju treba poduzeti ako se pronađe u datoteci, ako stavka NIJE pronađena u datoteci, tada se traži suprotna radnja.
- file=/etc/ssh/deniedusers: argument modula koji specificira datoteku koja sadrži jednu stavku po retku.
Zatim moramo kreirati datoteku /etc/ssh/deniedusers i dodati joj naziv root:
sudo vim /etc/ssh/deniedusers
Spremite promjene i zatvorite datoteku, a zatim postavite potrebna dopuštenja za nju:
sudo chmod 600 /etc/ssh/deniedusers
Od sada će gore navedeno pravilo reći PAM-u da pregleda datoteku /etc/ssh/deniedusers i zabrani pristup SSH-u i uslugama prijave za sve navedene korisnike.
Kako konfigurirati napredni PAM u Linuxu
Za pisanje složenijih PAM pravila, možete koristiti važeće kontrolne zastavice 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 linija definirana. Podržane vrijednosti možete pronaći u on-line PAM administratorskom vodiču. Posebna vrijednost je zadana, što podrazumijeva sve vrijednostiN koje nisu eksplicitno navedene.
RadnjaN može imati jedan od sljedećih oblika:
- ignoriraj: ako se ova radnja koristi sa hrpom modula, status povrata modula neće pridonijeti povratnom kodu koji aplikacija dobiva.
- loše: označava da povratni kod treba smatrati pokazateljem kvara modula. Ako je ovaj modul prvi u nizu koji je pokvario, njegova vrijednost statusa koristit će se za vrijednost cijelog niza.
- die: ekvivalent lošem, ali može prekinuti hrpu modula i PAM se odmah vraća u aplikaciju.
- ok: ovo upućuje PAM da administrator sustava misli da bi ovaj povratni kod trebao izravno doprinijeti povratnom kodu cijelog niza modula.
- gotovo: ekvivalentno u redu, ali može prekinuti hrpu modula i PAM se odmah vraća u aplikaciju.
- N (cijeli broj bez predznaka): ekvivalentno ok, ali može preskočiti sljedećih N modula u nizu.
- Poništi: ova radnja briše svu memoriju stanja hrpe modula i ponovno pokreće sa sljedećim naslaganim modulom.
Svaka od četiri ključne riječi: obavezno; potreban; dovoljan; i izborno, imaju ekvivalentni izraz u terminima [...]
sintakse, koji vam omogućuju pisanje kompliciranijih pravila, a to su:
- obavezno: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
- zahtjev: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
- dovoljno: [success=done new_authtok_reqd=done default=ignore]
- izborno: [success=ok new_authtok_reqd=ok default=ignore]
Slijedi primjer iz modernog sustava CentOS 7. 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 man stranicu pam.d:
man pam.d
Na kraju, opsežan opis sintakse konfiguracijske datoteke i svih PAM modula može se pronaći u dokumentaciji za Linux-PAM.
Sažetak
PAM je moćan API visoke razine koji programima koji se oslanjaju na autentifikaciju autentičnih korisnika omogućuje aplikacijama u sustavu Linux. Moćan je, ali vrlo zahtjevan za razumijevanje i korištenje.
U ovom smo članku objasnili kako konfigurirati napredne značajke PAM-a u Ubuntuu i CentOS-u. Ako imate pitanja ili komentara koje želite podijeliti, upotrijebite obrazac za povratne informacije u nastavku.