Ominaisuudet mahdollistavat joidenkin tärkeiden järjestelmäoikeuksien arvioinnin erillisessä säikeessä, joka eroaa nykyisestä prosessista. Tällä tavalla sinun ei tarvitse ajaa ohjelmaa pääkäyttäjänä, jotta se voi käyttää tiettyjä järjestelmän osia.

Tarpeista johtuvana ratkaisuna POSIX.1e: n kohta 25 käsittelee tätä asiaa. Tässä osiossa määriteltyjen oikeuksien ja muiden oikeuksien kehitys on saatu päätökseen Linux-ytimen version 2.6.26 julkaisun myötä. Tässä on kaikki, mitä sinun tulee tietää Linux-ytimen ominaisuuksista.

Ominaisuuksien API-logiikan ymmärtäminen

Valtuutusvalvonta Unix-pohjaisissa järjestelmissä koostuu kahdesta vaiheesta:

  • Jos käynnissä olevan sovelluksen nykyinen omistaja (voimassa oleva käyttäjätunnus, EUID) on nolla, järjestelmä ei tarkista valtuutusta
  • Jos EUID-arvo on eri kuin nolla, järjestelmä suorittaa ohjausprosessin kyseisen sovelluksen tehokkaan käyttäjän ja ryhmän valtuuksien mukaisesti.

Joillakin sovelluksilla on oltava laajemmat oikeudet (SUID, SGIT-bitit) toiminnan aikana. Tyypillisinä esimerkkinä voit ajatella

instagram viewer
passwd-sovellus. Tämän avulla järjestelmän käyttäjät voivat vaihtaa salasanansa. Kuitenkin kirjoittaa /etc/shadow tiedosto, jossa salatut salasanat säilytetään, on työskenneltävä pääkäyttäjän oikeuksilla (eli käyttäjätunnus = 0).

Tämän ongelman ratkaisemiseksi passwd-sovelluksessa on SUID-bitti. Riippumatta siitä, kumpi käyttäjä käyttää tätä sovellusta, aktiivinen omistaja (EUID) on aina pääkäyttäjä:

ls -l /usr/bin/passwd

# Lähtö
-rwsr-xr-x. 1 juurijuuri 32552 23. heinäkuuta 2021 /usr/bin/passwd

Mahdollisuus ajaa SUID-sovelluksia perinteisessä Unix-todennusmallissa näyttää ratkaisneen ongelman. Kuitenkin kriittiset virheet sovelluksissa, joissa on SUID-bittejä, avaavat oven ei-toivottujen koodien suorittamiselle käyttäjille, joilla on täydet oikeudet järjestelmässä. Ihanteellisen sovelluksen tulisi kyetä toimimaan ilman pääkäyttäjän oikeuksia, jos mahdollista.

Ongelma ei lopu vain SUID-bittiin. Sinulla on oltava myös pääkäyttäjän oikeudet, kun haluat kuunnella a etuoikeutettu TCP- tai UDP-portti alle 1024 Unix-pohjaisissa järjestelmissä. Jotta voit esimerkiksi kuunnella verkkopalvelimen TCP 80 -porttia, sinun on suoritettava sovellus pääkäyttäjänä.

Vuosien varrella on ymmärretty, kuinka tuhoisaa on ajaa ohjelmistoja, jotka palvelevat verkkoympäristöä täysin valtuutetulla käyttäjätilillä. Väliaikaisena ratkaisuna otettiin käyttöön, että vain tietty ja pienempi osa ohjelmasta kuuntelee etuoikeutetussa portissa pääkäyttäjänä, ja vaihtaa sitten aktiivisen käyttäjätunnuksen toiseksi käyttäjäksi myöhempiä prosesseja varten (esimerkiksi ei kukaan käyttäjä, jolla on rajoitetut oikeudet).

Tämä vuosia käytetty järjestelmä on yksinkertaisuudellaan toiminut hyvin ja sitä käytetään edelleen tehokkaasti. Nykyään on kuitenkin mahdollista saada joitain lisäominaisuuksia, sovelluskohtaisia, Linux-ominaisuuksien API: n kautta ilman pääkäyttäjän oikeuksia edellä mainittujen lisäksi järjestelmä.

Linux-ominaisuusmalli, selitetty!

Löydät Linux-ytimestä kattavimman suorituskyvyn API: n toteutuksen. Myös nykyaikaiset Linux-jakelut pyrkivät käyttämään tätä uutta mallia järjestelmän laajuisesti niin paljon kuin mahdollista.

Esimerkiksi, jotta ping-sovellus toimisi, sen on kyettävä avaamaan RAW-vastakkeet, jotka on yleensä varattu vain pääkäyttäjille. Vanhoissa Linux-jakeluissa ongelmana on antaa SUID-bitti sovellukselle, jotta normaalit käyttäjät voivat käyttää sitä. Näissä versioissa, kun poistat SUID-bitin sovelluksesta ja yrität ajaa sovellusta tavallisena käyttäjänä, saat seuraavan virheilmoituksen:

ping 8.8.8.8

# Lähtö
ping: icmp open socket: Käyttö ei ole sallittu

Sen sijaan nykyaikaisissa Linux-jakeluissa ping-sovelluksessa ei todennäköisesti ole SUID-bittiä:

ls -l /bin/ping 

# Lähtö
-rwxr-xr-x. 1 juurijuuri 95232 25. heinäkuuta 2021 /bin/ping

Siitä huolimatta voit suorittaa sovelluksen onnistuneesti tavallisena käyttäjänä. Mekanismi, joka tekee tämän mahdolliseksi, on se, että ping-sovelluksella on erityinen ominaisuus CAP_NET_RAW.

Voit oppia sovelluksen lisäominaisuudet käyttämällä getcap komento seuraavasti:

sudo getcap /bin/ping

# Lähtö
/bin/ping cap_net_raw=ep

Jos getcap-komento palauttaa tyhjän vastauksen, voit asettaa tämän arvon manuaalisesti:

sudo setcap cap_net_raw+ep /bin/ping

Prosessikykymalli

Linux-toteutuksessa kunkin prosessin ominaisuudet on ryhmitelty kolmen otsikon alle:

Kyky lausunto
sallittu Tässä klusterissa on luettelo kyseisen prosessin sallituista lisäominaisuuksista. Luvan myöntäminen ei tarkoita, että sitä voidaan käyttää aktiivisesti tuolloin. Tässä olevat valtuutukset on mahdollista sisällyttää tehollisten valmiuksien joukkoon lisätoiminnolla.
tehokas Se näyttää liittyvän prosessin tällä hetkellä aktiivisten ominaisuuksien luettelon. Taitojärjestelmää säätelevien aputoimintojen avulla on mahdollista luopua tai saada takaisin taidosta. Joka tapauksessa tämä voidaan tehdä vain sallittuun ryhmään jo valtuutettujen joukossa.
perinnöllinen Kun sovellus aloittaa uuden prosessin, juuri aloitettu prosessi näyttää luettelon ominaisuuksista, jotka se perii sallittujen luettelosta.

Luettelo sallituista, tehokkaista ja periytyvistä ominaisuuksista käynnissä oleville prosesseille milloin tahansa näytetään bittimaskina riveillä CapPrm, CapEff, ja CapInh tiedostossa /proc//status. Lisäksi CapBnd rivi sisältää kykyrajan ohjaustoiminnossa käytetyn bittimaskin.

Kokeile esimerkiksi lukea käynnissä olevan shell-sovelluksesi arvot tiedostosta /proc/self/status tiedosto:

kissa /proc/itse/tila | grep Cap

# Lähtö
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000

Tiedoston ominaisuusmalli Linuxissa

Tiedostojen kykyjärjestelmän toiminta riippuu edellytyksestä, että nämä ominaisuudet voidaan tallentaa VFS-kerrokseen. Prosessimallin tapaan tiedostojen ominaisuudet jakautuvat kolmen otsikon alle:

1. Sallittu

Järjestelmä määrittää prosessin sallitut ominaisuudet, kun vastaava suoritettava tiedosto suoritetaan tässä klusterissa.

2. Tehokas

Toisin kuin prosessikykymalli, tämä otsikko tallentaa vain yhden bitin: aktiivinen tai ei-aktiivinen. Jos bitti on aktiivinen, tiedoston sallittujen luettelossa määritellyt ominaisuudet ovat automaattisesti käytössä siirretään asianomaisen prosessin tehollisten ominaisuuksien luetteloon, kun tämä tiedosto suoritetaan ja prosessi on luotu. Jos bitti ei ole aktiivinen, tiedoston sallittujen ominaisuuksien automaattista siirtoa käynnissä olevaan prosessiin ei suoriteta.

Jos asianomaisen sovelluksen koodi on kuitenkin integroitu ominaisuusjärjestelmään, se voi aktivoida tiedoston sallitun joukon oikeudet järjestelmäkutsuilla. Tämän toiminnan päätarkoitus on varmistaa, että vanhat sovellukset, jotka eivät sisällä ominaisuuksia, ovat järjestelmäkohtaisia koodi, ohjelmistokooditason kehitys voi toimia ominaisuusjärjestelmän kanssa ilman lähdekoodin tarvetta muutoksia.

Saatat ajatella, että paremmin kirjoitetut sovellukset käyttävät ominaisuuksia vain tarvittaessa. Jos bitti on aktiivinen, kaikki sallittujen luettelon ominaisuudet aktivoituvat sovelluksen käynnistyessä.

3. Perinnöllinen

Kuten prosessimallissa, asiaankuuluva tiedosto suoritetaan ja prosessi tapahtuu. Jos toinen sovellus käynnistyy prosessin sisällä sen jälkeen, se sisällytetään uuden prosessin sallittujen luetteloon. Yhteenvetona se osoittaa luettelon perittävistä ominaisuuksista.

Ominaisuuksien rooli Linux-järjestelmässä

Kun suoritat tiettyä prosessia tavallisena käyttäjänä, sinulla ei ole oikeuksia. Tämän seurauksena voit käyttää vain osioita, jotka järjestelmä sallii tavallisille käyttäjille. Pääsyy tähän on järjestelmän turvallisuuden kiristäminen ja tällaisten toimenpiteiden toteuttaminen.

Kaikkien käyttäjien pääsy kaikkiin resursseihin voi luoda vakavan tietoturvahaavoittuvuuden. Järjestelmää haitallisiin tarkoituksiin käyttävien ihmisten on erittäin helppoa hyödyntää järjestelmän haavoittuvuuksia. Linux-ominaisuudet ovat hyödyllisiä tällaisissa asioissa. Voit helposti vahvistaa sovellustesi turvallisuutta ytimen tuottamilla API-ominaisuuksilla.

Linuxin ominaisuudet ovat vain yksi niistä ongelmista, joita on harkittava, jotta voidaan tehdä erittäin tehokkaita menetelmiä, kuten pääkäyttäjän jakaminen käyttöoikeudet, erilaisten käyttöoikeuksien myöntäminen etuoikeutetuille käyttäjille ja erilaisten varotoimien toteuttaminen Internet-palveluiden avoimista porteista Linux-palvelimet.

Paranna Linux-palvelimesi turvallisuutta näillä 7 kovetusvaiheella

Lue Seuraava

JaaTweetJaaSähköposti

Liittyvät aiheet

  • Linux
  • Ohjelmointi
  • Linux-ydin
  • Käyttöjärjestelmä

Kirjailijasta

Fatih Küçükkarakurt (8 artikkelia julkaistu)

Insinööri ja ohjelmistokehittäjä, joka on matematiikan ja tekniikan fani. Hän on aina pitänyt tietokoneista, matematiikasta ja fysiikasta. Hän on kehittänyt pelimoottoriprojekteja sekä koneoppimista, keinotekoisia hermoverkkoja ja lineaarisia algebrakirjastoja. Lisäksi työskentelee edelleen koneoppimisen ja lineaaristen matriisien parissa.

Lisää Fatih Küçükkarakurtilta

tilaa uutiskirjeemme

Liity uutiskirjeemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja eksklusiivisia tarjouksia!

Klikkaa tästä tilataksesi