Hvernig á að stilla og nota PAM í Linux


Linux-PAM (stutt fyrir Pluggable Authentication Modules sem þróaðist frá Unix-PAM arkitektúrnum) er öflug föruneyti af sameiginlegum bókasöfnum sem notuð eru til að auðkenna notanda á virkan hátt fyrir forritum (eða þjónustu) í Linux kerfi.

Það samþættir margar auðkenningareiningar á lágu stigi í API á háu stigi sem veitir kraftmikinn auðkenningarstuðning fyrir forrit. Þetta gerir forriturum kleift að skrifa forrit sem krefjast auðkenningar, óháð undirliggjandi auðkenningarkerfi.

Margar nútíma Linux dreifingar styðja sjálfgefið Linux-PAM (hér eftir nefnt \PAM). Í þessari grein munum við útskýra hvernig á að stilla háþróaða PAM í Ubuntu og CentOS kerfum.

Áður en lengra er haldið skaltu athuga að:

  • Sem kerfisstjóri er mikilvægast að ná tökum á því hvernig PAM stillingarskrá(r) skilgreina tenginguna milli forrita (þjónustu) og innstungnuðu auðkenningareininganna (PAMs) sem framkvæma raunveruleg auðkenningarverkefni. Þú þarft ekki endilega að skilja innri virkni PAM.
  • PAM hefur tilhneigingu til að breyta öryggi Linux kerfisins alvarlega. Rangar stillingar geta slökkt á aðgangi að kerfinu þínu að hluta eða öllu leyti. Til dæmis getur óviljandi eytt stillingarskrá(um) undir /etc/pam.d/* og/eða /etc/pam.conf læst þig út af þínu eigin kerfi!

Hvernig á að athuga að forrit sé PAM-meðvitað

Til að nota PAM þarf forrit/forrit að vera „PAM meðvitað“; það þarf að hafa verið skrifað og tekið saman sérstaklega til að nota PAM. Til að komast að því hvort forrit sé „PAM-meðvitað“ eða ekki, athugaðu hvort það hafi verið sett saman með PAM bókasafninu með ldd skipuninni.

Til dæmis sshd:

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

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

Hvernig á að stilla PAM í Linux

Aðalstillingarskráin fyrir PAM er /etc/pam.conf og /etc/pam.d/ skráin inniheldur PAM stillingarskrárnar fyrir hvert PAM-meðvitað forrit/þjónustu. PAM mun hunsa skrána ef skráin er til.

Setningafræðin fyrir aðalstillingarskrána er sem hér segir. Skráin er samsett úr lista yfir reglur sem eru skrifaðar á einni línu (þú getur framlengt reglur með \\” escape-stafnum) og athugasemdir eru á undan \# merkir og lengja til næsta enda línunnar.

Snið hverrar reglu er rýmisaðskilið safn af táknum (fyrstu þrjú eru há- og hástafalaus). Við munum útskýra þessi tákn í síðari köflum.

service type control-flag module module-arguments 

hvar:

  • þjónusta: raunverulegt nafn forrits.
  • gerð: einingategund/samhengi/viðmót.
  • stýringarfáni: gefur til kynna hegðun PAM-API ef einingin tekst ekki í auðkenningarverkefni sínu.
  • eining: algert skráarnafn eða afstætt slóðheiti PAM.
  • einingarrök: bilaðskilinn listi yfir tákn til að stjórna hegðun eininga.

Setningafræði hverrar skráar í /etc/pam.d/ er svipuð og aðalskrárinnar og er samsett úr línum með eftirfarandi formi:

type control-flag module module-arguments

Þetta er dæmi um regluskilgreiningu (án mát-rök) sem finnast í /etc/pam.d/sshd skránni, sem bannar innskráningu án rótar þegar /etc/nologin er til:

account required pam_nologin.so

Skilningur á PAM stjórnunarhópum og stjórnfánum

PAM auðkenningarverkefni eru aðgreind í fjóra sjálfstæða stjórnunarhópa. Þessir hópar stjórna mismunandi þáttum í beiðni dæmigerðs notanda um takmarkaða þjónustu.

Eining er tengd einni af þessum stjórnunarhópategundum:

  • reikningur: veita þjónustu fyrir reikningsstaðfestingu: er lykilorð notandans útrunnið?; er þessi notandi heimill aðgangur að umbeðinni þjónustu?.
  • auðkenning: auðkenndu notanda og settu upp notendaskilríki.
  • lykilorð: bera ábyrgð á að uppfæra lykilorð notenda og vinna saman með auðkenningareiningum.
  • lota: stjórna aðgerðum sem framkvæmdar eru í upphafi lotu og lok lotu.

PAM hlaðanlegar hlutaskrár (einingarnar) eiga að vera staðsettar í eftirfarandi möppu: /lib/security/ eða /lib64/security, allt eftir arkitektúr.

Stuðningsfánarnir eru:

  • nauðsynlegt: bilun skilar stjórn samstundis í forritið sem gefur til kynna eðli fyrstu einingabilunar.
  • áskilið: allar þessar einingar eru nauðsynlegar til að ná árangri til að libpam skili árangri í forritinu.
  • fullnægjandi: í ljósi þess að allar undanfarandi einingar hafa heppnast, leiðir árangur þessarar einingar til tafarlausrar og árangursríkrar endurkomu í forritið (bilun í þessari einingar er hunsuð).
  • valfrjálst: árangur eða bilun í þessari einingu er almennt ekki skráð.

Til viðbótar við ofangreint eru lykilorðin, það eru tveir aðrir gildir stjórnfánar:

  • innihalda og undirstafla: innihalda allar línur af tiltekinni gerð úr stillingaskránni sem tilgreind er sem rök fyrir þessari stjórn.

Hvernig á að takmarka rótaraðgang að SSH þjónustu í gegnum PAM

Sem dæmi munum við stilla hvernig á að nota PAM til að slökkva á aðgangi notenda að kerfi í gegnum SSH og innskráningarforrit. Hér viljum við slökkva á aðgangi rótnotenda að kerfi með því að takmarka aðgang að innskráningu og sshd þjónustu.

Við getum notað /lib/security/pam_listfile.so eininguna sem býður upp á mikinn sveigjanleika við að takmarka réttindi tiltekinna reikninga. Opnaðu og breyttu skránni fyrir markþjónustuna í /etc/pam.d/ möppunni eins og sýnt er.

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

Bættu þessari reglu við í báðum skrám.

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

Útskýrir táknin í ofangreindri reglu:

  • auth: er einingategundin (eða samhengið).
  • áskilið: er stjórnfáni sem þýðir að ef einingin er notuð verður hún að standast eða heildarniðurstaðan mun mistakast, óháð stöðu annarra eininga.
  • pam_listfile.so: er eining sem býður upp á leið til að neita eða leyfa þjónustu sem byggist á handahófskenndri skrá.
  • onerr=succeed: mát rök.
  • item=notandi: mátsrök sem tilgreinir hvað er skráð í skránni og ætti að athuga fyrir.
  • sense=neta: mátarröksemd sem tilgreinir aðgerð sem grípa skal til ef hún finnst í skránni, ef hluturinn finnst EKKI í skránni, þá er beðið um gagnstæða aðgerð.
  • file=/etc/ssh/deniedusers: einingarviðfangsefni sem tilgreinir skrá sem inniheldur eitt atriði í hverri línu.

Næst þurfum við að búa til skrána /etc/ssh/deniedusers og bæta við nafninu rót í henni:

$ sudo vim /etc/ssh/deniedusers

Vistaðu breytingarnar og lokaðu skránni og stilltu síðan nauðsynlegar heimildir á hana:

$ sudo chmod 600 /etc/ssh/deniedusers

Héðan í frá mun ofangreind regla segja PAM að skoða /etc/ssh/deniedusers skrána og neita aðgangi að SSH og innskráningarþjónustu fyrir alla skráða notendur.

Hvernig á að stilla háþróaða PAM í Linux

Til að skrifa flóknari PAM reglur geturðu notað gilda stjórnflögg á eftirfarandi formi:

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

Þar sem gildiN samsvarar skilakóðanum úr fallinu sem kallað er fram í einingunni sem línan er skilgreind fyrir. Þú getur fundið studd gildi í PAM stjórnandahandbókinni á netinu. Sérstakt gildi er sjálfgefið, sem gefur til kynna öll gildiN sem ekki eru nefnd sérstaklega.

ActionN getur verið eitt af eftirfarandi myndum:

  • hunsa: ef þessi aðgerð er notuð með stafla af einingum mun skilastaða einingarinnar ekki stuðla að skilakóðanum sem forritið fær.
  • slæmt: gefur til kynna að skilakóðann ætti að vera til marks um að einingin mistókst. Ef þessi eining er sú fyrsta í bunkanum sem mistakast verður stöðugildi hennar notað fyrir heildar staflann.
  • deyja: jafngildir slæmu en getur hætt mátstöflunni og PAM fer strax aftur í forritið.
  • allt í lagi: þetta gefur PAM fyrirmæli um að kerfisstjórinn telji að þessi skilakóði eigi að leggja beint til skilakóðans fyrir allan bunkann af einingum.
  • lokið: jafngildir allt í lagi en gæti hætt mátbunkanum og PAM fara strax aftur í forritið.
  • N (óundirrituð heil tala): jafngildir ok en gæti hoppað yfir næstu N einingar í staflanum.
  • Endurstilla: Þessi aðgerð hreinsar allt minni af stöðu einingarstafla og endurræsir með næstu staflaða einingu.

Hvert af fjórum leitarorðum: áskilið; nauðsynlegur; nægjanlegt; og valfrjálst, hafa samsvarandi tjáningu hvað varðar [...] setningafræði, sem gerir þér kleift að skrifa flóknari reglur og þær eru:

  • áskilið: [success=allt í lagi new_authtok_reqd=ok hunsa=ignore default=slæmt]
  • nauðsynlegt: [success=allt í lagi new_authtok_reqd=ok hunsa=ignore default=die]
  • fullnægjandi: [success=done new_authtok_reqd=done default=hunsa]
  • valfrjálst: [success=allt í lagi new_authtok_reqd=allt í lagi default=hunsa]

Eftirfarandi er dæmi úr nútíma CentOS 7 kerfi. Við skulum íhuga þessar reglur úr /etc/pam.d/postlogin PAM skránni:

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

Hér er annað dæmi um uppsetningu úr /etc/pam.d/smartcard-auth PAM skránni:

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

Fyrir frekari upplýsingar, sjá pam.d man síðuna:

$ man pam.d 

Að lokum má finna ítarlega lýsingu á setningafræði stillingarskrár og öllum PAM-einingum í skjölunum fyrir Linux-PAM.

PAM er öflugt API á háu stigi sem gerir forritum sem treysta á auðkenningu til ekta notenda í forritum í Linux kerfi. Það er öflugt en mjög krefjandi að skilja og nota.

Í þessari grein höfum við útskýrt hvernig á að stilla háþróaða eiginleika PAM í Ubuntu og CentOS. Ef þú hefur einhverjar spurningar eða athugasemdir til að deila skaltu nota athugasemdareyðublaðið hér að neðan.