Ruhusa za Faili katika Linux

Salaam wote. Tunaingia kazini kwa bidii na tayari tunatayarisha uzinduzi mwingi wenye nguvu mnamo Januari. Miongoni mwa wengine, uandikishaji umetangazwa kwa mkondo mpya wa kozi inayopendwa na kila mtu. "Msimamizi wa Linux". Kwa kutarajia uzinduzi, sisi kawaida hushiriki tafsiri za nyenzo muhimu.

Ruhusa za Faili katika Linux

Ruhusa za faili hutoa mbadala salama kwa utekelezo wa SUID, lakini inaweza kuonekana kuwa ya kutatanisha mwanzoni.


Sote tunajua hizo binaries KUSINI ni uamuzi mbaya kutoka kwa mtazamo wa usalama. Kwa bahati nzuri, ikiwa programu yako inahitaji mapendeleo machache, kuna njia bora zaidi inayoitwa ruhusa za faili.

Nitakuokoa muda ikiwa unataka kuzuia kusoma kifungu kilicho hapo juu kwa undani: Kimsingi, ruhusa za faili huruhusu michakato inayoendeshwa kama mzizi na kwa hivyo inaruhusiwa kufanya kitu ili kuhifadhi uwezo fulani, mdogo. orodha hiiwanapoacha marupurupu na kuendeshwa na mtumiaji asiye na upendeleo. Hii inamaanisha kuwa ikiwa mvamizi ataweza kuathiri mchakato kwa kutumia kufurika kwa bafa au unyonyaji mwingine, hataweza kuchukua faida ya kitu chochote isipokuwa mapendeleo fulani madogo ambayo mchakato huo unahitaji.

Ruhusa ni nzuri kwa huduma ambazo kwa kawaida huendeshwa kama mzizi, lakini vipi kuhusu huduma za mstari wa amri? Kwa bahati nzuri, hii pia inatumika mradi una huduma zinazofaa zilizosakinishwa. Ikiwa unatumia Ubuntu, kwa mfano utahitaji kifurushi libcap2-bin. Utahitaji pia kuendesha kerneli isiyo ya zamani (kutoka toleo 2.6.24).

Vipengele hivi vya kukokotoa huruhusu ruhusa kuhusishwa na faili zinazoweza kutekelezwa, sawa na kuweka biti ya SUID, lakini kwa seti maalum ya ruhusa pekee. Huduma setcap kutumika kuongeza na kuondoa ruhusa kutoka kwa faili.

Hatua ya kwanza ni kuchagua ruhusa unayohitaji. Kwa ajili ya nakala hii, nadhani kuna zana ya utambuzi wa mtandao inayoitwa tracewalk, ambayo inapaswa kuwa na uwezo wa kutumia soketi mbichi. Hii kawaida inahitaji programu kuendeshwa kama mzizi, lakini wakati wa kutazama orodha inageuka kuwa ruhusa tu inahitajika CAP_NET_RAW.

Kwa kudhani uko kwenye saraka ambapo binary iko tracewalk, unaweza kuongeza ruhusa hii kama hii:

sudo setcap cap_net_raw=eip tracewalk

Puuza kiambishi tamati kwa sasa =eip kwa azimio, nitazungumza juu ya hilo katika sekunde chache. Kumbuka kwamba jina la ruhusa liko katika herufi ndogo. Sasa unaweza kuangalia ikiwa umesanidi ruhusa kwa usahihi na:

setcap -v cap_new_raw=eip tracewalk

Au unaweza kuorodhesha ruhusa zote zilizowekwa kwa inayoweza kutekelezwa:

getcap tracewalk

Kwa marejeleo, unaweza pia kuondoa ruhusa zote kutoka kwa inayoweza kutekelezwa kwa:

setcap -r tracewalk

Katika hatua hii, unapaswa kuwa na uwezo wa kuendesha inayoweza kutekelezwa kama mtumiaji asiye na bahati, na inapaswa kuwa na uwezo wa kufanya kazi na soketi mbichi, lakini isiwe na haki zingine zozote ambazo mtumiaji wa mizizi anayo.

Kwa hivyo kiambishi hiki cha ajabu kinamaanisha nini? =eip? Hii inahitaji uelewa fulani wa asili ya ruhusa. Kila mchakato una seti tatu za ruhusa - ufanisi, urithi na kuruhusiwa:

  • Ufanisi Ruhusa ni zile zinazofafanua kile ambacho mchakato unaweza kufanya. Kwa mfano, haiwezi kukabiliana na soketi mbichi ikiwa CAP_NET_RAW haiko katika seti inayofaa.
  • Inapatikana ruhusa ni zile ambazo mchakato unaruhusiwa kuwa nazo ikiwa utawaomba kwa kutumia simu inayofaa. Wanazuia mchakato kufanya chochote isipokuwa iliandikwa haswa kuomba ruhusa iliyosemwa. Hii inaruhusu michakato kuandikwa ili kuongeza ruhusa muhimu kwa seti inayofaa tu kwa kipindi ambacho zinahitajika.
  • Ya kurithi ruhusa ni zile zinazoweza kurithiwa katika seti inayoweza kufikiwa ya mchakato wa mtoto aliyezaliwa. Wakati wa upasuaji fork() au clone() mchakato wa mtoto kila wakati hupewa nakala ya ruhusa za mchakato wa mzazi kwani bado unaendelea kutekelezwa kwa wakati huo. Seti ya kurithi hutumiwa wakati exec() (au sawa) inaitwa kuchukua nafasi ya faili inayoweza kutekelezwa na nyingine. Katika hatua hii, seti inayopatikana ya mchakato hufunikwa na seti inayoweza kurithiwa ili kupata seti inayoweza kufikiwa ambayo itatumika kwa mchakato mpya.

Hivyo shirika setcap huturuhusu kuongeza ruhusa za seti hizi tatu kwa kujitegemea kwa utekelezaji fulani. Kumbuka kuwa maana ya vikundi inatafsiriwa tofauti kidogo kwa ruhusa za faili:

  • Inapatikana ruhusa za faili ni zile ambazo zinapatikana kila wakati kwa faili inayoweza kutekelezwa, hata kama mchakato wa mzazi ulioiita haukuwa nazo. Zilikuwa zinaitwa vibali vya "kulazimishwa".
  • Kurithi ruhusa za faili hufafanua kinyago cha ziada ambacho kinaweza pia kutumika kuondoa ruhusa kutoka kwa seti ya mchakato wa kupiga simu. Zinatumika pamoja na seti ya kurithi ya mchakato wa kupiga simu, kwa hivyo ruhusa inarithiwa ikiwa inapatikana katika seti zote mbili.
  • Ufanisi ruhusa za faili kwa kweli ni sehemu moja tu, sio seti, na ikiwa imewekwa, inamaanisha kuwa seti nzima inayopatikana pia inakiliwa kwenye seti madhubuti ya mchakato mpya. Hii inaweza kutumika kuongeza ruhusa kwa michakato ambayo haikuandikwa mahususi ili kuziomba. Kwa kuwa ni biti moja, ukiiweka kwa ruhusa yoyote, lazima iwekwe kwa ruhusa zote. Unaweza kuiona kama sehemu ya urithi kwa sababu inatumika kuruhusu ruhusa kutumiwa na programu ambazo haziauni.

Wakati wa kubainisha ruhusa kupitia setcap barua tatu e, i ΠΈ p husiana na ufanisi, urithi na kupatikana seti kwa mtiririko huo. Kwa hivyo, maelezo ya awali:

sudo setcap cap_net_raw=eip tracewalk

...inaonyesha kuwa azimio hilo CAP_NET_RAW lazima iongezwe kwa seti zinazopatikana na zinazoweza kurithiwa na kwamba biti yenye ufanisi lazima pia iwekwe. Hii itafuta ruhusa zozote zilizowekwa kwenye faili. Ili kuweka ruhusa nyingi kwa wakati mmoja, tumia orodha iliyotenganishwa kwa koma:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Mwongozo wa Ruhusa inajadili haya yote kwa undani zaidi, lakini tunatumahi kuwa chapisho hili limeondoa kile kinachoendelea kidogo. Kuna tahadhari chache tu na hila zilizosalia kutaja.

Kwanza, uwezo wa faili haufanyi kazi na ulinganifu - lazima uitumie kwa faili ya binary yenyewe (yaani lengo la ulinganifu).

Pili, hazifanyi kazi na maandishi yaliyotafsiriwa. Kwa mfano, ikiwa una hati ya Python ambayo unataka kupeana ruhusa, lazima uikabidhi kwa mkalimani wa Python yenyewe. Ni wazi kuwa hili ni suala la usalama linalowezekana kwa sababu basi hati zote zinazotekelezwa na mkalimani huyo zitakuwa na ruhusa maalum, ingawa hii bado ni bora zaidi kuliko kuifanya SUID. Njia ya kawaida ya kufanya kazi inaonekana kuwa kuandika inayoweza kutekelezwa katika C au sawa ambayo inaweza kufanya shughuli zinazohitajika na kuiita kutoka kwa hati. Hii ni sawa na mbinu inayotumiwa na Wireshark ambayo hutumia binary /usr/bin/dumpcap kufanya shughuli za upendeleo:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

Tatu, ruhusa za faili zimezimwa ikiwa unatumia mabadiliko ya mazingira LD_LIBRARY_PATH kwa sababu za kiusalama zilizo wazi(1). hiyo inatumika kwa LD_PRELOAD, nijuavyo mimi.

1. Kwa kuwa mshambulizi anaweza kubadilisha moja ya maktaba ya kawaida na kutumia LD_LIBRARY_PATHkulazimisha maktaba yake kuitwa kwa upendeleo kwa mfumo wa kwanza, na kwa hivyo kuwa na nambari yake ya kiholela inayotekelezwa kwa haki sawa na programu ya kupiga simu.

Ni hayo tu. Maelezo zaidi juu ya mpango wa kozi yanaweza kupatikana mtandao, ambao utafanyika Januari 24.

Chanzo: mapenzi.com

Kuongeza maoni