Kaip sukonfigūruoti ir naudoti PAM sistemoje „Linux“.


Linux-PAM (sutrumpintai Pluggable Authentication Modules, kurie išsivystė iš Unix-PAM architektūros) yra galingas bendrinamų bibliotekų rinkinys, naudojamas dinamiškai autentifikuoti vartotoją programose (arba paslaugose). ) Linux sistemoje.

Ji integruoja kelis žemo lygio autentifikavimo modulius į aukšto lygio API, kuri teikia programų dinaminio autentifikavimo palaikymą. Tai leidžia kūrėjams rašyti programas, kurioms reikalingas autentifikavimas, nepriklausomai nuo pagrindinės autentifikavimo sistemos.

Daugelis šiuolaikinių Linux platinimų pagal numatytuosius nustatymus palaiko Linux-PAM (toliau – PAM). Šiame straipsnyje paaiškinsime, kaip sukonfigūruoti išplėstinį PAM Ubuntu ir CentOS sistemose.

Prieš tęsdami toliau, atkreipkite dėmesį, kad:

  • Kaip sistemos administratoriui, svarbiausia žinoti, kaip PAM konfigūracijos failas (-iai) apibrėžia ryšį tarp taikomųjų programų (paslaugų) ir prijungiamų autentifikavimo modulių (PAM), kurie atlieka tikras autentifikavimo užduotis. Jūs nebūtinai turite suprasti vidinį PAM veikimą.
  • PAM gali rimtai pakeisti jūsų Linux sistemos saugumą. Klaidinga konfigūracija gali iš dalies arba visiškai išjungti prieigą prie jūsų sistemos. Pavyzdžiui, netyčia ištrynus konfigūracijos failą (-us), esantį (-us) /etc/pam.d/* ir (arba) /etc/pam.conf, galite užblokuoti savo sistema!

Kaip patikrinti programą, žino PAM

Norint naudoti PAM, programa/programa turi būti PAM žinota; jis turi būti specialiai parašytas ir sudarytas, kad būtų galima naudoti PAM. Jei norite sužinoti, ar programa yra „PAM žinanti“, ar ne, patikrinkite, ar ji buvo sudaryta naudojant PAM biblioteką, naudodami komandą ldd.

Pavyzdžiui, sshd:

sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Kaip sukonfigūruoti PAM sistemoje „Linux“.

Pagrindinis PAM konfigūracijos failas yra /etc/pam.conf, o kataloge /etc/pam.d/ yra PAM konfigūracijos failai, skirti kiekviena PAM žinanti programa/paslauga. PAM nepaisys failo, jei katalogas egzistuoja.

Pagrindinės konfigūracijos failo sintaksė yra tokia. Failas sudarytas iš taisyklių sąrašo, parašytų vienoje eilutėje (galite išplėsti taisykles naudodami pabėgimo simbolį “\ ”), o prieš komentarus rašoma „# ” ženklus ir tęskite iki kito eilutės galo.

Kiekvienos taisyklės formatas yra tarpais atskirtas žetonų rinkinys (pirmuose trijuose didžiosios ir mažosios raidės neskiriamos). Mes paaiškinsime šiuos žetonus tolesniuose skyriuose.

service type control-flag module module-arguments 

kur:

  • paslauga: tikrasis programos pavadinimas.
  • tipas: modulio tipas/kontekstas/sąsaja.
  • Control-flag: nurodo PAM-API elgesį, jei moduliui nepavyktų atlikti autentifikavimo užduoties.
  • modulis: absoliutus PAM failo pavadinimas arba santykinis kelio pavadinimas.
  • Modulis-argumentai: tarpais atskirtas žetonų, skirtų modulio elgesiui valdyti, sąrašas.

Kiekvieno failo, esančio /etc/pam.d/, sintaksė yra panaši į pagrindinio failo sintaksę ir yra sudaryta iš šios formos eilučių:

type control-flag module module-arguments

Tai taisyklės apibrėžimo (be modulio argumentų), esančios /etc/pam.d/sshd faile, pavyzdys, kuris neleidžia ne root prisijungimo, kai /etc/nologin . egzistuoja:

account required pam_nologin.so

PAM valdymo grupių ir kontrolinių vėliavėlių supratimas

PAM autentifikavimo užduotys yra suskirstytos į keturias nepriklausomas valdymo grupes. Šios grupės tvarko skirtingus tipinio vartotojo užklausos dėl ribotos paslaugos aspektus.

Modulis susietas su vienu iš šių valdymo grupių tipų:

  • paskyra: teikti paskyros patvirtinimo paslaugas: ar pasibaigė vartotojo slaptažodžio galiojimo laikas? ar šiam vartotojui leidžiama prieiti prie prašomos paslaugos?
  • autentifikavimas: autentifikuokite vartotoją ir nustatykite vartotojo kredencialus.
  • slaptažodis: yra atsakingi už vartotojų slaptažodžių atnaujinimą ir dirba kartu su autentifikavimo moduliais.
  • sesija: tvarkykite veiksmus, atliekamus seanso pradžioje ir pabaigoje.

PAM įkeliami objektų failai (moduliai) turi būti šiame kataloge: /lib/security/ arba /lib64/security, atsižvelgiant į architektūra.

Palaikomos valdymo žymos:

  • būtina: gedimas iš karto grąžina programos valdymą, nurodant pirmojo modulio gedimo pobūdį.
  • būtina: visi šie moduliai reikalingi, kad libpam sėkmingai veiktų.
  • pakankamai: atsižvelgiant į tai, kad visi ankstesni moduliai buvo sėkmingi, šio modulio sėkmė lemia greitą ir sėkmingą programos grįžimą (šio modulio gedimas ignoruojamas).
  • neprivaloma: šio modulio sėkmė ar nesėkmė paprastai neįrašoma.

Be aukščiau pateiktų raktinių žodžių, yra dar dvi galiojančios valdymo vėliavėlės:

  • įtraukti ir sudėti į krūvą: įtraukite visas nurodyto tipo eilutes iš konfigūracijos failo, nurodyto kaip šio valdiklio argumentas.

Kaip apriboti root prieigą prie SSH paslaugos per PAM

Pavyzdžiui, sukonfigūruosime, kaip naudoti PAM, kad išjungtume pagrindinio vartotojo prieigą prie sistemos per SSH ir prisijungimo programas. Čia norime išjungti pagrindinio vartotojo prieigą prie sistemos, apribodami prieigą prie prisijungimo ir sshd paslaugų.

Galime naudoti /lib/security/pam_listfile.so modulį, kuris siūlo didelį lankstumą apribojant konkrečių paskyrų privilegijas. Atidarykite ir redaguokite tikslinės paslaugos failą /etc/pam.d/ kataloge, kaip parodyta.

sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login

Pridėkite šią taisyklę abiejuose failuose.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

Aukščiau pateiktos taisyklės žetonų paaiškinimas:

  • auth: yra modulio tipas (arba kontekstas).
  • būtina: yra valdymo žyma, reiškianti, kad jei modulis naudojamas, jis turi praeiti arba bendras rezultatas bus nesėkmingas, neatsižvelgiant į kitų modulių būseną.
  • pam_listfile.so: yra modulis, suteikiantis būdą uždrausti arba leisti paslaugas pagal savavališką failą.
  • onerr=succeed: modulio argumentas.
  • item=user: modulio argumentas, nurodantis, kas nurodyta faile ir turi būti patikrinta.
  • sense=deny: modulio argumentas, nurodantis veiksmą, kurio reikia imtis, jei jis rastas faile. Jei elementas NĖRA rastas faile, prašoma atlikti priešingą veiksmą.
  • file=/etc/ssh/deniedusers: modulio argumentas, nurodantis failą, kurio eilutėje yra vienas elementas.

Tada turime sukurti failą /etc/ssh/deniedusers ir pridėti jame pavadinimą root:

sudo vim /etc/ssh/deniedusers

Išsaugokite pakeitimus ir uždarykite failą, tada nustatykite reikiamus leidimus:

sudo chmod 600 /etc/ssh/deniedusers

Nuo šiol aukščiau nurodyta taisyklė nurodys PAM peržiūrėti failą /etc/ssh/deniedusers ir uždrausti bet kuriam sąraše esančiam naudotojui prieigą prie SSH ir prisijungimo paslaugų.

Kaip sukonfigūruoti išplėstinį PAM sistemoje „Linux“.

Norėdami parašyti sudėtingesnes PAM taisykles, galite naudoti galiojančias valdymo vėliavėles tokia forma:

type [value1=action1 value2=action2 …] module module-arguments

Kur reikšmėN atitinka grąžinimo kodą iš funkcijos, iškviestos modulyje, kuriam nustatyta eilutė. Palaikomas vertes galite rasti internetiniame PAM administratoriaus vadove. Speciali reikšmė yra numatytoji, o tai reiškia, kad visos vertėsN nėra aiškiai nurodytos.

VeiksmasN gali būti viena iš šių formų:

  • Ignoruoti: jei šis veiksmas naudojamas su krūva modulių, modulio grąžinimo būsena neprisidės prie programos gaunamo grąžinimo kodo.
  • blogas: nurodo, kad grąžinimo kodas turėtų būti laikomas modulio gedimo požymiu. Jei šis modulis pirmasis sugenda, jo būsenos reikšmė bus naudojama viso krūvos būsenai.
  • mirti: atitinka blogą, bet gali nutraukti modulių krūvą ir PAM nedelsiant grįžti į programą.
  • Gerai: tai nurodo PAM, kad sistemos administratorius mano, kad šis grąžinimo kodas turi būti tiesiogiai susijęs su visos modulių krūvos grąžinimo kodu.
  • Atlikta: atitinka gerai, bet gali nutraukti modulių dėklą ir PAM iš karto grįžti į programą.
  • N (nežymėtas sveikasis skaičius): atitinka gerai, bet gali peršokti kitus N modulius krūvoje.
  • Nustatyti iš naujo: šis veiksmas išvalo visą modulių krūvos būsenos atmintį ir paleidžiama iš naujo su kitu sukrautu moduliu.

Kiekvienas iš keturių raktinių žodžių: būtinas; būtinas; pakankamai; ir neprivaloma, turi lygiavertę išraišką [...] sintaksės požiūriu, leidžiančią rašyti sudėtingesnes taisykles ir jos yra:

  • būtina: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • rekvizitai: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • pakankama: [success=done new_authtok_reqd=done default=ignore]
  • neprivaloma: [success=ok new_authtok_reqd=ok default=ignorre]

Toliau pateikiamas pavyzdys iš modernios CentOS 7 sistemos. Panagrinėkime šias taisykles iš /etc/pam.d/postlogin PAM failo:

#%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

Štai dar vienas konfigūracijos pavyzdys iš /etc/pam.d/smartcard-auth PAM failo:

#%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

Daugiau informacijos rasite pam.d vadovo puslapyje:

man pam.d 

Galiausiai išsamų konfigūracijos failo sintaksės ir visų PAM modulių aprašymą galima rasti Linux-PAM dokumentacijoje.

Santrauka

PAM yra galinga aukšto lygio API, leidžianti autentifikuoti autentiškus vartotojus programoms, kurios remiasi „Linux“ sistemos programomis. Tai galinga, bet labai sudėtinga suprasti ir naudoti.

Šiame straipsnyje paaiškinome, kaip sukonfigūruoti išplėstines PAM funkcijas Ubuntu ir CentOS. Jei turite klausimų ar komentarų, kuriais norite pasidalinti, naudokite toliau pateiktą atsiliepimų formą.