Galimybės leidžia įvertinti kai kurias svarbias sistemos privilegijas atskiroje gijoje, kuri skiriasi nuo dabartinio proceso. Tokiu būdu jums nereikia paleisti programos kaip root, kad ji galėtų pasiekti tam tikras sistemos dalis.
Kaip sprendimas, kylantis iš poreikių, POSIX.1e 25 skyrius yra apie šią problemą. Tame skyriuje apibrėžtų privilegijų ir kitų kūrimas buvo baigtas išleidus Linux branduolio 2.6.26 versiją. Štai viskas, ką reikia žinoti apie „Linux“ branduolio galimybes.
Galimybių API logikos supratimas
Autorizacijos valdymas Unix sistemose susideda iš dviejų etapų:
- Jei dabartinis veikiančios programos savininkas (veiksmingas vartotojo ID, EUID) yra nulis, sistema netikrina, ar nėra prieigos teisės.
- Jei EUID reikšmė skiriasi nuo nulio, sistema atlieka valdymo procesą pagal veiksmingo vartotojo ir atitinkamos programos grupės leidimus.
Kai kurioms programoms veikiant reikia turėti platesnes teises (SUID, SGIT bitai). Kaip tipiškiausią pavyzdį galite įsivaizduoti „passwd“ programa
. Taip sistemos vartotojai gali pakeisti savo slaptažodžius. Tačiau parašyti į /etc/shadow failą, kuriame saugomi užšifruoti slaptažodžiai, reikia dirbti su root vartotojo teisėmis (t.y. vartotojo ID = 0).Norėdami išspręsti šią problemą, programa passwd turi SUID bitą. Kad ir kuris vartotojas paleistų šią programą, aktyvusis savininkas (EUID) visada bus root:
ls -l /usr/bin/passwd
# Išvestis
-rwsr-xr-x. 1 šakninė šaknis 32552 2021 m. liepos 23 d. /usr/bin/passwd
Atrodo, kad galimybė paleisti SUID programas tradiciniame Unix autentifikavimo modelyje problemą išsprendė. Tačiau kritinės klaidos programose su SUID bitais atveria duris vartotojams, turintiems visas teises sistemoje, paleisti nepageidaujamus kodus. Ideali programa turėtų veikti be root vartotojo teisių, jei įmanoma.
Problema nesibaigia tik SUID bitu. Taip pat turite turėti root vartotojo teises, kai norite klausytis a privilegijuotas TCP arba UDP prievadas mažiau nei 1024 Unix sistemose. Pavyzdžiui, norėdami klausytis žiniatinklio serverio TCP 80 prievado, turite paleisti programą kaip root naudotojas.
Bėgant metams buvo suprasta, kaip pražūtinga paleisti programinę įrangą, kuri teikia paslaugas tinklo aplinkai su visiškai įgaliota vartotojo paskyra. Kaip tarpinis sprendimas buvo priimtas, kad tik tam tikra ir mažesnė programos dalis klausytųsi privilegijuotajame prievade kaip root, ir tada pakeičia aktyvų vartotojo ID į kitą vartotoją tolesniems procesams (pavyzdžiui, niekas naudotojas su apribotomis teisėmis).
Ši sistema, kuri buvo naudojama daugelį metų, puikiai veikė savo paprastumu ir vis dar naudojama efektyviai. Tačiau šiais laikais galima gauti tam tikrų papildomų galimybių, būdingų konkrečiai programai, per Linux galimybių API, nereikalaujant root teisių, išskyrus aukščiau paminėtas sistema.
„Linux“ galimybių modelis, paaiškinta!
Išsamiausią galimybių API diegimą galite rasti „Linux“ branduolyje. Šiuolaikiniai Linux distribucijos taip pat stengiasi kuo daugiau naudoti šį naują modelį visoje sistemoje.
Pavyzdžiui, kad ping programa veiktų, ji turi turėti galimybę atidaryti RAW lizdus, kurie paprastai yra skirti tik root naudotojams. Senuose Linux platinimuose problema yra suteikti programai SUID bitą, kad paprasti vartotojai galėtų juo naudotis. Šiose versijose, kai pašalinate SUID bitą iš programos ir bandote paleisti programą kaip įprastas vartotojas, gaunate šią klaidą:
ping 8.8.8.8
# Išvestis
ping: icmp atviras lizdas: Operacija neleidžiama
Tuo tarpu šiuolaikiniuose Linux platinimuose ping programa tikriausiai neturi SUID bito:
ls -l /bin/ping
# Išvestis
-rwxr-xr-x. 1 šaknies šaknis 95232 2021 m. liepos 25 d. /bin/ping
Nepaisant to, galite sėkmingai paleisti programą kaip įprastas vartotojas. Mechanizmas, dėl kurio tai įmanoma, yra tas, kad ping programa turi ypatingą galimybę CAP_NET_RAW.
Galite išmokti papildomų programos galimybių naudodami getcap komandą taip:
sudo getcap /bin/ping
# Išvestis
/bin/ping cap_net_raw=ep
Jei komanda getcap grąžina tuščią atsakymą, galite rankiniu būdu nustatyti šią reikšmę naudodami:
sudo setcap cap_net_raw+ep /bin/ping
Proceso galimybių modelis
„Linux“ diegimo metu kiekvieno proceso galimybės yra sugrupuotos į tris antraštes:
gebėjimas | pareiškimas |
leidžiama | Šiame klasteryje yra atitinkamo proceso leidžiamų papildomų galimybių sąrašas. Leidimo suteikimas nereiškia, kad tuo metu juo galima aktyviai naudotis. Čia esančius įgaliojimus galima įtraukti į efektyvių galimybių rinkinį su papildomu veiksmu. |
veiksmingas | Jame rodomas šiuo metu aktyvių susijusių proceso galimybių sąrašas. Su pagalbinėmis funkcijomis, reguliuojančiomis įgūdžių sistemą, galima atsisakyti arba susigrąžinti įgūdį. Tačiau bet kuriuo atveju tai galima padaryti tik tarp tų, kurie jau yra įgalioti leistinoje grupėje. |
paveldimas | Kai programa pradeda naują procesą, naujai pradėtas procesas rodo galimybių, kurias ji paveldės iš leidžiamo sąrašo, sąrašą. |
Leidžiamų, veiksmingų ir paveldimų galimybių, skirtų procesams bet kuriuo metu vykdyti, sąrašas rodomas kaip bitų kaukė eilutėse CapPrm, CapEff, ir CapInh byloje /proc/
Pavyzdžiui, pabandykite nuskaityti veikiančios apvalkalo programos reikšmes iš /proc/self/status failas:
katė /proc/savarankiškai/statusas | grep Cap
# Išvestis
Kapinalas: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
„Linux“ failų galimybių modelis
Failų galimybių sistemos veikimas priklauso nuo būtinos sąlygos, kad šios savybės gali būti saugomos virtualiosios failų sistemos (VFS) sluoksnyje. Panašiai kaip proceso modelyje, failų galimybės skirstomos į tris antraštes:
1. Leidžiama
Sistema nustato leistinas proceso galimybes, kai atitinkamas vykdomasis failas veikia šiame klasteryje.
2. Veiksmingas
Skirtingai nuo proceso galimybių modelio, ši antraštė saugo tik vieną bitą: aktyvų arba neaktyvų. Jei bitas aktyvus, failo leistinų sąraše nurodytos galimybės yra automatiškai perkeliamas į atitinkamo proceso efektyvių galimybių sąrašą, kai paleidžiamas šis failas ir vykdomas procesas sukurtas. Jei bitas neaktyvus, automatinis leistinų failo galimybių perkėlimas į veikiantį procesą neatliekamas.
Tačiau jei atitinkamos programos kodas yra integruotas su pajėgumų sistema, ji gali suaktyvinti leidimus leistinoje rinkmenoje su sistemos iškvietimais. Pagrindinis šio elgesio tikslas yra užtikrinti, kad senos programos, kurios neapima sistemos specifinių galimybių kodas, kūrimas programinės įrangos kodo lygiu gali dirbti su galimybių sistema be jokio šaltinio kodo pokyčius.
Galbūt manote, kad geriau parašytos programos naudos galimybes tik tada, kai to reikės. Jei bitas aktyvus, visos leistino sąrašo galimybės tampa aktyvios, kai programa paleidžiama.
3. Paveldima
Kaip ir proceso modelyje, paleidžiamas atitinkamas failas ir įvyksta procesas. Jei po to proceso viduje paleidžiama kita programa, ji įtraukiama į leistiną naujo proceso sąrašą. Apibendrinant, tai nurodo paveldimų galimybių sąrašą.
Galimybių vaidmuo Linux sistemoje
Kai vykdote tam tikrą procesą kaip įprastas vartotojas, jūs neturite jokių privilegijų. Dėl to galite pasiekti tik tuos skaidinius, kuriuos sistema leidžia paprastiems vartotojams. Pagrindinė to priežastis – sugriežtinti sistemos saugumą ir įgyvendinti tokias priemones.
Suteikus visiems vartotojams prieigą prie visų išteklių, gali atsirasti rimtas saugos pažeidžiamumas. Žmonėms, kurie naudojasi sistema piktybiniais tikslais, bus labai lengva išnaudoti sistemos pažeidžiamumą. „Linux“ galimybės tokiais klausimais praverčia. Galite nesunkiai sustiprinti savo programų saugą naudodami branduolio teikiamas API galimybes.
„Linux“ galimybės yra tik viena iš problemų, kurias reikia apsvarstyti norint atlikti labai galingus metodus, tokius kaip šakninio vartotojo padalijimas leidimus, įvairių leidimų priskyrimą neprivilegijuotiems vartotojams ir įvairių atsargumo priemonių dėl atvirų prievadų interneto paslaugose su Linux serveriai.
Pagerinkite savo „Linux“ serverio saugą atlikdami šiuos 7 griežtinimo veiksmus
Skaitykite toliau
Susijusios temos
- Linux
- Programavimas
- Linux branduolys
- Operacinė sistema
Apie autorių

Inžinierius ir programinės įrangos kūrėjas, kuris yra matematikos ir technologijų gerbėjas. Jam visada patiko kompiuteriai, matematika ir fizika. Jis sukūrė žaidimų variklių projektus, taip pat mašininį mokymąsi, dirbtinius neuroninius tinklus ir tiesinės algebros bibliotekas. Be to, toliau dirba su mašininiu mokymusi ir tiesinėmis matricomis.
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!
Spauskite čia norėdami užsiprenumeruoti