Lejet e skedarëve në Linux

Përshëndetje të gjithëve. Ne jemi aktivisht duke u angazhuar në punë dhe në janar do të përgatisim shumë lançime të fuqishme. Mes të tjerash, është shpallur regjistrimi për një grup të ri të kursit të dashur nga të gjithët. «Administrator Linux». Në prag të lançimit, tradicionalisht ndajmë përkthimin e materialeve të dobishme.

Lejet e skedarëve në Linux

Lejet e skedarëve ofrojnë një alternativë të sigurt ndaj skedarëve ekzekutivë SUID, por mund të duken paksa të ndërlikuara në shikim të parë.


Të gjithë ne e dimë që skedarët binarë SUID janë është një zgjidhje e keqe në aspektin e sigurisë. Fatmirësisht, nëse aplikacioni juaj kërkon disa privilegje të kufizuara, ekziston një mënyrë më efektive, e njohur si lejet e skedarëve.

Do t'ju kursej kohë, nëse dëshironi të shmangni leximin e detajuar të artikullit më sipër: në thelb, lejet e skedarëve lejojnë proceset që fillojnë nën emrin e përdoruesit root dhe, për rrjedhojë, kanë të drejtë të bëjnë diçka, të ruajnë disa mundësi, të kufizuara me këtë listë, kur ata heqën privilegjet dhe fillojnë si një përdorues pa privilegje. Kjo do të thotë se nëse një sulmues arrin të kompromentojë procesin me anë të mbivendosjes së buffers apo një shfrytëzimi tjetër, ai nuk do të mund të përdorë asgjë përveç privilegjeve minimale që nevojiten për procesin.

Lejet janë ideale për shërbimet që zakonisht janë të nisura nën emrin e përdoruesit root, por si ndodhet me utilitetet e vijës së komandës? Fatmirësisht, kjo mbështetet njësoj nëse keni instaluar utilitetet e duhura. Nëse po përdorni Ubuntu, për shembull, do t'ju nevojitet paketi libcap2-bin. Ju gjithashtu duhet të keni një bërthamë jo arkaike (duke filluar nga versioni 2.6.24).

Këto funksione lejojnë lidhjen e lejeve me skedarët ekzekutivë njësoj si konfigurimi i bitit SUID, por vetëm për një grup të caktuar lejesh. Utilitari setcap përdoret për të shtuar dhe hequr leje nga skedari.

Hapi i parë është të zgjidhni lejet që ju nevojiten. Në këtë artikull do të supozoj se ekziston një mjet diagnostikimi të rrjetit, i quajtur tracewalk, i cili duhet të jetë në gjendje të përdorë sockets të papërpunuara. Zakonisht kërkohet që aplikacioni të ekzekutohet me emrin e përdoruesit root, por kur shihni listën kuptohet se kërkohet vetëm leja CAP_NET_RAW.

Duke supozuar se ndodheni në katalogun ku ndodhet skedari binar tracewalk, mund të shtoni këtë leje në këtë mënyrë:

sudo setcap cap_net_raw=eip tracewalk

Mund ta injoroni sufixin =eip për lejen, do ta shpjegoj këtë pas pak sekondash. Mos harroni se emri i lejes është me shkronja të vogla. Tani mund të kontrolloni nëse i keni vendosur lejet siç duhet me:

setcap -v cap_net_raw=eip tracewalk

Ose mund të printoni një listë të të gjitha lejeve të vendosura për këtë skedari ekzekutues:

getcap tracewalk

Për referencë, gjithashtu mund të hiqni të gjitha lejet nga skedari ekzekutues duke përdorur:

setcap -r tracewalk

Në këtë pikë, duhet të keni mundësi të ekzekutoni skedarin ekzekutues si një përdorues jo privilegjuar, dhe ai duhet të jetë në gjendje të punojë me sockets të papërpunuara, por të mos ketë ndonjë privilegje tjetër që i përkasin përdoruesit root.

Pra, çfarë do të thotë ky sufix i çuditshëm =eip? Здесь потребуется толика понимания природы разрешений. Каждый процесс имеет три набора разрешений — efektive, trashëgueshme dhe të lejuara (effective, inheritable dhe permitted):

  • Efektive (Effective) lejet janë ato që përcaktojnë se çfarë mund në të vërtetë të bëjë procesi. Për shembull, ai nuk mund të merret me soket të papërpunuar nëse CAP_NET_RAW nuk është në grupin efektiv.
  • Të lejuara (Permitted) lejet janë ato që lejohet të ketë procesi, nëse ai i kërkon ato nëpërmjet thirrjes përkatëse. Ato nuk lejojnë procesit të bëjë në të vërtetë ndonjë gjë, përveç nëse ai është shkruar veçanërisht për të kërkuar lejen e caktuar. Kjo lejon krijimin e proceseve për shtimin e lejeve veçanërisht të rëndësishme në grupin efektiv vetëm për atë periudhë kur ato janë në të vërtetë të nevojshme.
  • Trashëgueshme (Inheritable) lejet janë ato që mund të trashëgohen në grupin e lejeve të procesit të ri të lindur. Gjatë operacionit fork() ose clone() procesi i ri gjithmonë merr një kopje të lejeve të procesit prind, sepse në atë moment ai ende po ekzekuton të njëjtin skedar ekzekutiv. Grupi i trashëguar përdoret kur exec() (ose analoge) thirret për të zëvendësuar skedarin ekzekutiv me një tjetër. Në këtë fazë, grupi i disponueshëm i procesit maskohet nga grupi trashëgues për të marrë grupin e disponueshëm që do të përdoret për procesin e ri.

Kështu, utilitari setcap na lejon të shtojmë lejet e këtyre tre grupeve në mënyrë të pavarur për skedarin ekzekutiv të dhënë. Vini re se vlera e grupeve interpretohet paksa ndryshe për të drejtat e qasjes në skedarë:

  • Të disponueshme lejet e skedarëve — janë ato që gjithmonë janë të disponueshme për skedarin ekzekutiv, edhe nëse procesi prind që e thirri atë nuk i kishte ato. Më parë quheshin leje “të detyrueshme”.
  • Trashëguar lejet e skedarëve përcaktojnë një maskë të shtesës, e cila gjithashtu mund të përdoret për të hequr lejet nga grupi i procesit thirrës. Ato zbatohen përveç grupit trashëgues të procesit thirrës, kështu që leja trashëgohet vetëm nëse ekziston në të dy grupet.
  • Efektive lehtet e skedarëve në të vërtetë përfaqësojnë vetëm një bit, dhe jo një grup, dhe nëse është vendosur, atëherë kjo do të thotë që e gjithë grupe e duhur gjithashtu kopjohet në grupin efektiv të procesit të ri. Kjo mund të përdoret për të shtuar leje në procese që nuk janë shkruar posaçërisht për ta kërkuar. Duke qenë se kjo është një bit, nëse e vendosni atë për ndonjë leje, ajo duhet të vendoset për të gjitha lejet. Mund ta mendoni atë si një bit legjacy, sepse përdoret për të lejuar përdorimin e lejimeve për aplikacionet që nuk i mbështesin ato.

Kur specifikoni lejet përmes setcap tre shkronjave e, i dhe p lidhen me efektive, trashëgueshmërisë dhe të aksesueshmërisë grupeve përkatëse. Pra, specifikimi më herët:

sudo setcap cap_net_raw=eip tracewalk

… tregon se leja CAP_NET_RAW duhet të shtohet në grupet e aksesueshme dhe trashëguese dhe që gjithashtu duhet të vendoset bit efekti. Kjo do të zëvendësojë çdo leje që ishte vendosur më parë në skedar. Për të vendosur disa leje menjëherë, përdorni një listë përmes një presjeje:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Udhëzues për lejet diskutohet gjithçka në detaje, por shpresoj se ky post e demistifikoi paksa atë që po ndodh. Na mbetet të përmendim vetëm disa paralajmërime dhe truke.

Së pari, mundësitë e skedarëve nuk funksionojnë me symlink — ju duhet t'i aplikoni ato për skedarin binar të vetë (dmth. për objektin e symlinkut).

Së dyti, ato nuk funksionojnë me skriptet interpretuese. Për shembull, nëse keni një skript Python për të cilin dëshironi të caktoni leje, duhet ta caktoni për interpretuesin e Python-it. Sigurisht, kjo është një problem potencial sigurie, sepse atëherë të gjitha skriptet që ekzekutohen me këtë interpretues do të kenë lejen e caktuar, megjithatë, kjo është ende ndjeshëm më mirë se të bëni SUID. Rruga më e zakonshme për të kaluar këtë duket se është të shkruani një skedar të veçantë ekzekutues në C ose një analog, i cili mund të kryejë operacionet e nevojshme dhe ta thërrasë atë nga skripti. Kjo është e ngjashme me qasjen që përdor Wireshark, i cili përdor skedarin binar /usr/bin/dumpcap për të kryer operacione me privilegje:

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

Për më tepër, lejet e skedarëve çaktivizohen nëse përdorni një variabël mjedisi LD_LIBRARY_PATH për arsye të qarta sigurie(1). E njëjta gjë vlen edhe për LD_PRELOAD, për aq sa di unë.

1. Sepse një sulmues, natyrisht, mund të zëvendësojë një nga bibliotekat standarde dhe të përdorë LD_LIBRARY_PATH, për ta detyruar biblioteken e tij të thirret në vend të asaj sistemike dhe, për pasojë, të ketë kodin e tij të dëshiruara duke u ekzekutuar me të njëtat privilegje si aplikacioni që e thërret.

Kjo është gjithçka. Më shumë rreth programit të kursit do të mund të mësoni në webinarin që do të zhvillohet më 24 janar.

Burimi: habr.com

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster