Kako konfigurirati in uporabljati PAM v Linuxu


Linux-PAM (okrajšava za Pluggable Authentication Modules, ki se je razvil iz arhitekture Unix-PAM) je zmogljiv nabor knjižnic v skupni rabi, ki se uporabljajo za dinamično preverjanje pristnosti uporabnika v aplikacijah (ali storitvah) v sistemu Linux.

Vključuje več modulov za preverjanje pristnosti na nizki ravni v API na visoki ravni, ki aplikacijam podpira podporo za dinamično preverjanje pristnosti. To razvijalcem omogoča pisanje aplikacij, ki zahtevajo preverjanje pristnosti, neodvisno od osnovnega sistema za preverjanje pristnosti.

Številne sodobne distribucije Linuxa privzeto podpirajo Linux-PAM (v nadaljevanju\"PAM"). V tem članku bomo razložili, kako konfigurirati napredne PAM v sistemih Ubuntu in CentOS.

Preden nadaljujemo, upoštevajte:

  • Kot sistemski skrbnik je najpomembnejše obvladati, kako konfiguracijske datoteke PAM definirajo povezavo med aplikacijami (storitvami) in moduli za preverjanje pristnosti (PAM), ki jih je mogoče priključiti, ki izvajajo dejanske naloge preverjanja pristnosti. Ni nujno, da razumete notranje delovanje sistema PAM.
  • PAM lahko resno spremeni varnost vašega sistema Linux. Napačna konfiguracija lahko delno ali v celoti onemogoči dostop do vašega sistema. Na primer, nenamerno brisanje konfiguracijskih datotek v /etc/pam.d/* in/ali /etc/pam.conf vas lahko blokira iz vašega sistema!

Kako preveriti program, se zaveda sistema PAM

Za zaposlitev PAM mora biti aplikacija/program "seznanjen s PAM"; za uporabo PAM mora biti napisan in sestavljen posebej. Če želite izvedeti, ali je program\"zavesten PAM" ali ne, preverite, ali je bil z ukazom ldd preveden v knjižnico PAM.

Na primer sshd:

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

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

Kako konfigurirati PAM v Linuxu

Glavna konfiguracijska datoteka za PAM je /etc/pam.conf, imenik /etc/pam.d/ pa vsebuje konfiguracijske datoteke PAM za vsako aplikacijo/storitve, ki se zavedajo PAM. PAM bo prezrl datoteko, če imenik obstaja.

Sintaksa glavne konfiguracijske datoteke je naslednja. Datoteka je sestavljena iz seznama pravil, napisanih v eni vrstici (pravila lahko razširite z \"\" znakom za izhod v sili), pred komentarji pa \"#" oznake in se razširi na naslednji konec vrstice.

Oblika vsakega pravila je zbirka žetonov, ločena s presledkom (prva tri ne razlikujejo med velikimi in malimi črkami). Te žetone bomo razložili v naslednjih razdelkih.

service type control-flag module module-arguments 

kje:

  • storitev: dejansko ime aplikacije.
  • tip: tip modula/kontekst/vmesnik.
  • control-flag: označuje vedenje API-ja PAM, če modul ne uspe pri nalogi preverjanja pristnosti.
  • modul: absolutno ime datoteke ali relativno ime poti PAM.
  • modul-argumenti: s presledkom ločen seznam žetonov za nadzor vedenja modula.

Sintaksa vsake datoteke v /etc/pam.d/ je podobna glavni datoteki in je sestavljena iz vrstic naslednje oblike:

type control-flag module module-arguments

To je primer definicije pravila (brez argumentov modula), ki jo najdemo v datoteki /etc/pam.d/sshd, ki onemogoča prijave brez korenskega uporabnika, kadar obstaja/etc/nologin:

account required pam_nologin.so

Razumevanje skupin za upravljanje PAM in kontrolnih zastavic

Naloge preverjanja pristnosti PAM so razdeljene v štiri neodvisne upravljavske skupine. Te skupine upravljajo različne vidike zahteve tipičnega uporabnika za omejeno storitev.

Modul je povezan z eno od teh vrst upravljalnih skupin:

  • račun: zagotavljanje storitev za preverjanje računa: ali je uporabniško geslo poteklo ?; ali je temu uporabniku dovoljen dostop do zahtevane storitve ?.
  • preverjanje pristnosti: overite uporabnika in nastavite poverilnice uporabnika.
  • geslo: so odgovorni za posodabljanje uporabniških gesel in delujejo skupaj z moduli za preverjanje pristnosti.
  • seja: upravljajte dejanja, izvedena na začetku seje in na koncu seje.

Objektne datoteke (moduli), ki jih je mogoče naložiti PAM, se nahajajo v naslednjem imeniku:/lib/security/ali/lib64/security, odvisno od arhitekture.

Podprte kontrolne zastavice so:

  • pogoj: napaka takoj vrne nadzor aplikaciji, ki označuje naravo napake prvega modula.
  • potrebno: vsi ti moduli so potrebni za uspeh, da libpam vrne uspeh v aplikacijo.
  • zadostno: glede na to, da so bili vsi prejšnji moduli uspešni, uspeh tega modula vodi v takojšnjo in uspešno vrnitev v aplikacijo (okvara tega modula se prezre).
  • neobvezno: uspeh ali napaka tega modula se običajno ne beleži.

Poleg zgoraj navedenih ključnih besed obstajata še dve veljavni kontrolni zastavici:

  • include: vključi vse vrstice dane vrste iz konfiguracijske datoteke, podane kot argument tega kontrolnika.
  • podnož: vključi vse vrstice te vrste iz konfiguracijske datoteke, podane kot argument tega kontrolnika.

Kako omejiti korenski dostop do storitve SSH prek PAM

Na primer, konfigurirali bomo, kako z uporabo PAM onemogočiti root uporabnikom dostop do sistema prek SSH in prijavnih programov. Tukaj želimo onemogočiti dostop korenskega uporabnika do sistema z omejitvijo dostopa do storitev za prijavo in sshd.

Uporabljamo lahko modul /lib/security/pam_listfile.so, ki ponuja veliko prilagodljivosti pri omejevanju privilegijev določenih računov. Odprite in uredite datoteko za ciljno storitev v imeniku /etc/pam.d/, kot je prikazano.

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

To pravilo dodajte v obe datoteki.

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

Razlaga žetonov v zgornjem pravilu:

  • auth: je vrsta modula (ali kontekst).
  • zahtevana: je kontrolna zastavica, ki pomeni, da mora modul, če se uporablja, prenesti ali pa bo skupni rezultat neuspešen, ne glede na stanje drugih modulov.
  • pam_listfile.so: je modul, ki omogoča način zavrnitve ali dovoljenja storitev na podlagi poljubne datoteke.
  • onerr = uspelo: argument modula.
  • item = user: argument argumenta, ki določa, kaj je navedeno v datoteki in ga je treba preveriti.
  • sense = deny: argument modula, ki določa dejanje, ki ga je treba izvesti, če ga najdemo v datoteki, če elementa v datoteki NE najdemo, se zahteva nasprotno dejanje.
  • file =/etc/ssh/disabledusers: argument modula, ki določa datoteko, ki vsebuje en element na vrstico.

Nato moramo ustvariti datoteko/etc/ssh/disabledusers in vanjo dodati korenski naslov:

$ sudo vim /etc/ssh/deniedusers

Shranite spremembe in zaprite datoteko ter ji nastavite potrebna dovoljenja:

$ sudo chmod 600 /etc/ssh/deniedusers

Od zdaj naprej bo zgornje pravilo povedalo PAM -u, naj poišče datoteko/etc/ssh /yedusers in vsakemu uporabniku, ki je na seznamu, onemogoči dostop do SSH in prijavnih storitev.

Kako konfigurirati napredni PAM v Linuxu

Če želite napisati bolj zapletena pravila PAM, lahko uporabite veljavne kontrolne zastavice v naslednji obliki:

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

Kjer vrednost N ustreza vrnjeni kodi iz funkcije, poklicane v modulu, za katerega je vrstica definirana. Podprte vrednosti najdete v spletnem priročniku za skrbnike PAM. Posebna vrednost je privzeta, kar pomeni, da vse vrednostiN niso izrecno omenjene.

DejanjeN ima lahko eno od naslednjih oblik:

  • prezreti: če se to dejanje uporablja s svežnjem modulov, stanje vračanja modula ne bo prispevalo k vrnilni kodi, ki jo pridobi aplikacija.
  • slabo: označuje, da je treba vrnilno kodo razumeti kot znak napake modula. Če ta modul prvi v nizu ne uspe, bo njegova vrednost stanja uporabljena za vrednost celotnega sklada.
  • die: enakovredno slabemu, vendar lahko prekine sklad modulov in PAM se takoj vrne v aplikacijo.
  • ok: s tem PAM -u naroči, da skrbnik sistema meni, da bi morala ta povratna koda neposredno prispevati k vrnilni kodi celotnega sklada modulov.
  • končano: enakovredno v redu, vendar lahko prekine sklad modulov in PAM se takoj vrne v aplikacijo.
  • N (nepodpisano celo število): enakovredno ok, vendar lahko preskoči naslednjih N modulov v nizu.
  • Ponastavi: to dejanje počisti ves pomnilnik stanja sklada modulov in znova zažene z naslednjim zloženim modulom.

Vsaka od štirih ključnih besed: obvezna; potrebno; zadostno; in izbirno, imajo enakovreden izraz v smislu sintakse [...] , ki vam omogoča pisanje bolj zapletenih pravil in so:

  • potrebno: [uspeh = ok new_authtok_reqd = ok ignoriraj = prezri privzeto = slabo]
  • zahtevek: [uspeh = ok new_authtok_reqd = ok ignoriraj = prezri privzeto = umri]
  • zadostno: [success = done new_authtok_reqd = done default = ignore]
  • neobvezno: [uspeh = ok new_authtok_reqd = ok privzeto = prezri]

Sledi primer sodobnega sistema CentOS 7. Upoštevajmo ta pravila iz datoteke PAM /etc/pam.d/postlogin:

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

Tu je še en primer konfiguracije iz datoteke PAM /etc/pam.d/smartcard-auth:

#%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 več informacij obiščite stran pam.d:

$ man pam.d 

Nazadnje je v dokumentaciji za Linux-PAM mogoče najti izčrpen opis sintakse konfiguracijske datoteke in vseh modulov PAM.

PAM je zmogljiv API na visoki ravni, ki programom, ki se zanašajo na preverjanje pristnosti, verodostojnim uporabnikom omogoča aplikacije v sistemu Linux. Je močan, vendar zelo zahteven za razumevanje in uporabo.

V tem članku smo razložili, kako konfigurirati napredne funkcije PAM v Ubuntu in CentOS. Če imate kakršna koli vprašanja ali pripombe, uporabite spodnji obrazec za povratne informacije.