AuthZ& AuthN - Docker Access Authorization Plugin
Mfano wa msingi wa uthibitishaji wa Docker ni au yote. Mtumiaji yeyote mwenye ruhusa ya kufikia Docker daemon anaweza kutekeleza amri yoyote ya mteja wa Docker. Hii pia ni kweli kwa wito unaotumia API ya Engine ya Docker kuwasiliana na daemon. Ikiwa unahitaji udhibiti mkubwa wa ufikiaji, unaweza kuunda programu-jalizi za uthibitishaji na kuziweka kwenye usanidi wa Docker daemon yako. Kwa kutumia programu-jalizi ya uthibitishaji, msimamizi wa Docker anaweza kuweka sera za ufikiaji za kina kwa kusimamia ufikiaji wa Docker daemon.
Muundo wa msingi
Programu-jalizi za Uthibitishaji wa Docker ni programu-jalizi za nje unazoweza kutumia kuwezesha/zuia vitendo vilivyotakiwa kwa Docker Daemon kulingana na mtumiaji aliyetaka na kitendo kilichotakiwa.
Maelezo yafuatayo yanatoka kwenye nyaraka
Wakati ombi la HTTP linapofanywa kwa Docker daemon kupitia CLI au kupitia API ya Engine, mfumo wa uthibitishaji unapitisha ombi kwa programu-jalizi za uthibitishaji zilizosanikishwa. Ombi lina mtumiaji (mpigaji simu) na muktadha wa amri. Programu-jalizi inawajibika kuamua ikiwa ita ruhusu au kukataa ombi.
Mchoro wa mfululizo hapa chini unaonyesha mchakato wa ruhusu na kukataa uthibitishaji:
Kila ombi lililotumwa kwa programu-jalizi linajumuisha mtumiaji aliyeidhinishwa, vichwa vya HTTP, na mwili wa ombi/jibu. Ni jina la mtumiaji na njia ya uthibitishaji iliyotumiwa tu ndio inayopitishwa kwa programu-jalizi. Muhimu zaidi, sifa za mtumiaji au alama hazipitishwi. Hatimaye, siyo mwili wote wa ombi/jibu unatumiwa kwa programu-jalizi ya uthibitishaji. Ni mwili wa ombi/jibu tu ambapo Content-Type
ni text/*
au application/json
ndio unatumiwa.
Kwa amri ambazo zinaweza kuchukua udhibiti wa uunganisho wa HTTP (HTTP Upgrade
), kama vile exec
, programu-jalizi ya uthibitishaji inaitwa tu kwa ombi la kwanza la HTTP. Mara tu programu-jalizi inapoidhinisha amri, uthibitishaji hautumiki kwa sehemu iliyobaki ya mchakato. Hasa, data ya utiririshaji haipitishwi kwa programu-jalizi za uthibitishaji. Kwa amri ambazo zinatoa majibu ya HTTP yaliyogawanywa, kama vile logs
na events
, ombi la HTTP pekee linatumwa kwa programu-jalizi za uthibitishaji.
Wakati wa usindikaji wa ombi/jibu, mchakato fulani wa uthibitishaji unaweza kuhitaji kuuliza maswali zaidi kwa Docker daemon. Ili kukamilisha mchakato kama huo, programu-jalizi zinaweza kuita API ya daemon kama mtumiaji wa kawaida. Ili kuwezesha maswali haya ya ziada, programu-jalizi lazima zitoa njia ya msimamizi kuwezesha usanidi wa uthibitishaji na sera za usalama.
Programu-Jalizi Kadhaa
Wewe ndiye anayesajili programu-jalizi yako kama sehemu ya kuanza kwa Docker daemon. Unaweza kusanikisha programu-jalizi nyingi na kuziunganisha pamoja. Mnyororo huu unaweza kuwa na utaratibu. Kila ombi kwa daemon linapita kwa utaratibu kupitia mnyororo. Ni wakati programu-jalizi zote zinaruhusu ufikiaji kwa rasilimali, ndipo ufikiaji unaruhusiwa.
Mifano ya Programu-Jalizi
Twistlock AuthZ Broker
Programu-jalizi authz inakuwezesha kuunda faili rahisi ya JSON ambayo programu-jalizi itakuwa ikisoma ili kuidhinisha maombi. Kwa hivyo, inakupa fursa ya kudhibiti kwa urahisi sana ni API zipi zinaweza kufikiwa na mtumiaji gani.
Hii ni mfano ambao utaruhusu Alice na Bob kuunda kontena mpya: {"name":"policy_3","users":["alice","bob"],"actions":["container_create"]}
Kwenye ukurasa route_parser.go unaweza kupata uhusiano kati ya URL iliyotakiwa na kitendo. Kwenye ukurasa types.go unaweza kupata uhusiano kati ya jina la kitendo na kitendo
Mafunzo Rahisi ya Programu-Jalizi
Unaweza kupata programu-jalizi rahisi kuelewa na habari ya kina kuhusu usanikishaji na uchunguzi hapa: https://github.com/carlospolop-forks/authobot
Soma README
na msimbo wa plugin.go
ili kuelewa jinsi inavyofanya kazi.
Kudukua Programu-Jalizi ya Uthibitishaji wa Docker
Tathmini ufikiaji
Vitu muhimu vya kuangalia ni endpoints zipi zinaruhusiwa na thamani zipi za HostConfig zinaruhusiwa.
Kufanya tathmini hii unaweza kutumia zana https://github.com/carlospolop/docker_auth_profiler.
run --privileged
isiyoruhusiwa
run --privileged
isiyoruhusiwaRuhusa ya Chini
Kuendesha chombo na kisha kupata kikao cha mamlaka
Katika kesi hii, msimamizi wa mfumo amezuia watumiaji kufunga diski na kuendesha vyombo na bendera ya --privileged
au kutoa uwezo wowote ziada kwa chombo:
Hata hivyo, mtumiaji anaweza kuunda kikao ndani ya kontena inayofanya kazi na kumpa mamlaka ya ziada:
Sasa, mtumiaji anaweza kutoroka kutoka kwenye chombo kwa kutumia moja ya njia zilizojadiliwa hapo awali na kuongeza mamlaka ndani ya mwenyeji.
Weka Folda Inayoweza Kuandikwa
Katika kesi hii, msimamizi wa mfumo amezuia watumiaji kuendesha vyombo na bendera ya --privileged
au kutoa uwezo wowote ziada kwa chombo, na amewaruhusu tu kuweka folda ya /tmp
:
Tafadhali kumbuka kuwa huenda usiweze kufunga saraka /tmp
lakini unaweza kufunga saraka nyingine inayoweza kuandikwa. Unaweza kupata saraka zinazoweza kuandikwa kwa kutumia: find / -writable -type d 2>/dev/null
Tafadhali kumbuka kuwa sio saraka zote kwenye kompyuta ya Linux zitasaidia biti ya suid! Ili kuchunguza ni saraka zipi zinasaidia biti ya suid, endesha mount | grep -v "nosuid"
Kwa mfano, kawaida /dev/shm
, /run
, /proc
, /sys/fs/cgroup
na /var/lib/lxcfs
hazisaidii biti ya suid.
Pia kumbuka kuwa ikiwa unaweza kufunga /etc
au saraka nyingine yenye faili za usanidi, unaweza kuzibadilisha kutoka kwenye kontena ya docker kama mtumiaji wa root ili kuzitumia vibaya kwenye mwenyeji na kuongeza mamlaka (labda kwa kubadilisha /etc/shadow
)
Ncha ya API isiyosahihishwa
Jukumu la msimamizi wa mfumo anayeweka programu-jalizi hii ni kudhibiti vitendo na mamlaka gani kila mtumiaji anaweza kufanya. Kwa hivyo, ikiwa msimamizi anachukua njia ya orodha nyeusi na kumweka kipaumbele kwa ncha za API na sifa, anaweza kusahau baadhi yao ambayo inaweza kuruhusu mtu mwenye nia mbaya kuongeza mamlaka.
Unaweza kuangalia API ya docker kwenye https://docs.docker.com/engine/api/v1.40/#
Muundo wa JSON usiothibitishwa
Binds kwenye mizizi
Inawezekana kwamba wakati msimamizi wa mfumo alipoweka kinga ya kifaa cha docker, alisahau kuhusu parameta muhimu ya API kama "Binds". Katika mfano ufuatao, inawezekana kutumia hitilafu hii ya usanidi kujenga na kuendesha kontena ambalo linafunga saraka ya mizizi (/) ya mwenyeji:
Tafadhali kumbuka jinsi katika mfano huu tunatumia Binds
kama ufunguo wa ngazi ya juu katika JSON lakini katika API inaonekana chini ya ufunguo HostConfig
Binds katika HostConfig
Fuata maagizo sawa na Binds katika root kwa kufanya ombi hili kwa Docker API:
Kufunga kwenye mizizi
Fuata maagizo yaleyale kama kwa Kufunga kwenye mizizi kwa kutekeleza ombi hili kwenye API ya Docker:
Kufunga katika HostConfig
Fuata maagizo sawa na Binds katika root kwa kufanya ombi hili kwa Docker API:
Atributi ya JSON ambayo hayajakaguliwa
Inawezekana kwamba wakati msimamizi wa mfumo alipoweka firewall ya docker, alipuuza baadhi ya sifa muhimu ya parameter ya API kama vile "Capabilities" ndani ya "HostConfig". Katika mfano ufuatao, inawezekana kutumia hitilafu hii ya usanidi kujenga na kuendesha chombo na uwezo wa SYS_MODULE:
HostConfig
ndiyo ufunguo ambao kwa kawaida una mamlaka muhimu za kutoroka kutoka kwenye kontena. Hata hivyo, kama tulivyozungumza hapo awali, angalia jinsi matumizi ya Binds nje yake pia yanavyofanya kazi na yanaweza kukuruhusu kuepuka vizuizi.
Kulemaza Plugin
Ikiwa sysadmin amesahau kuzuia uwezo wa kulemaza plugin, unaweza kutumia hii fursa kulemaza kabisa!
Kumbuka kuwasha upya programu-jalizi baada ya kuongeza kiwango cha upatikanaji, au kuanzisha upya huduma ya docker haitafanya kazi!
Mbinu za Kudukua Programu-Jalizi ya Uthibitishaji
Marejeo
Last updated