Tere kÔigile. Asume aktiivselt tööle ja valmistame juba jaanuaris ette palju vÔimsaid kaatreid. Muuhulgas on vÀlja kuulutatud registreerumine kÔigi lemmikkursuste uude voogu. . KÀivitamise ootuses jagame traditsiooniliselt kasuliku materjali tÔlkeid.

FailiÔigused pakuvad turvalist alternatiivi SUID-i kÀivitatavatele failidele, kuid vÔivad alguses tunduda segane.
Me kĂ”ik teame seda kahendkoodi on . Ănneks, kui teie rakendus nĂ”uab mĂ”ningaid piiratud Ă”igusi, on olemas tĂ”husam viis, mida nimetatakse .
SÀÀstan teile aega, kui soovite vĂ€ltida ĂŒlaltoodud artikli ĂŒksikasjalikku lugemist: PĂ”himĂ”tteliselt vĂ”imaldavad failiĂ”igused protsesse, mis töötavad administraatorina ja seetĂ”ttu on neil lubatud teatud vĂ”imaluste sĂ€ilitamiseks midagi teha, piiratud kui nad kaotavad Ă”igused ja neid juhib privilegeerimata kasutaja. See tĂ€hendab, et kui rĂŒndajal Ă”nnestub puhvri ĂŒletĂ€itumise vĂ”i muu Ă€rakasutamise abil protsessi ohustada, ei saa ta kasutada midagi muud peale teatud minimaalsete privileegede, mida protsess tegelikult vajab.
Ăigused sobivad suurepĂ€raselt teenustele, mis tavaliselt töötavad alati root'ina, aga kuidas on lood kĂ€surea utiliitidega? Ănneks on ka see toetatud, kui teil on installitud Ă”iged utiliidid. Kui kasutate UbuntunĂ€iteks vajate paketti libcap2-bin. Samuti peate kĂ€ivitama mittearhailise tuuma (alates versioonist 2.6.24).
Need funktsioonid vÔimaldavad tÀitmisfailidega Ôigusi seostada sarnaselt SUID-biti seadmisega, kuid ainult teatud Ôiguste komplekti jaoks. Kasulikkus setcap kasutatakse faili lubade lisamiseks ja eemaldamiseks.
Esimene samm on vajalike Ôiguste valimine. Selle artikli huvides eeldan, et on olemas vÔrgudiagnostika tööriist nimega tracewalk, mida peaks saama kasutada . Tavaliselt eeldab see rakenduse kÀivitamist administraatorina, kuid vaatamise ajal selgub, et on vaja ainult luba CAP_NET_RAW.
Eeldusel, et asute kataloogis, kus kahendfail asub tracewalk, saate selle loa lisada jÀrgmiselt:
sudo setcap cap_net_raw=eip tracewalk Ignoreeri praegu jĂ€relliidet =eip lahendamiseks rÀÀgin sellest paari sekundi pĂ€rast. Pange tĂ€hele, et loa nimi on vĂ€iketĂ€htedega. NĂŒĂŒd saate kontrollida, kas teil on Ă”igused Ă”igesti konfigureeritud, kasutades:
setcap -v cap_new_raw=eip tracewalkVÔi vÔite loetleda kÔik antud kÀivitatava faili jaoks mÀÀratud Ôigused:
getcap tracewalk
VÔrdluseks saate kÀivitatavast failist eemaldada ka kÔik load:
setcap -r tracewalkSel hetkel peaksite saama kÀivitatavat faili kÀivitada privilegeerimata kasutajana ja see peaks töötama töötlemata sokliga, kuid tal ei tohiks olla muid juurkasutaja Ôigusi.
Mida see kummaline jĂ€relliide siis tĂ€hendab? =eip? See nĂ”uab teatud arusaamist lubade olemusest. Igal protsessil on kolm Ă”iguste komplekti â tĂ”hus, pĂ€rilik ja lubatud:
- TÔhus Load on need, mis mÀÀravad, mida protsess tegelikult teha saab. NÀiteks ei saa see hakkama töötlemata pistikupesadega, kui
CAP_NET_RAWei ole efektiivses komplektis. - Saadaval Ôigused on need, mis protsessil on lubatud, kui ta seda vastavat kÔnet kasutades taotleb. Need takistavad protsessil tegelikult midagi tegemast, vÀlja arvatud juhul, kui see on spetsiaalselt kirjutatud loa taotlemiseks. See vÔimaldab kirjutada protsesse, et lisada kehtivale komplektile kriitilisi Ôigusi ainult perioodiks, mil neid tegelikult vaja on.
- PÀritav Ôigused on need, mida saab pÀritud alamprotsessi juurdepÀÀsetavas komplektis. Operatsiooni ajal
fork()vĂ”iclone()alamprotsessile antakse alati koopia ĂŒlemprotsessi lubadest, kuna sellel hetkel töötab see endiselt sama kĂ€ivitatava failiga. PĂ€rilikku komplekti kasutatakse siis, kuiexec()(vĂ”i samavÀÀrne) kutsutakse kĂ€ivitatava faili asendamiseks teisega. Sel hetkel maskeeritakse protsessi saadaolev komplekt pĂ€riliku komplektiga, et saada juurdepÀÀsetav komplekt, mida uue protsessi jaoks kasutatakse.
Seega kasulikkus setcap vĂ”imaldab meil lisada nende kolme komplekti Ă”igused antud kĂ€ivitatava faili jaoks eraldi. Pange tĂ€hele, et rĂŒhmade tĂ€hendust tĂ”lgendatakse failiĂ”iguste puhul veidi erinevalt:
- Saadaval failiÔigused on need, mis on kÀivitatava faili jaoks alati saadaval, isegi kui seda kutsunud vanemprotsessil neid ei olnud. Varem nimetati neid "sunnitud" lubadeks.
- PÀrandatud failiÔigused mÀÀravad tÀiendava maski, mida saab kasutada ka Ôiguste eemaldamiseks helistamisprotsessi komplektist. Need kehtivad lisaks kutsumisprotsessi pÀritud hulgale, seega pÀritakse luba ainult siis, kui see on olemas mÔlemas komplektis.
- TĂ”hus failiĂ”igused on tegelikult vaid ĂŒks bitt, mitte komplekt, ja kui see on mÀÀratud, tĂ€hendab see, et kogu saadaolev komplekt kopeeritakse ka uue protsessi kehtivasse komplekti. Seda saab kasutada Ă”iguste lisamiseks protsessidele, mis pole spetsiaalselt nende taotlemiseks kirjutatud. Kuna see on ĂŒhebitine, siis kui mÀÀrate selle mis tahes loa jaoks, tuleb see mÀÀrata kĂ”igile Ă”igustele. Seda vĂ”ib pidada pĂ€randbitiks, kuna seda kasutatakse lubade kasutamiseks rakendustel, mis neid ei toeta.
Lubade mÀÀramisel kaudu setcap kolm tÀhte e, i О p viitama tÔhus, pÀrilik ja kÀttesaadav komplektid vastavalt. Niisiis, varasem spetsifikatsioon:
sudo setcap cap_net_raw=eip tracewalk ...nÀitab, et resolutsioon CAP_NET_RAW tuleb lisada saadaolevatele ja pÀritavatele komplektidele ning mÀÀrata ka efektiivne bitt. See alistab kÔik failile varem mÀÀratud Ôigused. Mitme loa korraga mÀÀramiseks kasutage komadega eraldatud loendit.
sudo setcap cap_net_admin,cap_net_raw=eip tracewalkkĂ€sitleb seda kĂ”ike ĂŒksikasjalikumalt, kuid loodetavasti on see postitus toimuvat pisut demĂŒstifitseerinud. Mainida on jÀÀnud vaid mĂ”ned hoiatused ja nipid.
Esiteks ei tööta failivĂ”imalused sĂŒmlinkide puhul â need tuleb rakendada binaarfailile endale (st sĂŒmlingi sihtmĂ€rgile).
Teiseks ei tööta need tÔlgendatud skriptidega. NÀiteks kui teil on Pythoni skript, millele soovite loa mÀÀrata, peate selle mÀÀrama Pythoni tÔlgile endale. Ilmselgelt on see potentsiaalne turvaprobleem, sest siis on kÔigil selle tÔlgiga kÀivitatud skriptidel mÀÀratud Ôigus, kuigi see on siiski oluliselt parem kui SUID-i muutmine. KÔige tavalisem lahendus nÀib olevat eraldi kÀivitatava faili kirjutamine C- vÔi samavÀÀrses keeles, mis suudab vajalikke toiminguid teha ja seda skriptist vÀlja kutsuda. See sarnaneb Wiresharki kasutatavale lÀhenemisviisile, mis kasutab kahendkoodi /usr/bin/dumpcap privilegeeritud toimingute tegemiseks:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip Kolmandaks on failiÔigused keelatud, kui kasutate keskkonnamuutujat LD_LIBRARY_PATH ilmselgetel turvakaalutlustel(1). Sama kehtib ka LD_PRELOAD, nii palju kui ma tean.
1. Kuna rĂŒndaja vĂ”ib ilmselgelt asendada ĂŒhe standardse teegi ja kasutada LD_LIBRARY_PATHet sundida oma teeki kutsuma eelistatult sĂŒsteemi omale ja seetĂ”ttu kĂ€ivitada oma suvalise koodi samade Ă”igustega nagu kutsuval rakendusel.
See on kÔik. Lisateavet kursuse programmi kohta leiate aadressilt
Allikas: www.habr.com
