Jinsi ya kusanidi na kutumia PAM katika Linux


Linux-PAM (fupi kwa Moduli za Uthibitishaji Zinazoweza Kuchomekwa ambazo ziliibuka kutoka kwa usanifu wa Unix-PAM) ni safu yenye nguvu ya maktaba zinazoshirikiwa zinazotumiwa kuthibitisha mtumiaji kwa programu (au huduma) katika mfumo wa Linux.

Inaunganisha moduli nyingi za kiwango cha chini kwenye API ya kiwango cha juu ambayo hutoa usaidizi wa uthibitishaji wa programu. Hii inaruhusu wasanidi programu kuandika programu ambazo zinahitaji uthibitishaji, bila kuzingatia mfumo wa msingi wa uthibitishaji.

Usambazaji mwingi wa kisasa wa Linux hutumia Linux-PAM (hapa inajulikana kama \PAM) kwa chaguomsingi. Katika makala haya, tutaeleza jinsi ya kusanidi PAM ya kina katika mifumo ya Ubuntu na CentOS.

Kabla hatujaendelea zaidi, kumbuka kuwa:

  • Kama msimamizi wa mfumo, jambo muhimu zaidi ni kufahamu jinsi faili za usanidi za PAM zinavyofafanua muunganisho kati ya programu (huduma) na moduli za uthibitishaji zinazoweza kuchomekwa (PAM) zinazotekeleza kazi halisi za uthibitishaji. Huhitaji kuelewa utendakazi wa ndani wa PAM.
  • PAM ina uwezo wa kubadilisha kwa umakini usalama wa mfumo wako wa Linux. Usanidi wenye makosa unaweza kulemaza ufikiaji wa mfumo wako kwa sehemu, au kabisa. Kwa mfano, kufuta kwa bahati mbaya faili ya usanidi chini ya /etc/pam.d/* na/au /etc/pam.conf kunaweza kukufungia nje ya mfumo wako mwenyewe!

Jinsi ya Kuangalia Programu inafahamu PAM

Ili kuajiri PAM, programu/programu inahitaji “kufahamu PAM”; inahitaji kuandikwa na kukusanywa mahususi ili kutumia PAM. Ili kujua kama programu \PAM-inajua au la, angalia ikiwa imeundwa na maktaba ya PAM kwa kutumia ldd amri.

Kwa mfano sshd:

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

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

Jinsi ya kusanidi PAM katika Linux

Faili kuu ya usanidi ya PAM ni /etc/pam.conf na saraka /etc/pam.d/ ina faili za usanidi za PAM kwa kila programu/huduma zinazofahamu PAM. PAM itapuuza faili ikiwa saraka ipo.

Sintaksia ya faili kuu ya usanidi ni kama ifuatavyo. Faili ina orodha ya sheria zilizoandikwa kwenye mstari mmoja (unaweza kupanua sheria kwa kutumia \\” herufi ya kutoroka) na maoni yanatanguliwa na \# alama na kupanua hadi mwisho unaofuata wa mstari.

Umbizo la kila sheria ni mkusanyiko wa ishara uliotenganishwa na nafasi (tatu za kwanza hazijali kisa). Tutaelezea ishara hizi katika sehemu zinazofuata.

service type control-flag module module-arguments 

wapi:

  • huduma: jina halisi la programu.
  • aina: aina ya moduli/muktadha/kiolesura.
  • control-flag: inaonyesha tabia ya PAM-API iwapo moduli itashindwa kufaulu katika kazi yake ya uthibitishaji.
  • moduli: jina kamili la faili au njia ya jamaa ya PAM.
  • hoja za moduli: orodha iliyotenganishwa ya nafasi ya kudhibiti tabia ya moduli.

Sintaksia ya kila faili katika /etc/pam.d/ inafanana na ile ya faili kuu na ina mistari ya fomu ifuatayo:

type control-flag module module-arguments

Huu ni mfano wa ufafanuzi wa sheria (bila hoja za moduli) unaopatikana kwenye faili /etc/pam.d/sshd, ambayo hairuhusu uingiaji usio na mizizi wakati /etc/nologin ipo:

account required pam_nologin.so

Kuelewa Vikundi vya Usimamizi wa PAM na bendera za Udhibiti

Kazi za uthibitishaji za PAM zimegawanywa katika vikundi vinne vya usimamizi huru. Vikundi hivi vinadhibiti vipengele tofauti vya ombi la kawaida la mtumiaji la huduma iliyowekewa vikwazo.

Moduli inahusishwa na moja ya aina hizi za vikundi vya usimamizi:

  • akaunti: toa huduma za uthibitishaji wa akaunti: muda wa nenosiri la mtumiaji umekwisha?; Je, mtumiaji huyu anaruhusiwa kufikia huduma iliyoombwa?.
  • uthibitishaji: thibitisha mtumiaji na usanidi kitambulisho cha mtumiaji.
  • nenosiri: wana jukumu la kusasisha manenosiri ya mtumiaji na kufanya kazi pamoja na moduli za uthibitishaji.
  • kipindi: dhibiti vitendo vinavyotekelezwa mwanzoni mwa kipindi na mwisho wa kipindi.

Faili za kitu zinazoweza kupakiwa za PAM (moduli) zinapaswa kupatikana katika saraka ifuatayo: /lib/security/ au /lib64/security kulingana na usanifu.

Bendera za udhibiti zinazotumika ni:

  • sharti: kutofaulu hurejesha udhibiti mara moja kwa programu ikionyesha hali ya kutofaulu kwa sehemu ya kwanza.
  • inahitajika: moduli hizi zote zinahitajika ili kufanikiwa ili libpam kurudisha ufanisi kwa programu.
  • inatosha: ikizingatiwa kuwa moduli zote zilizotangulia zimefaulu, kufaulu kwa moduli hii kunasababisha urejesho wa mara moja na wenye ufanisi kwa programu (kushindwa kwa moduli hii kunapuuzwa).
  • hiari: kufaulu au kutofaulu kwa moduli hii kwa ujumla hakurekodiwi.

Kwa kuongezea yaliyo hapo juu ni maneno muhimu, kuna bendera zingine mbili halali za udhibiti:

  • jumuisha na hifadhi ndogo: inajumuisha mistari yote ya aina fulani kutoka kwa faili ya usanidi iliyobainishwa kama hoja ya udhibiti huu.

Jinsi ya Kuzuia Ufikiaji wa mizizi kwa Huduma ya SSH Kupitia PAM

Kama mfano, tutasanidi jinsi ya kutumia PAM kuzima ufikiaji wa mtumiaji wa mizizi kwa mfumo kupitia SSH na programu za kuingia. Hapa, tunataka kuzima ufikiaji wa mtumiaji wa mizizi kwa mfumo, kwa kuzuia ufikiaji wa kuingia na huduma za sshd.

Tunaweza kutumia moduli ya /lib/security/pam_listfile.so ambayo inatoa unyumbufu mkubwa katika kuzuia mapendeleo ya akaunti mahususi. Fungua na uhariri faili kwa ajili ya huduma inayolengwa katika saraka ya /etc/pam.d/ kama inavyoonyeshwa.

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

Ongeza sheria hii katika faili zote mbili.

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

Kuelezea ishara katika sheria hapo juu:

  • auth: ni aina ya moduli (au muktadha).
  • inahitajika: ni bendera ya kudhibiti ambayo inamaanisha kuwa moduli ikitumiwa, lazima ipite au matokeo ya jumla yatashindwa, bila kujali hali ya moduli zingine.
  • pam_listfile.so: ni sehemu ambayo hutoa njia ya kukataa au kuruhusu huduma kulingana na faili kiholela.
  • onerr=succeed: hoja ya moduli.
  • item=user: hoja ya moduli inayobainisha kile kilichoorodheshwa kwenye faili na kinachopaswa kuangaliwa.
  • sense=deny: hoja ya moduli inayobainisha hatua ya kuchukua ikiwa itapatikana kwenye faili, ikiwa bidhaa HAIJAPATIKANA kwenye faili, basi hatua iliyo kinyume inaombwa.
  • file=/etc/ssh/deniedusers: hoja ya moduli inayobainisha faili iliyo na kipengee kimoja kwa kila mstari.

Ifuatayo, tunahitaji kuunda faili /etc/ssh/deniedusers na kuongeza mzizi wa jina ndani yake:

$ sudo vim /etc/ssh/deniedusers

Hifadhi mabadiliko na funga faili, kisha uweke ruhusa zinazohitajika juu yake:

$ sudo chmod 600 /etc/ssh/deniedusers

Kuanzia sasa, sheria iliyo hapo juu itaambia PAM kushauriana na /etc/ssh/deniedusers faili na kukataa ufikiaji wa SSH na huduma za kuingia kwa mtumiaji yeyote aliyeorodheshwa.

Jinsi ya kusanidi PAM ya Juu katika Linux

Kuandika sheria ngumu zaidi za PAM, unaweza kutumia bendera za udhibiti halali katika fomu ifuatayo:

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

Ambapo valueN inalingana na msimbo wa kurejesha kutoka kwa chaguo za kukokotoa katika moduli ambayo mstari umefafanuliwa. Unaweza kupata thamani zinazotumika kwenye Mwongozo wa Msimamizi wa PAM mtandaoni. Thamani maalum ni chaguo-msingi, ambayo inamaanisha valueN zote ambazo hazijatajwa kwa uwazi.

ActionN inaweza kuchukua mojawapo ya aina zifuatazo:

  • puuza: ikiwa kitendo hiki kitatumika pamoja na rundo la moduli, hali ya urejeshaji wa moduli haitachangia msimbo wa kurejesha ambao programu itapokea.
  • mbaya: inaonyesha kuwa msimbo wa kurejesha unapaswa kuzingatiwa kama dalili ya kushindwa kwa moduli. Ikiwa sehemu hii ni ya kwanza katika rafu kushindwa, thamani yake ya hali itatumika kwa ile ya rafu nzima.
  • kufa: sawa na mbaya lakini inaweza kusimamisha mrundikano wa sehemu na PAM kurudi mara moja kwenye programu.
  • sawa: hii inaelekeza PAM kwamba msimamizi wa mfumo anafikiri kwamba msimbo huu wa kurejesha unapaswa kuchangia moja kwa moja kwenye msimbo wa kurejesha wa rundo kamili la moduli.
  • imefanywa: sawa na sawa lakini inaweza kusimamisha mrundikano wa sehemu na PAM kurudi mara moja kwenye programu.
  • N (nambari kamili ambayo haijatiwa saini): sawa na sawa lakini inaweza kuruka moduli za N zinazofuata kwenye rafu.
  • Weka upya: kitendo hiki kitafuta kumbukumbu yote ya hali ya rafu ya moduli na ianze upya kwa kutumia moduli inayofuata iliyopangwa.

Kila moja ya maneno manne muhimu: inahitajika; hitaji; kutosha; na kwa hiari, uwe na usemi sawa kwa mujibu wa [...] syntax, ambayo hukuruhusu kuandika sheria ngumu zaidi nazo ni:

  • inahitajika: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • requisite: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • inatosha: [success=done new_authtok_reqd=done default=ignore]
  • hiari: [success=ok new_authtok_reqd=ok default=ignore]

Ufuatao ni mfano kutoka kwa mfumo wa kisasa wa CentOS 7. Hebu tuzingatie sheria hizi kutoka /etc/pam.d/postlogin faili ya 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

Hapa kuna usanidi mwingine wa mfano kutoka /etc/pam.d/smartcard-auth faili ya PAM:

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

Kwa habari zaidi, angalia pam.d ukurasa wa mtu:

$ man pam.d 

Hatimaye, maelezo ya kina ya sintaksia ya faili ya Usanidi na moduli zote za PAM zinaweza kupatikana katika hati za Linux-PAM.

PAM ni API yenye nguvu ya kiwango cha juu inayoruhusu programu zinazotegemea uthibitishaji kwa watumiaji halisi kwa programu katika mfumo wa Linux. Ni nguvu lakini ni changamoto sana kuelewa na kutumia.

Katika makala hii, tumeelezea jinsi ya kusanidi vipengele vya juu vya PAM katika Ubuntu na CentOS. Ikiwa una maswali au maoni ya kushiriki, tumia fomu ya maoni hapa chini.