Faili õigused Linuxis

Tere kõigile. Meie meeskond on aktiivselt töös ja juba jaanuaris valmistame ette palju põnevaid lansseerimisi. Nende seas on kuulutatud välja uus kursuse grupp, mis on kõigile hästi tuntud. „Linuxi administraator“. Traditsiooniliselt jagame enne lansseerimist kasulikku materjali tõlget.

Faili õigused Linuxis

Faili õigused pakuvad turvalist alternatiivi SUID-väl executible failidele, kuid need võivad esmapilgul tunduda veidi segased.


Me kõik teame, et binaarfailid SUID on on halb lahendus turvalisuse seisukohalt. Õnneks, kui teie rakendus vajab teatud piiratud privileege, on olemas tõhusam meetod, mida nimetatakse faili õigusteks.

Ma säästan teie aega, kui soovite vältida ülaltoodud artikli põhjalikku lugemist: põhimõtteliselt võimaldavad failiõigused protsessidel, mis käivitatakse root-kasutaja nimel ja seega teevad, mida nad soovivad, säilitada teatavad võimalused, piiratud selle nimekirjaga., kui nad tühistavad õigused ja töötavad privileege mitteomava kasutajana. See tähendab, et kui ründajal õnnestub protsess kompromiteerida näiteks puhverülevoolu või mõne muu eksploitiga, ei saa ta kasutada midagi muud, kui ainult teatud minimaalset õiguste hulka, mis on protsessile tõeliselt vajalik.

Õigused sobivad suurepäraselt teenustele, mis tavaliselt käivitatakse root-kasutaja nimel, kuid kuidas on käsurea utiliitidega? Õnneks toetatakse seda samuti, kui teil on õiged utiliidid installitud. Kui kasutate näiteks Ubuntu’t, vajate paketti libcap2-bin. Samuti peate käitama mitte arhaistlikku kerneli (alates versioonist 2.6.24).

Need funktsioonid võimaldavad siduda õigusi täidetavate failidega, sarnaselt SUID bitti seadistamisega, kuid ainult spetsiifilisema õiguste kogumi jaoks. Utiliiti setcap kasutatakse õiguste lisamiseks ja eemaldamiseks faililt.

Esimene samm on valida vajalikud õigused. Selle artikli puhul eeldan, et olemas on võrgu diagnostikavahend nimega tracewalk, mis peaks olema võimeline töötama toorimata soketid. Tavaliselt peab selleks rakendus käivituma root-kasutaja nime all, kuid vaadates nimekirja selgub, et vajalik on ainult luba CAP_NET_RAW.

Eeldades, et viibite kaustas, kus asub binaarfail tracewalk, saate sellele lubamise järgmisega:

sudo setcap cap_net_raw=eip tracewalk

Praegu ignoreerige sufiks =eip luba osas, räägin sellest paari sekundi pärast. Pange tähele, et lubade nimi on väikestes tähtedes. Nüüd saate kontrollida, kas olete õigesti seadistanud load, järgmisega:

setcap -v cap_new_raw=eip tracewalk

Või võite loetleda kõik õigused, mis on antud antud täideviimise failile:

getcap tracewalk

Viidatud jaoks saate kustutada kõik load järgnevast täideviimise failist järgmisega:

setcap -r tracewalk

Selles etapis peaksite suutma käivitada täideviimise faili kui mitteprivileegitud kasutaja ning see peaks suutma töötada toorimata soketidega, kuid mitte olema muid privileege, millega root-kasutaja omab.

Nii et mida tähendab see kummaline sufiks =eip? Здесь потребуется толика понимания природы разрешений. Каждый процесс имеет три набора разрешений — tõhusad, pärandatavad ja lubatud:

  • Tõhusad lubatud õigused on need, mis määravad, mida protsess tegelikult teha võib. Näiteks ei saa see teha toorete pistikute käsitlemist, kui CAP_NET_RAW see ei ole tõhusas kogumis.
  • Lubatud õigused on need, mis on protsessile lubatud, kui ta neid nõuab vastava süsteemi kutsumise kaudu. Need ei luba protsessil tegelikult midagi teha, kui ta pole spetsiaalselt kirjutatud konkreetse loa taotlemiseks. See võimaldab kirjutada protsesse, et lisada eriti olulisi õigusi tõhusasse kogumisse ainult siis, kui need tõeliselt vajalikud on.
  • Pärandatavad õigused on need, mis võivad olla pärandatud tütardprotsessi lubatud kogumis. Operatsiooni ajal fork() või clone() tütardprotsessile antakse alati koopia vanema protsessi õigustest, kuna sel hetkel käitab see endiselt sama täitmisfaili. Pärandatud kogumit kasutatakse, kui exec() (või analoog) kutsub üles asendama täitmisfaili teisega. Sellel etapil varjitakse protsessi olemasolev komplekt pärimise kaudu saadud komplektiga, et saada uus komplekt, mida kasutab uus protsess.

Seega tööriist setcap võimaldab meil iseseisvalt lisada nende kolme komplekti õigusi antud täitmisfailile. Pange tähele, et grupi väärtusi tõlgendatakse failide juurdepääsu õiguste jaoks veidi erinevalt:

  • Saadaval failiõigused on need, mis on alati kergesti saadaval täitmisfailile, isegi kui vanemprotsess, mis selle käivitas, ei omanud neid. Varem nimetati neid „sundjõududeks” õigusteks.
  • Pärimise failiõigused määravad täiendava maski, mida saab kasutada ka õiguste eemaldamiseks kutsuva protsessi komplektist. Need kehtivad koos kutsuva protsessi pärandkomplektiga, seega pärandatakse õigus ainult siis, kui see eksisteerib mõlemas komplektis.
  • Tõhusad Failide õigused on tegelikult vaid üks bitt, mitte komplekt, ja kui see on seadistatud, tähendab see, et kogu saadaval olev komplekt kopeeritakse ka uue protsessi efektiivsetesse õigustesse. Seda saab kasutada õiguste lisamiseks protsessidele, mis ei ole spetsiaalselt kirjutatud nende taotlemiseks. Kuna see on üks bitt, peab selle seadistamine mingile õigusele olema kõikide õiguste jaoks. Võite mõelda sellele kui legatsi bitile, sest seda kasutatakse õiguste lubamiseks rakendustes, mis neid ei toeta.

Õiguste määramisel kaudu setcap kolm tähte e, i ja p viitavad efektiivsele, pärandatud ja saadaval komplektile vastavalt. Nii et varasem spetsifikatsioon:

sudo setcap cap_net_raw=eip tracewalk

… näitab, et õigust CAP_NET_RAW peab olema lisatud saadaval ja pärandatud komplektidesse ning et efektiivne bitt peab samuti olema seadistatud. See asendab kõik varem määratud õigused failis. Mitme õiguse seadistamiseks korraga kasutage nimekirja komadega:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Õiguste juhend arutab kõik seda põhjalikumalt, kuid loodan, et see postitus on veidi demüstifitseerinud toimuvat. Rääkida tuleb veel mõnest ettevaatusest ja nippidest.

Esiteks ei toimi failivõimeid sümboolsete linkidega – peate neid rakendama otse binaarfailile (st sümboolse lingi sihtfailile).

Teiseks ei toimi nad tõlgendatavate skriptidega. Näiteks, kui teil on Python skript, millele soovite määrata õigusi, peate õigused määrama Python tõlgendajale endale. See on ilmselgelt potentsiaalne turvarisk, kuna kõik selle tõlgendajaga täidetavad skriptid omavad neid õigusi, kuigi see on siiski oluliselt parem kui SUID rakendamine. Näib, et kõige levinum lahendus on kirjutada eraldi täidetav fail C või sarnases keeles, mis suudab vajalikke toiminguid teha ja kutsuda skriptist seda faili. See on sarnane lähenemisviis, mida kasutab Wireshark, mis kasutab binaarfaili /usr/bin/dumpcap privilegeeritud toimingute tegemiseks:

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

Kolmandaks, failide õigused keelatakse, kui kasutate keskkonnamuutujat LD_LIBRARY_PATH ilmsete turvakaalutluste tõttu(1). Sama kehtib ka LD_PRELOAD,nii palju kui mina tean.

1. Kuna pahatahtlik isik suudab ilmselt asendada ühe standardsetest teekidest ja kasutada LD_LIBRARY_PATH, et panna oma teeke kutsuma eelistatult süsteemis, ja seega käivitama enda omaval arbirikoodi sama privileegiga nagu kutse tegeva rakenduse.

Sellega on kõik. Kursuse programmi kohta saate rohkem teada veebiseminaril, mis toimub 24. jaanuaril.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster