Võimalused võimaldavad hinnata mõnda olulist süsteemiõigust eraldi lõimes, mis erineb praegusest protsessist. Nii ei pea te programmi teatud süsteemiosadele juurde pääsemiseks root kasutajana käivitama.

Vajadustest tuleneva lahendusena käsitleb seda probleemi POSIX.1e jaotis 25. Selles jaotises määratletud õiguste ja muude õiguste arendamine on lõpule viidud Linuxi kerneli versiooni 2.6.26 väljalaskmisega. Siin on kõik, mida pead teadma Linuxi tuuma võimaluste kohta.

Võimaluste API loogika mõistmine

Autoriseerimise kontroll Unixi-põhistes süsteemides koosneb kahest etapist:

  • Kui töötava rakenduse praegune omanik (tegelik kasutaja ID, EUID) on null, ei kontrolli süsteem autoriseerimist
  • Kui EUID väärtus erineb nullist, teostab süsteem juhtimisprotsessi vastavalt tegeliku kasutaja ja vastava rakenduse rühma volitustele

Mõnel rakendusel peavad töötamise ajal olema laiemad õigused (SUID, SGIT bitid). Kõige tüüpilisema näitena võite mõelda passwd rakendus. Selle abil saavad süsteemi kasutajad oma paroole muuta. Siiski, et kirjutada

/etc/shadow faili, kus hoitakse krüpteeritud paroole, on vaja töötada root kasutaja õigustega (s.o kasutajatunnus = 0).

Selle probleemi lahendamiseks on passwd rakendusel SUID-bitt. Olenemata sellest, kumb kasutaja seda rakendust kasutab, on aktiivne omanik (EUID) alati root:

ls -l /usr/bin/passwd

# Väljund
-rwsr-xr-x. 1 juurjuur 32552 23. juuli 2021 /usr/bin/passwd

Võimalus käivitada SUID-rakendusi traditsioonilises Unixi autentimismudelis näib olevat probleemi lahendanud. Kriitilised vead SUID-bittidega rakendustes avavad aga ukse soovimatute koodide käitamiseks kasutajatele, kellel on süsteemis täielikud volitused. Ideaalne rakendus peaks suutma töötada ilma juurkasutaja õigusi vajamata, kui võimalik.

Probleem ei lõpe ainult SUID-bitiga. Teil peavad olema ka juurkasutaja õigused, kui soovite kuulata a privilegeeritud TCP- või UDP-port alla 1024 Unixi-põhistes süsteemides. Näiteks selleks, et saaksite kuulata veebiserveri TCP 80 porti, peate rakenduse käivitama juurkasutajana.

Aastate jooksul on mõistetud, kui laastav on võrgukeskkonda teenindava tarkvara käivitamine täielikult volitatud kasutajakontoga. Vahelahendusena võeti kasutusele, et ainult teatud ja väiksem osa programmist kuulab privilegeeritud pordis root kasutajana, ja seejärel muudab aktiivse kasutaja ID järgmiste protsesside jaoks teiseks kasutajaks (näiteks piiratud õigustega kasutajaks mitte keegi).

See aastaid kasutusel olnud süsteem on oma lihtsusega hästi töötanud ja seda kasutatakse siiani tõhusalt. Kuid tänapäeval on võimalik hankida rakendusele spetsiifilisi lisavõimalusi, Linuxi võimaluste API kaudu, ilma et oleks vaja juurõigusi, välja arvatud ülalmainitu süsteem.

Linuxi võimemudel, selgitatud!

Kõige põhjalikuma võimaluste API juurutuse leiate Linuxi tuumast. Ka tänapäevased Linuxi distributsioonid püüavad seda uut mudelit võimalikult palju kasutada kogu süsteemis.

Näiteks selleks, et pingirakendus töötaks, peab see suutma avada RAW-pesasid, mis on üldjuhul reserveeritud ainult juurkasutajatele. Vanades Linuxi distributsioonides on probleemiks SUID-biti andmine rakendusele, et tavakasutajad saaksid seda kasutada. Nendes versioonides, kui eemaldate rakendusest SUID-biti ja proovite rakendust tavakasutajana käivitada, kuvatakse järgmine tõrketeade:

ping 8.8.8.8

# Väljund
ping: icmp avatud pesa: kasutamine pole lubatud

Kaasaegsetes Linuxi distributsioonides pole pingirakendusel tõenäoliselt SUID-bitti:

ls -l /bin/ping 

# Väljund
-rwxr-xr-x. 1 juurjuur 95232 25. juuli 2021 /bin/ping

Sellegipoolest saate rakendust tavakasutajana edukalt käivitada. Mehhanism, mis teeb selle võimalikuks, on see, et pingirakendusel on eriline võime CAP_NET_RAW.

Rakenduse lisavõimalusi saate õppida rakendusega getcap käsk järgmiselt:

sudo getcap /bin/ping

# Väljund
/bin/ping cap_net_raw=ep

Kui käsk getcap tagastab tühja vastuse, saate selle väärtuse käsitsi määrata:

sudo setcap cap_net_raw+ep /bin/ping

Protsessi võimekuse mudel

Linuxi juurutamisel on iga protsessi võimalused rühmitatud kolme jaotise alla:

Võimekus avaldus
lubatud Selles klastris on vastava protsessi jaoks lubatud lisavõimaluste loend. Loa andmine ei tähenda, et seda saab sel ajal aktiivselt kasutada. Siin olevad volitused on võimalik lisada tõhusasse võimekuse komplekti koos lisatoiminguga.
tõhus See näitab seotud protsessi praegu aktiivsete võimaluste loendit. Oskuste süsteemi reguleerivate abifunktsioonidega on võimalik oskusest loobuda või tagasi saada. Igal juhul saab seda teha aga ainult lubatud rühmas juba volitatud isikute hulgas.
päritav Kui rakendus käivitab uue protsessi, kuvab äsja käivitatud protsess võimaluste loendi, mis see lubatud loendist pärib.

Lubatud, tõhusate ja päritavate võimaluste loend protsesside käitamiseks igal ajal kuvatakse ridadel bitmaskina CapPrm, CapEff, ja CapInh failis /proc//status. Lisaks on CapBnd rida sisaldab bitimaski, mida kasutatakse võimepiiride juhtimise operatsioonis.

Näiteks proovige lugeda oma töötava shell-rakenduse väärtused failist /proc/self/status fail:

kass /proc/ise/staatus | grep Cap

# Väljund
Kapital: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000

Failivõimete mudel Linuxis

Failide võimekuse süsteemi toimimine sõltub eeldusest, et neid omadusi saab salvestada virtuaalse failisüsteemi (VFS) kihile. Sarnaselt protsessimudeliga jagunevad failide võimalused kolme jaotise alla:

1. Lubatud

Süsteem määrab protsessi lubatud võimalused, kui vastav käivitatav fail selles klastris töötab.

2. Tõhus

Erinevalt protsessivõime mudelist salvestab see päis ainult ühe biti: aktiivne või passiivne. Kui bitt on aktiivne, on faili lubatud loendis määratud võimalused automaatselt kantakse selle faili käivitamisel ja protsessi käivitamisel vastava protsessi tõhusate võimaluste loendisse loodud. Kui bitt pole aktiivne, siis failil lubatud võimaluste automaatset ülekandmist jooksvasse protsessi ei teostata.

Kui aga vastava rakenduse kood on integreeritud võimesüsteemiga, saab see süsteemikutsetega aktiveerida faili lubatud komplektis olevad õigused. Selle käitumise põhieesmärk on tagada, et vanad rakendused, mis ei sisalda võimekust, on süsteemipõhised kood, tarkvarakoodi tasemel arendus võib töötada võimetesüsteemiga ilma lähtekoodita muudatusi.

Võib arvata, et paremini kirjutatud rakendused kasutavad võimalusi ainult vajaduse korral. Kui bitt on aktiivne, muutuvad kõik lubatud loendis olevad võimalused rakenduse käivitumisel aktiivseks.

3. Päritav

Nagu protsessimudelis, käivitub vastav fail ja toimub protsess. Kui pärast seda protsessist käivitatakse mõni muu rakendus, lisatakse see uue protsessi lubatud loendisse. Kokkuvõtteks võib öelda, et see näitab päritavate võimaluste loendit.

Võimaluste roll Linuxi süsteemis

Kui käivitate teatud protsessi tavalise kasutajana, pole teil mingeid õigusi. Selle tulemusena pääsete juurde ainult nendele partitsioonidele, mida süsteem tavakasutajatele võimaldab. Selle peamiseks põhjuseks on süsteemi turvalisuse tugevdamine ja selliste meetmete rakendamine.

Kõigile kasutajatele kõigile ressurssidele juurdepääsu võimaldamine võib tekitada tõsise turvaauku. Inimestel, kes kasutavad süsteemi pahatahtlikel eesmärkidel, on süsteemi turvaauke väga lihtne ära kasutada. Linuxi võimalused tulevad sellistes küsimustes kasuks. Rakenduste turvalisust saate hõlpsalt tugevdada kerneli toiteallika API-liidesega.

Linuxi võimalused on vaid üks probleemidest, mille peale tuleb mõelda väga võimsate meetodite (nt juurkasutaja jagamine õigused, erinevate õiguste määramine mitteprivilegeeritud kasutajatele ja mitmesuguste ettevaatusabinõude rakendamine Interneti-teenuste avatud portide osas Linuxi serverid.

Parandage oma Linuxi serveri turvalisust nende 7 tugevdamise sammuga

Loe edasi

JagaSäutsJagaMeil

Seotud teemad

  • Linux
  • Programmeerimine
  • Linuxi kernel
  • Operatsioonisüsteem

Autori kohta

Fatih Küçükkarakurt (8 artiklit avaldatud)

Insener ja tarkvaraarendaja, kes on matemaatika ja tehnoloogia fänn. Talle on alati meeldinud arvutid, matemaatika ja füüsika. Ta on arendanud nii mängumootorite projekte kui ka masinõpet, tehisnärvivõrke ja lineaaralgebra teeke. Lisaks jätkab ta tööd masinõppe ja lineaarsete maatriksitega.

Veel Fatih Küçükkarakurtilt

Liituge meie uudiskirjaga

Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!

Tellimiseks klõpsake siin