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.
Failiõigused pakuvad turvalist alternatiivi SUID-i käivitatavatele failidele, kuid võivad alguses tunduda segane.
Me kõik teame seda kahendkoodi
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
Õ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 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õ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 tracewalk
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_PATH
et 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