SUID ja SGID Linuxissa selitettynä esimerkkien avulla
On 1 lokakuun, 2021 by adminKuvittele tilanne, jossa sinulla on skripti tai suoritettava tiedosto, joka on aina suoritettava tietyllä käyttäjällä yksinkertaisesti siksi, että kyseisellä käyttäjällä on oikeat käyttöoikeudet skriptin suorittamiin toimiin. Haluat myös muiden käyttäjien voivan suorittaa kyseisen skriptin, mutta viime kädessä se on kuitenkin ajettava skriptin alkuperäisenä käyttäjänä (koska kyseisellä käyttäjällä on vain vaaditut käyttöoikeudet suoritettaviin toimiin).
Linux-sovellukset ja -ohjelmat ajetaan oletusarvoisesti täsmälleen samoilla käyttöoikeuksilla kuin käyttäjä, joka ne suorittaa. Tästä syystä tarvitsemme hyvän ratkaisun edellä mainittuun tilanteeseen (eli: Kaikkien käyttäjien pitäisi pystyä suorittamaan tietyn käyttäjän omistama ohjelma ikään kuin omistaja itse suorittaisi sen).
Tässä kohtaa SUID tulee kuvaan. SUID ei ole mitään muuta kuin Linuxissa käytettävissä oleva erikoisoikeusbitti, jolla tämä saavutetaan erittäin helposti.
Jos olet suoritettavan tiedoston omistaja, SUID-oikeusmäärityksen avulla muut käyttäjät suorittavat suoritettavan tiedoston sinun luvallasi eivätkä heidän luvallaan.
SUID-oikeutta käytetään tavallisesti Linuxissa antamaan korotettuja oikeuksia väliaikaisesti suorituksen aikana. Tämä oikeuksien korottaminen ei ole lainkaan pysyvää. Se on väliaikainen korotus vain ohjelman/skriptin suorituksen aikana.
Esimerkkejä suoritettavista tiedostoista Linuxissa, joissa SUID-oikeudet on asetettu
Ymmärretään tämä tarkastelemalla esimerkkiä. Yllä olevasta suoritettavien tiedostojen luettelosta /usr/bin/passwd on jotain, jonka kaikkien järjestelmän käyttäjien pitäisi olla suoritettavissa (tämä johtuu siitä, että kaikkien käyttäjien pitäisi pystyä vaihtamaan oma salasanansa). Jos et tiedä, miten salasanat toimivat linuxissa, suosittelen lukemaan alla olevan artikkelin.
Lue: Miten salasanat toimivat Linuxissa
Käyttäjän salasanan päivittäminen vaatii käyttäjän muokkaamaan /etc/passwd, /etc/shadow tiedostoa linuxissa. Tämä on kuitenkin sallittua vain root-käyttäjälle. Tästä syystä tiedostoon /usr/bin/passwd sovelletaan SUID-bittiä. Koska root on kyseisen tiedoston omistaja ja SUID on asetettu kyseiseen tiedostoon, kuka tahansa käyttäjä, joka suorittaa komennon /usr/bin/passwd, suorittaa sen root-käyttäjänä. Katsotaanpa tätä käytännössä.
Alhaalla näkyy sarath-nimisen käyttäjän antama passwd-komento. Katsotaan, suoritetaanko tuo passwd-komentoprosessi pääkäyttäjänä.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Avataan toinen terminaali ja käynnistetään ps aux commad ja katsotaan, suoritetaanko passwd-komentoprosessi pääkäyttäjänä. Tämä voidaan tehdä alla esitetyllä tavalla.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Voit selvästi nähdä, että passwd-komentoprosessi on käynnissä pääkäyttäjällä (näkyy yllä olevan tulosteen ensimmäisessä kentässä.). Samoin kuin passwd-komento, mikä tahansa komento aiemmin esitetystä SUID-käytössä olevien tiedostojen luettelosta suoritetaan aina tiedoston omistajan luvalla riippumatta siitä, mikä käyttäjä sitä suorittaa.
Huomaa myös se tosiasia, että jopa ping-komento on SUID-komento (ks. edellä esitetty alkuperäinen lista), tämä johtuu siitä, että PINGin suorittaminen vaatii useita verkko-operaatioita, jotka vain root voi suorittaa.
Miten SUID-komento määritetään Linuxissa?
SUID-komentojen määrittäminen tarvitsemillesi tiedostoille/skripteille on vain yhden CHMOD-komennon päässä.
$ chmod u+s /path/to/file/or/executable
Korvaa yllä olevassa komennossa oleva ”/path/to/file/or/executable” sen skriptin absoluuttisella polulla, johon tarvitset SUID-bitin. Tämä onnistuu myös käyttämällä chmodin numeerista menetelmää.
$ chmod 4755 /path/to/file/or/executable
Ensimmäinen ”4” sanassa ”4755” tarkoittaa SUID-koodia. Toinen esimerkki numeerisesta menetelmästä on esitetty alla.
$ chmod 4750 /path/to/file/or/executable
Periaatteessa numeerisessa menetelmässä yksinkertaisesti lisätään 4 muiden kyseisessä tiedostossa tarvittavien käyttöoikeussarjojen eteen.
Miten tarkistetaan, onko tiedostoon sovellettu SUID-bittiä vai ei?
Voit tarkistaa, onko tiedostoon sovellettu SUID-bittiä vai ei, käyttämällä ls-komentoa alla esitetyllä tavalla.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
ls -l-komennon pitäisi näyttää, onko SUID-bittiä käytetty vai ei. Katso vain ls -l -tulosteen ensimmäistä kenttää. S-kirjain -rwsr-xr-x tarkoittaa SUID-bittiä. Joissakin tapauksissa näet ison S-kirjaimen edellä näkemämme pienen s-kirjaimen sijasta. Iso S tarkoittaa, että kyseiseen tiedostoon tai komentosarjaan ei ole sovellettu suoritusoikeutta.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Yllä olevasta tulosteesta näkyy selvästi, että suoritusluvan poistaminen tiedostosta /usr/bin/passwd muutti ls -l:n tulosteen isoksi S:ksi. Suoritusluvan lisääminen takaisin kyseiseen tiedostoon muuttaa sen pieneksi s:ksi, kuten alla näkyy.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Miten löytää kaikki tiedostot, joissa SUID-bitti on käytössä linuxissa?
Voit käyttää alla olevaa find-komentoa etsiessäsi järjestelmästä kaikki tiedostot, joissa SUID-bitti on käytössä. Jos find-komento on sinulle uusi, suosittelen lukemaan alla olevan artikkelin.
Lue: Etsi-komento Linuxissa esimerkkeineen
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Korvaa yllä olevassa komennossa ensimmäinen / haluamallasi sijainnilla löytääksesi kaikki SUID-tiedostot kyseisestä sijainnista. Jos haluat esimerkiksi löytää kaikki tiedostot, joissa on SUID, /usr/bin:n sisältä, suorita alla oleva komento.
Muista, että Linuxissa SUID-bitti jätetään huomioimatta hakemistoissa.
SGID on hyvin samankaltainen kuin SUID. Ainoa ero on, että skripti/tiedosto, johon on määritetty SGID, suoritetaan ryhmän omistajan oikeuksilla.
Jos määrität SGID:n hakemistoihin, kaikki kyseisen hakemiston sisällä luodut tiedostot tai hakemistot ovat saman yhteisen ryhmän omistuksessa(sen hakemiston ryhmän omistaja, johon SGID on määritetty).
Esimerkkejä SGID-tiedostoista linuxissa
Miten SGID:n konfigurointi tapahtuu Linuxissa?
Samankaltainen kuin SUID, SGID voidaan konfiguroida käyttämällä chmod-komentoa alla esitetyllä tavalla.
root@localhost:~# chmod g+s /path/to/file
Korvaa ”/path/to/file”, yllä olevassa komennossa, sen skriptin absoluuttisella polulla, johon tarvitset SGID-bitin. Tämä onnistuu myös käyttämällä chmodin numeerista menetelmää (näkyy alla).
root@localhost:~# chmod 2755 /path/to/file
Miten tarkistaa, onko SGID käytössä tiedostossa tai komentosarjassa?
SuIDin tapaan voit helposti suorittaa ls -l-komennon tiedostolle/hakemistolle selvittääksesi, onko SGID käytössä vai ei. Alla esitetty esimerkki osoittaa saman.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Tiedoston about (-rwxr-sr-x) ensimmäisen kentän pieni s-osa osoittaa SGID-bitin. Samoin kuin SUID, jos ryhmään ei ole sovellettu suoritusoikeutta, se on isolla S:llä pienen S:n sijaan, kuten alla näkyy.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
Ja suoritusoikeuden ottaminen käyttöön ryhmässä tekee siitä pienen s:n (näkyy alla.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Vastaa