Failide õigused Linuxis

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. "Linuxi administraator". Käivitamise ootuses jagame traditsiooniliselt kasuliku materjali tõlkeid.

Failide õigused Linuxis

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 administraatorina, kuid kuidas on lood käsurea utiliitidega? Õnneks toetatakse seda ka juhul, kui teil on installitud õiged utiliidid. Kui kasutate Ubuntut, vajate näiteks 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

Lisa kommentaar