• Dave McKay

    @TheGurkha

  • Helmikuu 26, 2020, 8:00am EDT
Fatmawati Achmad Zaenuri/

SUID, SGID ja Sticky Bits ovat tehokkaita erikoisoikeuksia, joita voit asettaa suoritettaville tiedostoille ja hakemistoille Linuxissa. Kerromme niiden käytön hyödyistä – ja mahdollisista sudenkuopista.

Ne ovat jo käytössä

Turvallisuuden rakentaminen monikäyttäjäkäyttöjärjestelmään aiheuttaa useita pulmia. Otetaan esimerkiksi salasanojen (näennäisesti) peruskäsite. Ne kaikki on tallennettava, jotta järjestelmä voi joka kerta, kun joku kirjautuu sisään, verrata hänen kirjoittamaansa salasanaa tallennettuun kopioon. On selvää, että koska salasanat ovat valtakunnan avaimia, ne on suojattava.

Linuxissa tallennetut salasanat on suojattu kahdella tavalla: ne on salattu, ja vain henkilö, jolla on root-oikeudet, pääsee käsiksi tiedostoon, joka sisältää salasanat. Tämä saattaa kuulostaa hyvältä, mutta se aiheuttaa pulman: Jos vain henkilöt, joilla on root-oikeudet, pääsevät käsiksi tallennettuihin salasanoihin, miten ne, joilla ei ole kyseisiä oikeuksia, voivat vaihtaa salasanansa?

Statuksen nostaminen

Vakiintuneesti Linux-komennot ja -ohjelmat ajetaan samoilla käyttöoikeuksilla kuin se henkilö, joka käynnistää ohjelman. Kun root suorittaa komennon passwd vaihtaakseen salasanan, se suoritetaan root:n oikeuksilla. Tämä tarkoittaa, että passwd-komento pääsee vapaasti käsiksi /etc/shadow-tiedostoon tallennettuihin salasanoihin.

Mainos

Ideaalinen olisi järjestelmä, jossa kuka tahansa järjestelmässä voisi käynnistää passwd-ohjelman, mutta passwd-ohjelma säilyttäisi root:n korotetut oikeudet. Tämä antaisi kenelle tahansa mahdollisuuden vaihtaa oman salasanansa.

Yllä oleva skenaario on juuri se, mitä Set User ID -bitti (SUID) tekee. Se suorittaa ohjelmat ja komennot tiedoston omistajan oikeuksilla, eikä ohjelman käynnistävän henkilön oikeuksilla.

Osaat nostaa ohjelman asemaa

Tässä on kuitenkin toinenkin pulma. Henkilöä on estettävä sekaantumasta kenenkään muun salasanaan. Linux sisältää SUID-järjestelmän, jonka avulla se voi ajaa sovelluksia tilapäisesti lainatuilla oikeuksilla – mutta se on vain puolet tietoturvatarinasta.

Mainos

Valvontamekanismi, joka estää jotakuta työskentelemästä toisen henkilön salasanalla, sisältyy passwd-ohjelmaan, ei käyttöjärjestelmään eikä SUID-järjestelmään.

Ohjelmat, jotka toimivat korotetuilla oikeuksilla, voivat aiheuttaa tietoturvariskejä, jos niitä ei ole luotu ”suunnittelun avulla toteutettu tietoturva” -ajattelutavan mukaisesti. Se tarkoittaa, että turvallisuus on ensimmäinen asia, joka otetaan huomioon, ja sitten rakennetaan sen pohjalta. Älä kirjoita ohjelmaa ja yritä sitten jälkikäteen antaa sille turvatakki.

Avoimen lähdekoodin ohjelmistojen suurin etu on se, että voit tarkastella lähdekoodia itse tai viitata sen luotettaviin vertaisarviointeihin. passwd ohjelman lähdekoodissa on tarkistuksia, joten voit nähdä, onko ohjelman suorittaja root. Erilaiset ominaisuudet sallitaan, jos joku on root (tai joku, joka käyttää sudo:aa).

Tässä on koodi, joka havaitsee, onko joku root.

Seuraavassa on esimerkki, jossa tämä on otettu huomioon. Koska root voi vaihtaa minkä tahansa salasanan, ohjelman ei tarvitse vaivautua tarkistuksiin, joita se yleensä tekee nähdäkseen, mitä salasanoja henkilöllä on lupa vaihtaa. Joten root:n kohdalla se ohittaa nämä tarkistukset ja poistuu tarkistustoiminnosta.

Mainos

Linuxin keskeisten komentojen ja apuohjelmien kohdalla voit luottaa siihen, että niissä on sisäänrakennettu tietoturva ja että koodi on tarkistettu monta kertaa. Tietenkin on aina olemassa vielä tuntemattomien hyväksikäyttökohteiden uhka. Korjaukset tai päivitykset ilmestyvät kuitenkin nopeasti uusien haavoittuvuuksien korjaamiseksi.

Kolmansien osapuolten ohjelmistojen – erityisesti sellaisten, jotka eivät ole avoimen lähdekoodin ohjelmistoja – kanssa on oltava erittäin varovainen SUID. Emme sano, että älä tee sitä, mutta jos teet niin, haluat varmistaa, ettei se altista järjestelmääsi riskeille. Et halua nostaa sellaisen ohjelman oikeuksia, joka ei hallitse itse itseään ja sitä käyttävää henkilöä oikein.

Linux-komennot, jotka käyttävät SUIDia

Seuraavassa on muutamia Linux-komentoja, jotka käyttävät SUID-bittiä antaakseen komennolle korotetut oikeudet, kun tavallinen käyttäjä suorittaa sen:

ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Huomaa, että tiedostonimet on korostettu punaisella, mikä tarkoittaa, että SUID-bitti on asetettu.

Mainos

Tiedoston tai hakemiston käyttöoikeudet esitetään yleensä kolmella kolmen merkin ryhmällä: rwx. Nämä tarkoittavat read, write ja execute. Jos kirjaimet ovat läsnä, kyseinen oikeus on myönnetty. Jos kirjaimen sijasta on kuitenkin väliviiva (-), kyseistä käyttöoikeutta ei ole annettu.

Näitä oikeuksia on kolme ryhmää (vasemmalta oikealle): tiedoston omistajalle, tiedoston ryhmän jäsenille ja muille. Kun SUID-bitti on asetettu tiedostoon, ”s” tarkoittaa omistajan suoritusoikeutta.

Jos SUID-bitti on asetettu tiedostoon, jolla ei ole suoritusoikeutta, isolla kirjaimella kirjoitettu ”S” tarkoittaa tätä.

Katsomme esimerkkiä. Tavallinen käyttäjä dave kirjoittaa komennon passwd:

passwd

Mainos

Komento passwd kysyy dave:lta uutta salasanaa. Voimme käyttää komentoa ps nähdäksemme käynnissä olevien prosessien tiedot.

Käytämme komentoa ps yhdessä komennon grep kanssa toisessa terminaali-ikkunassa ja etsimme prosessia passwd. Käytämme myös vaihtoehtoja -e (jokainen prosessi) ja -f (täysi muoto) yhdessä ps:n kanssa.

Kirjoitamme seuraavan komennon:

ps -e -f | grep passwd

Raportoidaan kaksi riviä, joista toinen on grep-prosessi, joka etsii komentoja, joissa on merkkijono ”passwd”. Meitä kiinnostaa kuitenkin ensimmäinen rivi, koska se koskee passwd-prosessia, jonka dave käynnisti.

Voidaan nähdä, että passwd-prosessi toimii samalla tavalla kuin se toimisi, jos root olisi käynnistänyt sen.

SUID-bitin asettaminen

SuID-bitin SUID muuttaminen on helppoa chmod:llä. Symbolinen tila u+s asettaa SUID-bitin ja symbolinen tila u-s tyhjentää SUID-bitin.

Mainos

Luotuamme joitakin SUID-bitin käsitteitä havainnollistamaan loimme pienen ohjelman nimeltä htg. Se on dave-käyttäjän juurihakemistossa, eikä siinä ole SUID-bittiä asetettu. Kun se suoritetaan, se näyttää todellisen ja todellisen käyttäjätunnuksen (UID).

Todellinen UID kuuluu ohjelman käynnistäneelle henkilölle. Efektiivinen ID on tili, jolla ohjelma käyttäytyy ikään kuin sen olisi käynnistänyt.

Kirjoitamme seuraavan:

ls -lh htg
./htg

Kun suoritamme ohjelman paikallisen kopion, näemme, että sekä todellinen että efektiivinen ID on dave. Se käyttäytyy siis aivan kuten normaalin ohjelman pitäisi.

Mainos

Kopioidaan se /usr/local/bin-hakemistoon, jotta muut voivat käyttää sitä.

Kirjoitetaan seuraava, käytetään chmod asettamaan SUID-bitti, ja tarkistetaan sitten, että se on asetettu:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Ohjelma on siis kopioitu, ja SUID-bitti on asetettu. Käynnistetään se uudelleen, mutta tällä kertaa ajetaan kopio kansiossa /usr/local/bin:

htg

Vaikka dave käynnisti ohjelman, teholliseksi ID:ksi on asetettu root-käyttäjä. Jos siis mary käynnistää ohjelman, sama tapahtuu alla olevan kuvan mukaisesti:

htg

Mainos

Todellinen tunnus on mary, ja todellinen tunnus on root. Ohjelma suoritetaan pääkäyttäjän oikeuksilla.

RELATED: Miten chmod-komentoa käytetään Linuxissa

SGID-bitti

Set Group ID (SGID) -bitti on hyvin samanlainen kuin SUID-bitti. Kun SGID-bitti asetetaan suoritettavassa tiedostossa, tehokas ryhmä asetetaan tiedoston ryhmäksi. Prosessi suoritetaan tiedoston ryhmän jäsenten oikeuksilla eikä sen käynnistäneen henkilön oikeuksilla.

Parannimme htg-ohjelmaamme niin, että se näyttää myös tehokkaan ryhmän. Muutamme ohjelman htg ryhmäksi käyttäjän mary oletusryhmän mary. Käytämme myös symbolisia tiloja u-s ja g+s yhdessä chown:n kanssa poistaaksemme bitin SUID ja asettaaksemme bitin SGID.

Tehdäksemme näin kirjoitamme seuraavaa:

sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

Näet, että SGID-bittiä merkitään ”s”:llä ryhmän käyttöoikeuksissa. Huomaa myös, että ryhmäksi on asetettu mary ja tiedostonimi on nyt korostettu keltaisella.

Mainos

Ennen ohjelman suorittamista määritetään, mihin ryhmiin dave ja mary kuuluvat. Käytämme komentoa id, jossa on -G (ryhmät) -vaihtoehto, tulostaaksemme kaikki ryhmätunnukset. Sitten suoritamme ohjelman htg nimellä dave.

Kirjoitamme seuraavat komennot:

id -G dave
id -G mary
htg

Vakioryhmän mary tunnus on 1001, ja ohjelman htg tehokas ryhmä on 1001. Vaikka ohjelman käynnisti siis dave, se toimii mary-ryhmän jäsenten oikeuksilla. Se on sama kuin jos dave olisi liittynyt ryhmään mary.

Sovelletaan SGID-bittiä hakemistoon. Luodaan ensin hakemisto nimeltä ”work” ja muutetaan sen ryhmä muotoon ”geek”. Tämän jälkeen asetamme hakemistoon SGID-bitin.

Kun käytämme ls:tä hakemiston asetusten tarkistamiseen, käytämme myös -d (hakemisto) -vaihtoehtoa, jotta näemme hakemiston tiedot, emme sen sisältöä.

Kirjoitamme seuraavat komennot:

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

Mainos

SGID-bitti ja ”geek”-ryhmä on asetettu. Nämä vaikuttavat kaikkiin kohteisiin, jotka luodaan hakemistoon work.

Kirjoitetaan seuraava, jotta päästään hakemistoon work, luodaan hakemisto nimeltä ”demo” ja tarkistetaan sen ominaisuudet:

cd work
mkdir demo
ls -lh -d demo

Hakemistoon nimeltä ”demo” otetaan automaattisesti käyttöön SGID-bitti ja ryhmä ”geek”.

Luotaan seuraavalla tavalla tiedosto komennolla touch ja tarkistetaan sen ominaisuudet:

touch useful.sh
ls -lh useful.sh

Mainos

Uuden tiedoston ryhmäksi asetetaan automaattisesti ”nörtti”.

LUETTELE: Kuinka käyttää chown-komentoa Linuxissa

Tahmainen bitti

Tahmainen bitti on saanut nimensä sen historiallisesta tarkoituksesta. Kun se asetettiin suoritettavaan tiedostoon, se merkitsi käyttöjärjestelmälle, että suoritettavan tiedoston tekstiosuudet tulisi pitää swapissa, jolloin niiden uudelleenkäyttö nopeutuu. Linuxissa sticky-bitti vaikuttaa vain hakemistoon – sen asettaminen tiedostoon ei olisi järkevää.

Kun asetat sticky-bitin hakemistoon, ihmiset voivat poistaa vain heille kuuluvia tiedostoja kyseisestä hakemistosta. He eivät voi poistaa jollekin toiselle kuuluvia tiedostoja riippumatta siitä, mikä tiedostojen käyttöoikeusyhdistelmä tiedostoille on asetettu.

Siten voit luoda hakemiston, jota kaikki – ja heidän käynnistämänsä prosessit – voivat käyttää jaettuna tiedostovarastona. Tiedostot ovat suojattuja, koska taas kukaan ei voi poistaa kenenkään toisen tiedostoja.

Mainos

Luotaan hakemisto nimeltä ”shared”. Käytämme o+t symbolista tilaa chmod:llä asettaaksemme sticky-bitin tuohon hakemistoon. Tarkastelemme sitten kyseisen hakemiston sekä hakemistojen /tmp ja /var/tmp käyttöoikeuksia.

Kirjoitamme seuraavat komennot:

mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

Jos tahmea bitti on asetettu, tiedostojen käyttöoikeuksien joukon ”muut” suoritettava bitti asetetaan arvoon ”t”. Tiedoston nimi on myös korostettu sinisellä.

Kansiot /tmp ja /var/tmp ovat kaksi esimerkkiä hakemistoista, joihin on asetettu kaikki tiedostojen käyttöoikeudet omistajalle, ryhmälle ja muille (siksi ne on korostettu vihreällä). Niitä käytetään tilapäistiedostojen yhteisinä sijaintipaikkoina.

Mainos

Näillä oikeuksilla kenen tahansa pitäisi teoriassa pystyä tekemään mitä tahansa. Tahmea bitti kuitenkin ohittaa ne, eikä kukaan voi poistaa tiedostoa, joka ei kuulu hänelle.

Muistutuksia

Seuraava on nopea muistilista siitä, mitä käsiteltiin edellä myöhempää käyttöä varten:

  • SUID toimii vain tiedostojen kohdalla.
  • Voit soveltaa SGID:a hakemistoihin ja tiedostoihin.
  • Voit soveltaa tahmeaa bittiä vain hakemistoihin.
  • Jos ”s”, ”g” tai ”t”-ilmaisimet näkyvät suuraakkosina, suoritettavaa bittiä (x) ei ole asetettu.
Dave McKay
Dave McKay käytti tietokoneita ensimmäisen kerran silloin, kun rei’itetty paperiteippi oli muodissa, ja hän on ohjelmoinut siitä lähtien. Yli 30 vuotta tietotekniikka-alalla työskenneltyään hän on nyt päätoiminen teknologiatoimittaja. Uransa aikana hän on työskennellyt freelance-ohjelmoijana, kansainvälisen ohjelmistokehitystiimin johtajana, IT-palvelujen projektipäällikkönä ja viimeksi tietosuojavastaavana. Dave on Linux-evankelista ja avoimen lähdekoodin puolestapuhuja.Read Full Bio ”

Vastaa

Sähköpostiosoitettasi ei julkaista.