Kuidas PAM-i konfigureerida ja kasutada Linuxis


Linux-PAM (Unix-PAM-i arhitektuurist välja arenenud lühend Pluggable Authentication Modules) on võimas jagatud teekide komplekt, mida kasutatakse kasutaja dünaamiliseks autentimiseks Linuxi süsteemis olevate rakenduste (või teenuste) jaoks.

See integreerib mitu madala taseme autentimismoodulit kõrgetasemelisse API-sse, mis pakub rakendustele dünaamilist autentimistuge. See võimaldab arendajatel kirjutada autentimist vajavaid rakendusi, sõltumata aluseks olevast autentimissüsteemist.

Paljud kaasaegsed Linuxi jaotused toetavad vaikimisi Linux-PAM-i (edaspidi "PAM"). Selles artiklis selgitame, kuidas konfigureerida täpsemat PAM-i Ubuntu ja CentOS-süsteemides.

Enne kui jätkame, pange tähele, et:

  • Süsteemiadministraatorina on kõige olulisem omandada, kuidas PAM-i konfiguratsioonifail (id) määratlevad ühenduse rakenduste (teenuste) ja pistikprogrammidega autentimismoodulite (PAM) vahel, mis täidavad tegelikke autentimistoiminguid. Te ei pea tingimata aru saama PAM-i sisemisest toimimisest.
  • PAMil on potentsiaali teie Linuxi süsteemi turvalisust tõsiselt muuta. Vale konfiguratsioon võib osaliselt või täielikult teie süsteemile juurdepääsu keelata. Näiteks konfiguratsioonifaili (failide) juhuslik kustutamine /etc/pam.d/* ja/või /etc/pam.conf kaudu võib teid oma süsteemist välja lülitada!

Programmi kontrollimine on PAM-teadlik

PAM-i kasutamiseks peab rakendus/programm olema teadlik PAM-ist; see peab olema spetsiaalselt PAM-i kasutamiseks kirjutatud ja kompileeritud. Et teada saada, kas programm on\"PAM-teadlik \" või mitte, kontrollige, kas see on kompileeritud PAM-i teegiga käsuga ldd.

Näiteks sshd:

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

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

Kuidas PAM-i konfigureerida Linuxis

PAM-i peamine konfiguratsioonifail on /etc/pam.conf ja kataloog /etc/pam.d/ sisaldab PAM-i konfiguratsioonifaile iga PAM-teadliku rakenduse/teenuse jaoks. Kui kataloog on olemas, ignoreerib PAM faili.

Peamise konfiguratsioonifaili süntaks on järgmine. Fail koosneb reeglite loendist, mis on kirjutatud ühele reale (reegleid saab laiendada põgenemismärgiga \"\” ) ja kommentaaridele eelneb \"#" märgid ja pikendage rea järgmisesse otsa.

Iga reegli vorming on tühikutega eraldatud märkide kogu (esimesed kolm on suurtähteta). Me selgitame neid märke järgmistes jaotistes.

service type control-flag module module-arguments 

kus:

  • teenus: rakenduse tegelik nimi.
  • tüüp: mooduli tüüp/kontekst/liides.
  • control-flag: näitab PAM-API käitumist juhul, kui moodul ei suuda oma autentimisülesannet edukalt täita.
  • moodul: PAM-i absoluutne failinimi või suhteline teenimi.
  • moodul-argumendid: tühikutega eraldatud märkide loend mooduli käitumise juhtimiseks.

Iga faili süntaks kataloogis /etc/pam.d/ on sarnane põhifailiga ja koosneb järgmise vormi ridadest:

type control-flag module module-arguments

See on näide reeglist (ilma moodul-argumentideta), mis on leitud failist /etc/pam.d/sshd, mis keelab juurte välised sisselogimised, kui/etc/nologin on olemas:

account required pam_nologin.so

PAM-i haldusgruppide ja kontroll-lippude mõistmine

PAM-i autentimisülesanded on jagatud nelja sõltumatusse haldusrühma. Need rühmad haldavad tavalise kasutaja piiratud teenuse taotlemise erinevaid aspekte.

Moodul on seotud ühega järgmistest juhtimisrühma tüüpidest:

  • konto: paku teenuseid konto kinnitamiseks: kas kasutaja parool on aegunud ?; kas sellel kasutajal on lubatud juurdepääs taotletud teenusele ?.
  • autentimine: autentige kasutaja ja seadistage kasutaja mandaadid.
  • parool: vastutavad kasutaja paroolide värskendamise eest ja töötavad koos autentimismoodulitega.
  • seanss: seansi alguses ja seansi lõpus tehtud toimingute haldamine.

PAM-i laaditavad objektifailid (moodulid) peavad asuma järgmises kataloogis:/lib/security/või/lib64/security sõltuvalt arhitektuurist.

Toetatud kontrollmärgised on:

  • vajalik: rike tagastab rakenduse juhtimise koheselt, näidates esimese mooduli rikke olemust.
  • nõutav: libpami edukaks kasutamiseks rakenduses edu tagamiseks on vaja kõiki neid mooduleid.
  • piisav: arvestades, et kõik eelnevad moodulid on õnnestunud, viib selle mooduli edu viivitamatu ja eduka rakendusse naasmiseni (selle mooduli rikke ignoreeritakse).
  • valikuline: selle mooduli edukust või ebaõnnestumist tavaliselt ei registreerita.

Lisaks ülaltoodud märksõnadele on veel kaks kehtivat kontrollmärki:

  • kaasata: lisage selle juhtelemendi argumendina määratud konfiguratsioonifailist kõik antud tüüpi read
  • alampakett: lisage selle juhtelemendi argumendina määratud konfiguratsioonifailist kõik etteantud tüüpi read.

Kuidas piirata juurjuurdepääsu SSH-teenusele PAM-i kaudu

Näiteks konfigureerime, kuidas PAM-i abil keelata juurkasutaja juurdepääs süsteemile SSH ja sisselogimisprogrammide kaudu. Siinkohal soovime keelata juurkasutaja juurdepääsu süsteemile, piirates juurdepääsu sisselogimis- ja sshd-teenustele.

Saame kasutada moodulit /lib/security/pam_listfile.so, mis pakub suurt paindlikkust konkreetsete kontode privileegide piiramisel. Avage ja muutke kataloogis /etc/pam.d/ sihtteenuse faili, nagu näidatud.

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

Lisage see reegel mõlemasse faili.

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

Märkide selgitamine ülaltoodud reeglis:

  • auth: on mooduli tüüp (või kontekst).
  • kohustuslik: on kontrollmärgis, mis tähendab, et kui moodulit kasutatakse, peab see läbima, vastasel korral ei õnnestu üldtulemus, hoolimata teiste moodulite olekust.
  • pam_listfile.so: on moodul, mis pakub võimalust suvalisel failil põhinevate teenuste keelamiseks või lubamiseks.
  • onerr = õnnestub: mooduli argument.
  • item = user: mooduli argument, mis määrab failis loetletu ja seda tuleks kontrollida.
  • sense = deny: mooduli argument, mis määrab toimingu, mis tuleb teha, kui see failist leitakse, kui üksust EI OLE failist, siis nõutakse vastupidist toimingut.
  • file =/etc/ssh/deniedusers: mooduli argument, mis määrab faili, mis sisaldab ühte üksust real.

Järgmisena peame looma faili/etc/ssh/deniedusers ja lisama selle nime juur:

$ sudo vim /etc/ssh/deniedusers

Salvestage muudatused ja sulgege fail, seejärel määrake sellele vajalikud õigused:

$ sudo chmod 600 /etc/ssh/deniedusers

Nüüdsest käsib ülaltoodud reegel PAM-il tutvuda failiga/etc/ssh/deniedusers ja keelata kõigi loetletud kasutajate juurdepääs SSH-le ja sisselogimisteenustele.

Täpsema PAM-i konfigureerimine Linuxis

Keerukamate PAM-reeglite kirjutamiseks võite kasutada kehtivaid kontrollmärke järgmisel kujul:

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

Kus väärtus N vastab funktsiooni tagasipöördumiskoodile, millele rida on määratud moodulis. Toetatud väärtused leiate veebipõhisest PAM-i administraatori juhendist. Vaikeväärtus on eriväärtus, mis tähendab kõiki väärtusiN, mida pole otseselt mainitud.

Toimel N võib olla üks järgmistest vormidest:

  • ignoreeri: kui seda toimingut kasutatakse koos moodulite virnaga, ei aita mooduli tagastamise olek rakenduse saadetud tagastuskoodi kaasa.
  • halb: näitab, et tagastuskoodi tuleks mõelda kui mooduli tõrkeid. Kui see moodul ebaõnnestub virnas esimesena, kasutatakse selle oleku väärtust kogu virna jaoks.
  • die: samaväärne halbaga, kuid võib lõpetada moodulivirna ja PAM-i kohe rakendusse naastes.
  • ok: see annab PAM-ile korralduse, et süsteemiadministraator peaks selle tagastuskoodi panustama otse kogu moodulivirna tagastuskoodi.
  • valmis: samaväärne ok-ga, kuid võib lõpetada moodulivirna ja PAM-i, naastes kohe rakendusse.
  • N (allkirjastamata täisarv): vastab ok-le, kuid võib hüpata järgmiste N-i moodulite hulgast.
  • Lähtesta: see toiming kustutab kogu mälu moodulivirna olekust ja taaskäivitub järgmise virnastatud mooduliga.

Kõik neli märksõna: kohustuslik; vajalik; piisav; ja valikuline, on süntaksiga [...] samaväärne avaldis, mis võimaldab teil kirjutada keerulisemaid reegleid ja need on:

  • nõutav: [edu = ok uus_authtok_reqd = ok ignoreeri = ignoreeri vaikeväärtust = halb]
  • vajalik: [edu = ok uus_authtok_reqd = ok ignoreeri = ignoreeri vaikeväärtust = sure]
  • piisav: [edu = tehtud uus_authtok_reqd = tehtud vaikeväärtus = ignoreerima]
  • valikuline: [edu = ok uus_authtok_reqd = ok vaikeväärtus = ignoreerimine]

Järgnev näide kaasaegsest CentOS 7 süsteemist. Vaatleme neid reegleid failist /etc/pam.d/postlogin PAM:

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

Siin on veel üks konfiguratsiooni näide /etc/pam.d/smartcard-auth PAM-failist:

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

Lisateavet leiate pam.d man lehelt:

$ man pam.d 

Lõpuks, konfiguratsioonifailide süntakside ja kõigi PAM-moodulite põhjaliku kirjelduse leiate Linux-PAM-i dokumentatsioonist.

PAM on võimas kõrgetasemeline API, mis võimaldab autentimisele tuginevatel programmidel autentsetele kasutajatele Linuxi süsteemi rakendusi. See on võimas, kuid väga keeruline mõista ja kasutada.

Selles artiklis oleme selgitanud, kuidas konfigureerida PAM-i täiustatud funktsioone Ubuntu ja CentOS-is. Kui teil on jagamiseks küsimusi või kommentaare, kasutage allolevat tagasisidevormi.