Linux-da PAM-y nädip sazlamaly we ulanmaly


Linux-PAM (“Unix-PAM” arhitekturasyndan dörän “Pluggable Autentifikasiýa modullary üçin gysga”) Linux ulgamynda ulanyjylara (ýa-da hyzmatlara) dinamiki tassyklamak üçin ulanylýan umumy kitaphanalaryň toplumydyr.

Birnäçe pes derejeli tanamak modullaryny, programmalar üçin dinamiki tanamak goldawyny üpjün edýän ýokary derejeli API-e birleşdirýär. Bu, döredijilere esasy tanamak ulgamyndan garaşsyz, hakykylygyny talap edýän programmalary ýazmaga mümkinçilik berýär.

Häzirki zaman Linux paýlaýjylarynyň köpüsi Linux-PAM (mundan beýläk\PAM diýlip atlandyrylýar) goldaýar. Bu makalada Ubuntu we CentOS ulgamlarynda ösen PAM-y nädip sazlamalydygyny düşündireris.

Has öňe gitmezden ozal üns beriň:

  • Ulgam dolandyryjysy hökmünde iň esasy zat, PAM konfigurasiýa faýlynyň (programmalarynyň) amaly tassyklama meselelerini ýerine ýetirýän programmalar (hyzmatlar) bilen dakylýan tanamak modullarynyň (PAM) arasyndaky baglanyşygy nädip kesgitleýändigini öwrenmekdir. PAM-yň içerki işine düşünmek hökman däl.
  • PAM Linux ulgamyňyzyň howpsuzlygyny düýpli üýtgetmek mümkinçiligine eýe. .Alňyş konfigurasiýa ulgamyňyza girmegi bölekleýin ýa-da doly öçürip biler. Mysal üçin, /etc/pam.d/* we/ýa-da /etc/pam.conf aşagyndaky konfigurasiýa faýllarynyň (-larynyň) tötänleýin ýok edilmegi sizi öz ulgamyňyzdan gulplap biler!

Programmany nädip barlamaly PAM-dan habarly

PAM-ny ulanmak üçin bir programma/programma “PAM habarly” bolmaly; PAM-ny ulanmak üçin ýörite ýazylan we düzülen bolmaly. Bir programmanyň\PAM-dan habarlydygyny ýa-da ýokdugyny bilmek üçin, ldd buýrugyny ulanyp, PAM kitaphanasy bilen düzülendigini ýa-da ýokdugyny barlaň.

Mysal üçin sshd:

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

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

Linux-da PAM-y nädip sazlamaly

PAM üçin esasy konfigurasiýa faýly /etc/pam.conf we /etc/pam.d/ katalogynda her PAM-dan habarly programma/hyzmatlar üçin PAM konfigurasiýa faýllary bar. Katalog bar bolsa, PAM faýly äsgermezlik eder.

Esasy konfigurasiýa faýly üçin sintaksis aşakdaky ýaly. Faýl bir setirde ýazylan düzgünleriň sanawyndan durýar (\\ gaçmak nyşanyny ulanyp düzgünleri uzaldyp bilersiňiz) we teswirleriň öňünden \# bellikler we setiriň indiki ujuna çenli uzalýar.

Her düzgüniň formaty, boşluk bilen bölünen bellikleriň ýygyndysydyr (ilkinji üçüsi duýgur däl). Bu bellikleri indiki bölümlerde düşündireris.

service type control-flag module module-arguments 

nirede:

  • hyzmat: hakyky anketanyň ady.
  • görnüşi: modulyň görnüşi/kontekst/interfeýs.
  • control-flag: modul tassyklamak meselesinde üstünlik gazanyp bilmese, PAM-API-iň özüni alyp barşyny görkezýär.
  • modul: PAM-nyň mutlak ady ýa-da degişlilik ady.
  • modul-argumentler: modulyň özüni alyp barşyna gözegçilik etmek üçin boş ýerleriň sanawy.

/Etc/pam.d/ sahypasyndaky her faýlyň sintaksis esasy faýlyňky ýaly bolup, aşakdaky görnüşdäki setirlerden durýar:

type control-flag module module-arguments

Bu, /etc/pam.d/sshd faýlynda tapylan düzgün kesgitlemesiniň mysaly (/ etc/nologin bar wagty kök däl girişleri gadagan edýär:

account required pam_nologin.so

PAM Dolandyryş Toparlaryna we Dolandyryş baýdaklaryna düşünmek

PAM tanamak wezipeleri dört garaşsyz dolandyryş toparyna bölünýär. Bu toparlar adaty ulanyjynyň çäklendirilen hyzmat isleginiň dürli taraplaryny dolandyrýarlar.

Modul bu dolandyryş toparlarynyň biri bilen baglanyşykly:

  • hasap: hasaby barlamak üçin hyzmatlar beriň: ulanyjynyň paroly gutardymy?; bu ulanyja talap edilýän hyzmata girmäge rugsat berilýärmi?
  • tanamaklyk: ulanyjyny tassyklamak we ulanyjy şahsyýetnamalaryny düzmek.
  • parol: ulanyjy parollaryny täzelemek we tanamak modullary bilen bilelikde işlemek üçin jogapkärdir.
  • sessiýa: sessiýanyň başynda we sessiýanyň ahyrynda ýerine ýetirilen hereketleri dolandyrmak.

PAM ýüklenýän obýekt faýllary (modullar) aşakdaky katalogda ýerleşmeli: arhitektura baglylykda/lib/security/ýa-da/lib64/howpsuzlyk.

Goldanýan dolandyryş baýdaklary:

  • zerur: şowsuzlyk ilkinji modulyň näsazlygynyň häsiýetini görkezýän programma derrew gözegçiligi yzyna berýär.
  • zerur: bu modullaryň hemmesi libpam-yň programma üstünlik gazanmagy üçin üstünlik gazanmagy talap edilýär.
  • ýeterlik: öňki modullaryň hemmesiniň üstünlik gazanandygyny göz öňünde tutup, bu modulyň üstünligi programmanyň derrew we üstünlikli gaýdyp gelmegine getirýär (bu modulyň şowsuzlygy hasaba alynmaýar).
  • islege bagly: bu modulyň üstünligi ýa-da şowsuzlygy, adatça ýazylmaýar.

Aboveokardakylardan başga-da açar sözler, başga-da iki sany ygtybarly dolandyryş baýdagy bar:

  • goşmak we goşmak: bu dolandyryşa argument hökmünde görkezilen konfigurasiýa faýlyndan berlen görnüşiň ähli setirlerini goşuň.

PAM arkaly SSH hyzmatyna kök elýeterliligini nädip çäklendirmeli

Mysal üçin, SSH we giriş programmalary arkaly kök ulanyjynyň bir sistema girmegini öçürmek üçin PAM-y nädip ulanmalydygyny düzeris. Bu ýerde, giriş we sshd hyzmatlaryna girişi çäklendirip, kök ulanyjynyň ulgama girmegini öçürmek isleýäris.

Aýratyn hasaplaryň artykmaçlyklaryny çäklendirmekde uly çeýeligi hödürleýän /lib/security/pam_listfile.so modulyny ulanyp bileris. Maksatly hyzmat üçin faýly görkezilişi ýaly /etc/pam.d/ katalogynda açyň we redaktirläň.

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

Bu düzgüni iki faýlda goşuň.

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

Tokenokardaky düzgündäki bellikleri düşündirmek:

  • auth: modulyň görnüşi (ýa-da kontekst).
  • talap edilýär: dolandyryş-baýdak, bu modul ulanylsa, geçmelidigini ýa-da beýleki modullaryň ýagdaýyna garamazdan umumy netijäniň şowsuz boljakdygyny aňladýar.
  • pam_listfile.so: esassyz faýl esasynda hyzmatlary inkär etmegiň ýa-da rugsat bermegiň usulyny hödürleýän modul.
  • onerr=üstünlik: modul argumenti.
  • element=ulanyjy: faýlda görkezilen we barlanmalydygyny kesgitleýän modul argumenti.
  • many=inkär: faýlda tapylsa, edilmeli çäreleri kesgitleýän modul argumenti, eger faýlda element tapylmasa, ters hereket talap edilýär.
  • faýl =/etc/ssh/inkär edijiler: setirde bir elementi öz içine alýan faýly görkezýän modul argumenti.

Ondan soň/etc/ssh/inkär edijiler faýlyny döretmeli we oňa at köküni goşmaly:

$ sudo vim /etc/ssh/deniedusers

Üýtgeşmeleri ýazdyryň we faýly ýapyň, soňra zerur rugsatlary belläň:

$ sudo chmod 600 /etc/ssh/deniedusers

Mundan beýläk ýokardaky düzgün PAM-a/etc/ssh/inkär edijiler faýlyna ýüz tutmagy we SSH-e girmegi we sanalan islendik ulanyjy üçin giriş hyzmatlaryny ret etmegini görkezer.

Linux-da ösen PAM-y nädip sazlamaly

Has çylşyrymly PAM düzgünlerini ýazmak üçin aşakdaky görnüşde dogry dolandyryş baýdaklaryny ulanyp bilersiňiz:

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

ValueN, setir kesgitlenen modulda çagyrylan funksiýadan gaýtaryş kody bilen gabat gelýän ýerinde. Onlaýn onlaýn PAM Administratorynyň gollanmasyndan goldanýan bahalary tapyp bilersiňiz. Valueörite baha deslapky görkezilmeýär, bu bolsa ähli bahanyň aç-açan agzalmaýandygyny aňladýar.

HereketN aşakdaky görnüşlerden birini alyp biler:

  • üns berme: bu hereket bir topar modul bilen ulanylsa, modulyň gaýdyp geliş ýagdaýy programmanyň yzyna gaýtarmak koduna goşant goşmaz.
  • erbet: yzyna gaýtarmak kody modulyň şowsuzlygynyň görkezijisi hökmünde pikir edilmelidigini görkezýär. Bu modul stakada ilkinji bolup şowsuz bolsa, onuň status bahasy tutuş stakanyňky üçin ulanylar.
  • ölmek: erbetlige deňdir, ýöne modul stakasyny ýatyryp biler we PAM derrew programma dolanyp biler.
  • ok: bu PAM-a ulgam dolandyryjysynyň bu gaýdyp beriş kody modullaryň doly toplumynyň yzyna gaýtarmak koduna gönüden-göni goşant goşmalydygyny görkezýär.
  • ýerine ýetirildi: ok-a deň, ýöne modul stakasyny ýatyryp biler we PAM derrew programma dolanyp biler.
  • N (gol çekilmedik bitewi san): ok-a deň, ýöne indiki N modullaryň üstünden böküp biler.
  • Täzeden düzmek: bu hereket modul stakasynyň ýagdaýynyň ähli ýadyny arassalaýar we indiki gaplanan modul bilen täzeden açyň.

Dört açar sözüň her biri: zerur; zerur; ýeterlik; we islege görä, has çylşyrymly düzgünleri ýazmaga mümkinçilik berýän [...] sintaksisine deň derejede aňlatma beriň we olar:

  • zerur: [üstünlik=ok new_authtok_reqd=ok äsgermezlik=default=erbetlige üns berme]
  • zerur: [üstünlik=ok new_authtok_reqd=ok äsgermezlik=deslapky äsgermezlik=ölmek]
  • ýeterlik: [üstünlik=ýerine ýetirilen new_authtok_reqd=ýerine ýetirildi=äsgermezlik]
  • islege bagly: [üstünlik=ok new_authtok_reqd=ok default=äsgermezlik]

Aşakda häzirki zaman CentOS 7 ulgamyndan mysal getirilýär. Geliň, bu düzgünleri /etc/pam.d/postlogin PAM faýlyndan gözden geçireliň:

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

Ine /etc/pam.d/smartcard-auth PAM faýlyndan başga bir mysal konfigurasiýasy:

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

Has giňişleýin maglumat üçin pam.d adam sahypasyna serediň:

$ man pam.d 

Netijede, Linux-PAM resminamalarynda Konfigurasiýa faýl sintaksisiniň we ähli PAM modullarynyň giňişleýin beýanyny tapyp bilersiňiz.

PAM, Linux ulgamyndaky amaly programmalarda hakyky ulanyjylara hakykylygyny tassyklaýan programmalara mümkinçilik berýän güýçli ýokary derejeli API. Düşünmek we ulanmak gaty güýçli, ýöne gaty kyn.

Bu makalada Ubuntu we CentOS-da PAM-yň ösen aýratynlyklaryny nädip sazlamalydygyny düşündirdik. Paýlaşmak üçin soraglaryňyz ýa-da teswirleriňiz bar bolsa, aşakdaky jogap görnüşini ulanyň.