Tiedostojen käyttöoikeudet Linuxissa

Hei kaikki. Käymme aktiivisesti töissä ja valmistelemme jo useita tehokkaita lanseerauksia tammikuussa. Ilmoittautuminen on ilmoitettu muun muassa uudelle kaikkien suosikkikurssille. "Linux-järjestelmänvalvoja". Julkaisua odotellessa jaamme perinteisesti hyödyllisen materiaalin käännöksiä.

Tiedostojen käyttöoikeudet Linuxissa

Tiedostojen käyttöoikeudet tarjoavat turvallisen vaihtoehdon SUID-suoritettaville tiedostoille, mutta voivat aluksi tuntua hieman hämmentävältä.


Me kaikki tiedämme ne binäärit SUID olemme huono päätös turvallisuusnäkökulmasta. Onneksi, jos sovelluksesi vaatii joitain rajoitettuja oikeuksia, on olemassa tehokkaampi tapa nimeltä tiedostojen käyttöoikeudet.

Säästän aikaa, jos et halua lukea yllä olevaa artikkelia yksityiskohtaisesti: Pohjimmiltaan tiedostojen käyttöoikeudet sallivat prosessit, jotka toimivat pääkäyttäjänä ja voivat siksi tehdä jotain tiettyjen ominaisuuksien säilyttämiseksi, rajoitetusti tämä listakun he menettävät oikeudet ja niitä hoitaa etuoikeutettu käyttäjä. Tämä tarkoittaa, että jos hyökkääjä onnistuu murtautumaan prosessiin puskurin ylivuodon tai muun hyväksikäytön avulla, hän ei voi hyödyntää mitään muuta kuin tiettyjä vähimmäisoikeuksia, joita prosessi todella tarvitsee.

Käyttöoikeudet ovat erinomaisia ​​palveluille, jotka yleensä toimivat aina pääkäyttäjänä, mutta entä komentorivin apuohjelmat? Onneksi tämä on myös tuettu, jos sinulla on oikeat apuohjelmat asennettuna. Jos käytät Ubuntua, tarvitset esimerkiksi paketin libcap2-bin. Sinun on myös suoritettava ei-arkaainen ydin (versiosta 2.6.24).

Nämä toiminnot mahdollistavat käyttöoikeuksien liittämisen suoritettaviin tiedostoihin, kuten SUID-bitin asettaminen, mutta vain tietyille käyttöoikeuksille. Apuohjelma setcap käytetään oikeuksien lisäämiseen ja poistamiseen tiedostosta.

Ensimmäinen vaihe on valita tarvitsemasi käyttöoikeudet. Tämän artikkelin vuoksi oletan, että on olemassa verkkodiagnostiikkatyökalu nimeltä tracewalk, jota pitäisi voida käyttää raa'at pistorasiat. Tämä edellyttää yleensä, että sovellus suoritetaan pääkäyttäjänä, mutta katselun aikana luettelo käy ilmi, että vaaditaan vain lupa CAP_NET_RAW.

Olettaen, että olet hakemistossa, jossa binaari sijaitsee tracewalk, voit lisätä tämän luvan seuraavasti:

sudo setcap cap_net_raw=eip tracewalk

Jätä jälkiliite huomioimatta toistaiseksi =eip ratkaisemiseksi, puhun siitä muutaman sekunnin kuluttua. Huomaa, että luvan nimi on pienillä kirjaimilla. Voit nyt tarkistaa, oletko määrittänyt käyttöoikeudet oikein:

setcap -v cap_new_raw=eip tracewalk

Tai voit luetella kaikki tietylle suoritettavalle tiedostolle asetetut käyttöoikeudet:

getcap tracewalk

Voit myös poistaa kaikki käyttöoikeudet suoritettavasta tiedostosta seuraavasti:

setcap -r tracewalk

Tässä vaiheessa sinun pitäisi pystyä suorittamaan suoritettavaa tiedostoa etuoikeutettomana käyttäjänä, ja sen pitäisi pystyä toimimaan raaka-sockettien kanssa, mutta sillä ei saa olla muita pääkäyttäjän oikeuksia.

Mitä tämä outo pääte sitten tarkoittaa? =eip? Tämä vaatii jonkin verran ymmärrystä käyttöoikeuksien luonteesta. Jokaisella prosessilla on kolme sarjaa käyttöoikeuksia − tehokas, perinnöllinen ja sallittu:

  • Tehokas Käyttöoikeudet ovat niitä, jotka määrittelevät, mitä prosessi voi todella tehdä. Se ei esimerkiksi pysty käsittelemään raakapistokkeita, jos CAP_NET_RAW ei ole tehokkaassa joukossa.
  • Saatavilla käyttöoikeudet ovat niitä, jotka prosessilla on oikeus saada, jos se pyytää niitä käyttämällä asianmukaista kutsua. Ne estävät prosessia tekemästä mitään, ellei sitä ole erityisesti kirjoitettu kyseistä lupaa varten. Tämä mahdollistaa prosessien kirjoittamisen kriittisten oikeuksien lisäämiseksi voimassa olevaan joukkoon vain siltä ajalta, kun niitä todella tarvitaan.
  • Perinnöllinen käyttöoikeudet ovat niitä, jotka voidaan periä synnytetyn aliprosessin saavutettavissa olevaan joukkoon. Leikkauksen aikana fork() tai clone() aliprosessille annetaan aina kopio emoprosessin käyttöoikeuksista, koska se suorittaa edelleen samaa suoritettavaa tiedostoa siinä vaiheessa. Perinnöllistä joukkoa käytetään, kun exec() (tai vastaava) kutsutaan korvaamaan suoritettava tiedosto toisella. Tässä vaiheessa prosessin käytettävissä oleva joukko peitetään periytyvällä joukolla, jotta saadaan käytettävissä oleva joukko, jota käytetään uudessa prosessissa.

Hyödyllisyys siis setcap antaa meille mahdollisuuden lisätä näiden kolmen joukon käyttöoikeudet erikseen tietylle suoritettavalle tiedostolle. Huomaa, että ryhmien merkitys tulkitaan hieman eri tavalla tiedostojen käyttöoikeuksille:

  • saatavissa tiedostooikeudet ovat ne, jotka ovat aina käytettävissä suoritettavalle tiedostolle, vaikka sitä kutsuneella pääprosessilla ei niitä olisi ollut. Niitä kutsuttiin ennen "pakollisiksi" lupiksi.
  • Peritty tiedostooikeudet määrittelevät lisämaskin, jota voidaan käyttää myös oikeuksien poistamiseen kutsuprosessin joukosta. Ne pätevät kutsuprosessin perityn joukon lisäksi, joten lupa peritään vain, jos se on olemassa molemmissa joukoissa.
  • Tehokas tiedostooikeudet ovat itse asiassa vain yksi bitti, eivät joukko, ja jos ne on asetettu, se tarkoittaa, että koko käytettävissä oleva joukko kopioidaan myös uuden prosessin voimassa olevaan joukkoon. Tällä voidaan lisätä käyttöoikeuksia prosesseihin, joita ei ole erityisesti kirjoitettu pyytämään niitä. Koska se on yksibittinen, jos asetat sen mille tahansa luville, se on asetettava kaikille luville. Voit ajatella sitä vanhana bittinä, koska sitä käytetään sallimaan käyttöoikeuksien käyttö sovelluksille, jotka eivät tue niitä.

Kun määrität käyttöoikeuksia kautta setcap kolme kirjainta e, i и p viitata tehokas, perinnöllinen ja saavutettavissa oleva sarjat vastaavasti. Eli aikaisempi spesifikaatio:

sudo setcap cap_net_raw=eip tracewalk

...osoittaa, että resoluutio CAP_NET_RAW on lisättävä käytettävissä oleviin ja periytyviin joukkoihin ja että myös tehollinen bitti on asetettava. Tämä ohittaa tiedostolle aiemmin asetetut käyttöoikeudet. Jos haluat määrittää useita käyttöoikeuksia kerralla, käytä pilkuilla eroteltua luetteloa:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Käyttöoikeusopas käsittelee tätä kaikkea yksityiskohtaisemmin, mutta toivottavasti tämä viesti on selventänyt sitä, mitä tapahtuu. On vain muutama varoitus ja temppu mainittava.

Ensinnäkin tiedostoominaisuudet eivät toimi symbolilinkkien kanssa – sinun on käytettävä niitä itse binääritiedostossa (eli symbolin kohteen kohteessa).

Toiseksi ne eivät toimi tulkittujen skriptien kanssa. Jos sinulla on esimerkiksi Python-skripti, jolle haluat antaa käyttöoikeuden, sinun on määritettävä se itse Python-tulkijalle. Ilmeisesti tämä on mahdollinen tietoturvaongelma, koska silloin kaikilla tulkin avulla suoritetuilla skripteillä on määritetyt käyttöoikeudet, vaikka tämä on silti huomattavasti parempi kuin SUID-muodostaminen. Yleisin ratkaisu näyttää olevan kirjoittaa erillinen suoritettava tiedosto C-kielellä tai vastaavalla, joka voi suorittaa tarvittavat toiminnot ja kutsua sitä komentosarjasta. Tämä on samanlainen kuin Wiresharkin käyttämä lähestymistapa, joka käyttää binääriä /usr/bin/dumpcap suorittaa etuoikeutettuja toimintoja:

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

Kolmanneksi tiedostojen käyttöoikeudet estetään, jos käytät ympäristömuuttujaa LD_LIBRARY_PATH ilmeisistä turvallisuussyistä(1). Sama koskee LD_PRELOAD, minun tietääkseni.

1. Koska hyökkääjä voi ilmeisesti korvata yhden vakiokirjastoista ja käyttää LD_LIBRARY_PATHpakottaa sen kirjaston kutsumaan etusijalla järjestelmän kirjastoon verrattuna, ja siksi sen oma mielivaltainen koodi suoritetaan samoilla oikeuksilla kuin kutsuva sovellus.

Siinä kaikki. Tarkemmat tiedot kurssiohjelmasta löydät osoitteesta webinaari, joka järjestetään 24. tammikuuta.

Lähde: will.com

Lisää kommentti