FailiÔigused jaotises Linux

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. "Administraator Linux». KÀivitamise ootuses jagame traditsiooniliselt kasuliku materjali tÔlkeid.

FailiÔigused jaotises Linux

FailiÔigused pakuvad turvalist alternatiivi SUID-i kÀivitatavatele failidele, kuid vÔivad alguses tunduda segane.


Me kĂ”ik teame seda kahendkoodi SUID on turvalisuse seisukohast halb otsus. Õnneks, kui teie rakendus nĂ”uab mĂ”ningaid piiratud Ă”igusi, on olemas tĂ”husam viis, mida nimetatakse faili Ă”igused.

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 see nimekirikui 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 toored pistikupesad. Tavaliselt eeldab see rakenduse kÀivitamist administraatorina, kuid vaatamise ajal loetelu 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 tracewalk

VÔ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 tracewalk

Sel 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_RAW ei 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Ă”i clone() alamprotsessile antakse alati koopia ĂŒlemprotsessi lubadest, kuna sellel hetkel töötab see endiselt sama kĂ€ivitatava failiga. PĂ€rilikku komplekti kasutatakse siis, kui exec() (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 tracewalk

Lubade juhend kĂ€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 veebiseminar, mis toimub 24. jaanuaril.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster