Mogućnosti omogućuju procjenu nekih važnih privilegija sustava u zasebnoj niti koja se razlikuje od trenutnog procesa. Na ovaj način ne morate pokrenuti program kao root da bi pristupio određenim dijelovima sustava.

Kao rješenje koje proizlazi iz potreba, odjeljak 25 POSIX.1e govori o ovom pitanju. Razvoj privilegija definiranih u tom odjeljku i više dovršen je izdavanjem Linux kernela verzije 2.6.26. Ovdje je sve što trebate znati o mogućnostima u jezgri Linuxa.

Razumijevanje logike API-ja mogućnosti

Kontrola autorizacije u sustavima baziranim na Unixu sastoji se od dva koraka:

  • Ako je trenutni vlasnik (djelotvorni korisnički ID, EUID) pokrenute aplikacije nula, tada sustav ne provjerava autorizaciju
  • Ako je vrijednost EUID-a različita od nule, sustav provodi kontrolni proces u skladu s ovlaštenjima stvarnog korisnika i grupe relevantne aplikacije

Neke aplikacije moraju imati šire privilegije (SUID, SGIT bitovi) tijekom rada. Kao najtipičniji primjer, možete se sjetiti passwd aplikacija. Na taj način korisnici u sustavu mogu promijeniti svoje lozinke. Međutim, pisati na

instagram viewer
/etc/shadow datoteku, gdje se čuvaju šifrirane lozinke, potrebno je raditi s root korisničkim pravima (tj. ID korisnika = 0).

Za rješavanje ovog problema, passwd aplikacija ima SUID bit. Koji god korisnik pokrenuo ovu aplikaciju, aktivni vlasnik (EUID) uvijek će biti root:

ls -l /usr/bin/passwd

# Izlaz
-rwsr-xr-x. 1 root root 32552 23. srpnja 2021. /usr/bin/passwd

Čini se da je mogućnost pokretanja SUID aplikacija u tradicionalnom Unix modelu provjere autentičnosti riješila problem. Međutim, kritične pogreške u aplikacijama sa SUID bitovima otvaraju vrata za pokretanje neželjenih kodova za korisnike s punim ovlaštenjem u sustavu. Idealna aplikacija trebala bi se moći izvoditi bez potrebe za root korisničkim pravima ako je moguće.

Problem ne završava samo s SUID bitom. Također morate imati root korisnička prava kada želite slušati na a privilegirani TCP ili UDP port manje od 1024 na sustavima baziranim na Unixu. Na primjer, da biste mogli slušati TCP 80 port web poslužitelja, morate pokrenuti aplikaciju kao root korisnik.

Tijekom godina postalo je jasno koliko je pogubno pokretati softver koji pruža usluge mrežnom okruženju s potpuno ovlaštenim korisničkim računom. Kao privremeno rješenje, usvojeno je da samo određeni i manji dio programa sluša na privilegiranom portu kao root, a zatim mijenja aktivni korisnički ID u drugog korisnika za naknadne procese (na primjer, nikog korisnika s ograničenim pravima).

Ovaj sustav, koji se koristi godinama, dobro je radio svojom jednostavnošću i još uvijek se učinkovito koristi. Međutim, danas je moguće dobiti neke dodatne mogućnosti, specifične za aplikaciju, putem API-ja za mogućnosti Linuxa, bez potrebe za root pravima, osim gore navedenih sustav.

Model mogućnosti Linuxa, objašnjeno!

Najopsežniju implementaciju API-ja za mogućnosti možete pronaći u jezgri Linuxa. Moderne Linux distribucije također pokušavaju koristiti ovaj novi model u cijelom sustavu što je više moguće.

Na primjer, da bi ping aplikacija radila, mora moći otvoriti RAW utičnice, koje su općenito rezervirane samo za root korisnike. U starim distribucijama Linuxa, problem je dati SUID bit aplikaciji kako bi ga normalni korisnici mogli koristiti. U ovim verzijama, kada uklonite SUID bit iz aplikacije i pokušate pokrenuti aplikaciju kao običan korisnik, dobit ćete sljedeću pogrešku:

ping 8.8.8.8

# Izlaz
ping: icmp open socket: rad nije dopušten

Dok na modernim distribucijama Linuxa, ping aplikacija vjerojatno nema SUID bit:

ls -l /bin/ping 

# Izlaz
-rwxr-xr-x. 1 korijen root 95232 25. srpnja 2021. /bin/ping

Ipak, možete uspješno pokrenuti aplikaciju kao običan korisnik. Mehanizam koji to čini mogućim je da ping aplikacija ima posebnu sposobnost CAP_NET_RAW.

Dodatne mogućnosti aplikacije možete naučiti pomoću getcap naredba kako slijedi:

sudo getcap /bin/ping

# Izlaz
/bin/ping cap_net_raw=ep

Ako naredba getcap vrati prazan odgovor, možete ručno postaviti ovu vrijednost pomoću:

sudo setcap cap_net_raw+ep /bin/ping

Model sposobnosti procesa

U implementaciji Linuxa, mogućnosti svakog procesa grupirane su u tri naslova:

Sposobnost Izjava
dopušteno U ovom klasteru nalazi se popis dopuštenih dodatnih mogućnosti za relevantni proces. Davanje dozvole ne znači da se u tom trenutku može aktivno koristiti. Ovdje je moguće uključiti ovlaštenja u skup učinkovitih sposobnosti uz dodatnu radnju.
djelotvoran Prikazuje trenutno aktivni popis mogućnosti povezanog procesa. Uz pomoćne funkcije koje reguliraju sustav vještina moguće je odustati ili ponovno steći vještinu. U svakom slučaju, to se može učiniti samo među onima koji su već ovlašteni u dopuštenoj skupini.
nasljedna Kada aplikacija pokrene novi proces, novopokrenuti proces prikazuje popis mogućnosti koje će naslijediti s popisa dopuštenih.

Popis dopuštenih, učinkovitih i nasljednih mogućnosti za pokretanje procesa u bilo kojem trenutku prikazuje se kao bitmaska ​​na redovima CapPrm, CapEff, i CapInh u datoteci /proc//status. Osim toga, CapBnd linija sadrži bitmasku koja se koristi u operaciji kontrole granice mogućnosti.

Na primjer, pokušajte pročitati vrijednosti vaše pokrenute ljuske aplikacije iz /proc/self/status datoteka:

mačka /proc/sebe/status | grep Cap

# Izlaz
CapInh: 00000000000000000
CapPrm: 00000000000000000
CapEff: 00000000000000000
CapBnd: 000001ffffffffff
CapAmb: 00000000000000000

Model sposobnosti datoteka u Linuxu

Rad sustava sposobnosti za datoteke ovisi o preduvjetu da se ta svojstva mogu pohraniti u sloj virtualnog datotečnog sustava (VFS). Slično modelu procesa, mogućnosti za datoteke spadaju u tri naslova:

1. Dopušteno

Sustav određuje dopuštene sposobnosti procesa kada se odgovarajuća izvršna datoteka pokrene u ovom klasteru.

2. Učinkovito

Za razliku od modela sposobnosti procesa, ovo zaglavlje pohranjuje samo jedan bit: aktivan ili neaktivan. Ako je bit aktivan, mogućnosti definirane u popisu dopuštenih datoteka automatski su prenosi se na popis efektivnih mogućnosti relevantnog procesa kada se ova datoteka pokrene, a proces je stvorio. Ako bit nije aktivan, automatski se prijenos dopuštenih mogućnosti na datoteci u proces koji se izvodi ne izvodi.

Međutim, ako je kod relevantne aplikacije integriran sa sustavom sposobnosti, može aktivirati dopuštenja u dopuštenom skupu datoteke sa sistemskim pozivima. Glavna svrha ovog ponašanja je osigurati da stare aplikacije koje ne uključuju sposobnost specifične za sustav koda, razvoj na razini softverskog koda može raditi sa sustavom mogućnosti bez potrebe za izvornim kodom promjene.

Možda mislite da će bolje napisane aplikacije koristiti mogućnosti samo kada je to potrebno. Ako je bit aktivan, sve mogućnosti na popisu dopuštenih postaju aktivne kada se aplikacija pokrene.

3. Nasljedno

Kao iu modelu procesa, relevantna datoteka se pokreće i događa se proces. Ako se druga aplikacija nakon toga pokrene unutar procesa, uključena je u dopušteni popis novog procesa. Ukratko, označava popis sposobnosti za nasljeđivanje.

Uloga sposobnosti u Linux sustavu

Kada pokrenete određeni proces kao običan korisnik, nemate nikakve privilegije. Kao rezultat, možete pristupiti samo particijama koje sustav dopušta normalnim korisnicima. Glavni razlog za to je pooštravanje sigurnosti sustava i provedba takvih mjera.

Dopuštanje svim korisnicima pristup svim resursima može stvoriti ozbiljnu sigurnosnu ranjivost. Ljudima koji koriste sustav u zlonamjerne svrhe bit će vrlo lako iskoristiti ranjivosti sustava. Mogućnosti Linuxa dobro dolaze u takvim stvarima. Možete jednostavno ojačati sigurnost svojih aplikacija pomoću API-ja mogućnosti koje pokreće kernel.

Mogućnosti Linuxa samo su jedno od pitanja o kojima treba razmišljati kako bi se napravile vrlo moćne metode kao što je podjela root korisnika dopuštenja, dodjeljivanje različitih dopuštenja neprivilegiranim korisnicima i poduzimanje raznih mjera opreza u vezi s otvorenim portovima u internetskim uslugama s Linux poslužitelji.

Poboljšajte sigurnost svog Linux poslužitelja s ovih 7 koraka učvršćivanja

Pročitajte dalje

UdioCvrkutUdioE-mail

Povezane teme

  • Linux
  • Programiranje
  • Linux kernel
  • Operacijski sustav

O autoru

Fatih Küçükkarakurt (Objavljeno 8 članaka)

Inženjer i programer koji je ljubitelj matematike i tehnologije. Oduvijek je volio računala, matematiku i fiziku. Razvio je projekte motora za igre, kao i strojno učenje, umjetne neuronske mreže i biblioteke linearne algebre. Štoviše, nastavlja raditi na strojnom učenju i linearnim matricama.

Više od Fatiha Küçükkarakurta

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu