Schopnosti umožňujú vyhodnotenie niektorých dôležitých systémových privilégií v samostatnom vlákne odlišnom od aktuálneho procesu. Týmto spôsobom nemusíte spúšťať program ako root, aby mal prístup k určitým častiam systému.

Ako riešenie vyplývajúce z potrieb je o tejto problematike časť 25 POSIX.1e. Vývoj privilégií definovaných v tejto časti a ďalších bol dokončený vydaním linuxového jadra verzie 2.6.26. Tu je všetko, čo potrebujete vedieť o schopnostiach jadra Linuxu.

Pochopenie logiky Capabilities API

Kontrola autorizácie v systémoch založených na Unixe pozostáva z dvoch krokov:

  • Ak je aktuálny vlastník (efektívne ID používateľa, EUID) spustenej aplikácie nulový, systém nekontroluje autorizáciu
  • Ak je hodnota EUID iná ako nula, systém vykoná proces kontroly v súlade s oprávneniami skutočného používateľa a skupiny príslušnej aplikácie.

Niektoré aplikácie musia mať pri spustení širšie privilégiá (SUID, SGIT bity). Ako najtypickejší príklad si môžete spomenúť aplikáciu passwd. Vďaka tomu môžu používatelia v systéme zmeniť svoje heslá. Napísať však do

instagram viewer
/etc/shadow súbore, kde sú uložené zašifrované heslá, je potrebné pracovať s právami užívateľa root (t.j. ID užívateľa = 0).

Na vyriešenie tohto problému má aplikácia passwd bit SUID. Bez ohľadu na to, ktorý používateľ spustí túto aplikáciu, aktívny vlastník (EUID) bude vždy root:

ls -l /usr/bin/passwd

# Výkon
-rwsr-xr-x. 1 koreňový koreň 32552 23. júla 2021 /usr/bin/passwd

Zdá sa, že schopnosť spúšťať aplikácie SUID v tradičnom unixovom autentifikačnom modeli problém vyriešila. Kritické chyby v aplikáciách s bitmi SUID však otvárajú dvere k spúšťaniu nechcených kódov pre používateľov s plným oprávnením v systéme. Ideálna aplikácia by mala byť schopná bežať bez potreby užívateľských práv typu root, ak je to možné.

Problém nekončí len pri bite SUID. Musíte mať tiež práva užívateľa root, keď chcete počúvať na a privilegovaný port TCP alebo UDP menej ako 1024 na systémoch založených na Unixe. Napríklad, aby ste mohli počúvať port TCP 80 webového servera, musíte spustiť aplikáciu ako užívateľ root.

V priebehu rokov sa zistilo, aké zničujúce je prevádzkovať softvér, ktorý poskytuje služby sieťovému prostrediu s plne autorizovaným používateľským účtom. Ako dočasné riešenie bolo prijaté, že iba určitá a menšia časť programu počúva na privilegovanom porte ako root, a potom zmení ID aktívneho používateľa na iného používateľa pre následné procesy (napríklad používateľ nikto s obmedzenými právami).

Tento systém, ktorý sa používa už roky, sa osvedčil svojou jednoduchosťou a stále sa efektívne používa. V súčasnosti je však možné získať niektoré ďalšie funkcie špecifické pre aplikáciu, cez API schopností Linuxu, bez potreby root práv, okrem vyššie uvedeného systému.

Model schopností Linuxu, vysvetlené!

Najkomplexnejšiu implementáciu API schopností nájdete v jadre Linuxu. Moderné linuxové distribúcie sa tiež snažia čo najviac využiť tento nový model v celom systéme.

Napríklad, aby aplikácia ping fungovala, musí byť schopná otvárať RAW zásuvky, ktoré sú vo všeobecnosti vyhradené len pre užívateľov root. V starých linuxových distribúciách je problém dať aplikácii bit SUID, aby ho mohli používať bežní používatelia. Keď v týchto verziách odstránite bit SUID z aplikácie a pokúsite sa spustiť aplikáciu ako bežný používateľ, zobrazí sa nasledujúca chyba:

ping 8.8.8.8

# Výkon
ping: icmp otvorená zásuvka: Prevádzka nie je povolená

Zatiaľ čo v moderných distribúciách Linuxu aplikácia ping pravdepodobne nemá bit SUID:

ls -l /bin/ping 

# Výkon
-rwxr-xr-x. 1 koreň koreňa 95232 25. júla 2021 /bin/ping

Napriek tomu môžete aplikáciu úspešne spustiť ako bežný používateľ. Mechanizmus, ktorý to umožňuje, je, že aplikácia ping má špeciálnu schopnosť CAP_NET_RAW.

Ďalšie možnosti aplikácie sa môžete naučiť pomocou getcap príkaz takto:

sudo getcap /bin/ping

# Výkon
/bin/ping cap_net_raw=ep

Ak príkaz getcap vráti prázdnu odpoveď, môžete túto hodnotu nastaviť manuálne pomocou:

sudo setcap cap_net_raw+ep /bin/ping

Model spôsobilosti procesu

V implementácii Linuxu sú schopnosti každého procesu zoskupené do troch hlavičiek:

Schopnosť Vyhlásenie
povolenej V tomto klastri je zoznam povolených dodatočných schopností pre príslušný proces. Udelenie povolenia neznamená, že ho možno v tom čase aktívne využívať. Oprávnenia je tu možné zahrnúť do sady efektívnych schopností s dodatočnou akciou.
efektívne Zobrazuje aktuálne aktívny zoznam schopností súvisiaceho procesu. Pomocou pomocných funkcií, ktoré regulujú systém zručností, je možné sa zručnosti vzdať alebo ju znova získať. V každom prípade to však možno urobiť len medzi tými, ktorí sú už oprávnení v povolenej skupine.
dedičné Keď aplikácia spustí nový proces, novo spustený proces zobrazí zoznam schopností, ktoré zdedí zo zoznamu povolených.

Zoznam povolených, efektívnych a dediteľných schopností pre bežiace procesy kedykoľvek je zobrazený ako bitová maska ​​na riadkoch CapPrm, CapEffa CapInh v súbore /proc//status. Okrem toho, CapBnd riadok obsahuje bitovú masku použitú v operácii riadenia hraníc schopností.

Skúste si napríklad prečítať hodnoty vašej spustenej aplikácie shell zo súboru /proc/self/status súbor:

mačka /proc/seba/stav | grep Cap

# Výkon
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000

Model schopnosti súborov v systéme Linux

Prevádzka systému schopností pre súbory závisí od predpokladu, že tieto vlastnosti môžu byť uložené vo vrstve virtuálneho súborového systému (VFS). Podobne ako v modeli procesov spadajú možnosti súborov do troch kategórií:

1. Povolenej

Systém určí povolené schopnosti procesu, keď sa príslušný spustiteľný súbor spustí v tomto klastri.

2. Efektívne

Na rozdiel od modelu spôsobilosti procesu táto hlavička ukladá iba jeden bit: aktívny alebo neaktívny. Ak je bit aktívny, schopnosti definované v zozname povolených súborov sú automaticky prenesené do zoznamu efektívnych schopností príslušného procesu, keď je tento súbor spustený a proces je spustený vytvorené. Ak bit nie je aktívny, automatický prenos povolených schopností na súbore do spusteného procesu sa nevykoná.

Ak je však kód príslušnej aplikácie integrovaný so systémom schopností, môže aktivovať povolenia v povolenej sade súboru pomocou systémových volaní. Hlavným účelom tohto správania je zabezpečiť, aby staré aplikácie, ktoré neobsahujú schopnosti, boli špecifické pre daný systém kódu, vývoj na úrovni softvérového kódu môže pracovať so systémom schopností bez potreby akéhokoľvek zdrojového kódu zmeny.

Možno si myslíte, že lepšie napísané aplikácie využijú funkcie iba vtedy, keď je to potrebné. Ak je bit aktívny, pri spustení aplikácie sa aktivujú všetky funkcie v zozname povolených.

3. Dedičné

Rovnako ako v modeli procesov sa spustí príslušný súbor a dôjde k procesu. Ak sa iná aplikácia spustí z procesu potom, bude zahrnutá do zoznamu povolených nového procesu. Stručne povedané, označuje zoznam schopností, ktoré možno zdediť.

Úloha schopností v systéme Linux

Keď spustíte určitý proces ako bežný používateľ, nemáte žiadne privilégiá. Výsledkom je, že máte prístup len k oddielom, ktoré systém umožňuje bežným používateľom. Hlavným dôvodom je sprísnenie zabezpečenia systému a implementácia takýchto opatrení.

Umožnenie prístupu všetkých používateľov ku všetkým zdrojom môže spôsobiť vážnu chybu zabezpečenia. Pre ľudí, ktorí používajú systém na škodlivé účely, bude veľmi jednoduché zneužiť slabiny systému. Možnosti Linuxu sa v takýchto záležitostiach hodia. Bezpečnosť svojich aplikácií môžete jednoducho posilniť pomocou rozhrania API, ktoré je založené na jadre.

Možnosti Linuxu sú len jedným z problémov, na ktoré je potrebné myslieť pri vykonávaní veľmi výkonných metód, ako je napríklad rozdelenie koreňového používateľa povolenia, prideľovanie rôznych povolení neprivilegovaným používateľom a prijímanie rôznych opatrení týkajúcich sa otvorených portov v internetových službách s Linuxové servery.

Zlepšite bezpečnosť svojho servera Linux pomocou týchto 7 krokov posilnenia

Prečítajte si ďalej

zdieľamTweetujtezdieľamEmail

Súvisiace témy

  • Linux
  • Programovanie
  • Linuxové jadro
  • Operačný systém

O autorovi

Fatih Küçükkarakurt (8 publikovaných článkov)

Inžinier a vývojár softvéru, ktorý je fanúšikom matematiky a technológií. Vždy mal rád počítače, matematiku a fyziku. Vyvinul projekty herných motorov, ako aj strojové učenie, umelé neurónové siete a knižnice lineárnej algebry. Okrem toho pokračuje v práci na strojovom učení a lineárnych matriciach.

Viac od Fatiha Küçükkarakurta

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!

Ak sa chcete prihlásiť na odber, kliknite sem