setuid ja setgid (lyhenne sanoista set user ID execution ja set group ID upon execution ) ovat Unix -käyttöoikeuslippuja , joiden avulla käyttäjät voivat suorittaa suoritettavia tiedostoja suoritettavan tiedoston omistajan tai ryhmän oikeuksilla.
Unixin kaltaisissa järjestelmissä sovellus ajetaan määritetyn sovelluksen käynnistäneen käyttäjän oikeuksilla. Tämä tarjoaa lisäturvaa, koska käyttäjäprosessi ei voi saada kirjoitusoikeutta tärkeisiin järjestelmätiedostoihin, kuten /etc/passwd , jonka omistaa root .
Jos suoritettavalle tiedostolle on asetettu suid-bitti, tämä ohjelma muuttaa suoritettaessa automaattisesti "tehokkaan käyttäjätunnuksen" tiedoston omistavan käyttäjän tunnisteeksi. Toisin sanoen riippumatta siitä, kuka tätä ohjelmaa suorittaa, sillä on suoritettaessa tämän tiedoston omistajan oikeudet.
Suid-terän keksi Dennis Ritchie , ja AT&T patentoi sen Yhdysvalloissa vuonna 1979. Myöhemmin julkistettiin patentti 4135240 "Tietostojen sisällön suojaaminen".
Kun tiedostolle on asetettu set u id -attribuutti, tiedostoa suorittava tavallinen käyttäjä korotetaan tiedoston omistajakäyttäjäksi (yleensä root ) käynnissä olevan prosessin aikana . Kun sovellus on korotettu, se voi suorittaa tehtäviä, joita tavallinen käyttäjä ei pystyisi suorittamaan. Järjestelmä estää käyttäjää muuttamasta uutta prosessia. Kilpailutilanteen mahdollisuudesta johtuen monet käyttöjärjestelmät jättävät huomioimatta shell-skriptien set-attribuutin . .
Vaikka set u id -attribuutti on erittäin kätevä monissa tapauksissa, sen väärinkäyttö voi olla turvallisuusriski, kun attribuutti määritetään suoritettavalle tiedostolle , jota ei ole suunniteltu huolellisesti. Käyttäjät voivat hyödyntää alikehittyneiden ohjelmien haavoittuvuuksia saadakseen lisäoikeuksia tai suorittaakseen vahingossa Troijan hevosohjelman .
Määritteen set g id asettaminen antaa ryhmän korkeuden .
Attribuutit setuid ja setgid asetetaan yleensä chmod-komennolla asettamalla ensimmäiseksi bittipariksi 4 (set u id) tai 2 (set g id). Komento asettaa chmod 6711vastaavasti molemmat bittiparit kerralla (4+2=6). Voit myös käyttää merkkiargumentteja asettaaksesi nämä bitit chmod ug+s.
Hakemistoille asetetuilla biteillä setuid ja setgid on hyvin erilainen merkitys.
Hakemiston ( ) asetettu g id -bitti chmod g+ssaa vain uudet hakemistot ja siihen luodut tiedostot perimään kyseisen hakemiston ryhmätunnuksen tiedoston luoneen käyttäjän ryhmätunnuksen sijaan. Uudet alihakemistot perivät myös setgid-bitin. Tämän avulla voit luoda jaetun työtilan ryhmälle ilman, että ryhmän jäsenten on muutettava nykyistä ryhmäään uusien tiedostojen ja hakemistojen luomiseksi.
Periytys asetetaan vain uusille tiedostoille ja hakemistoille. Jo olemassa olevien tiedostojen ja hakemistojen on asetettava tämä bitti manuaalisesti, esimerkiksi:
etsi /polku/hakemistoon -tyyppi d -exec chmod g+s {} \;Huomaa myös, että kaikille tällaisen ryhmän käyttäjille umask on vaihdettava oletusarvosta 0022 arvoon 0012, muuten uusilla tiedostoilla/kansioilla ei ole kirjoitusoikeutta (w) ryhmälle.
Hakemistoille asetettu setuid-bitti jätetään huomiotta useimmissa Unix-versioissa .
Suid/sgid-bittien asettaminen ei-suoritettaville tiedostoille on yleensä turhaa.
Ohjelma, jossa on setuid-bitti asetettu, on "mahdollisesti vaarallinen". "Normaalissa" tapauksessa se ei salli normaalin käyttäjän tehdä mitään, mikä on hänen valtuuksiensa ulkopuolella (esimerkiksi passwd -ohjelma sallii käyttäjän vaihtaa vain oman salasanansa). Mutta jopa pieni virhe tällaisessa ohjelmassa voi johtaa siihen, että hyökkääjä voi pakottaa sen suorittamaan joitain muita toimintoja, joita ohjelman tekijä ei ole tarjonnut.