Schopnosti umožňují vyhodnocení některých důležitých systémových oprávnění v samostatném vláknu odlišném od aktuálního procesu. Tímto způsobem nemusíte spouštět program jako root, aby měl přístup k určitým částem systému.
Jako řešení vyplývající z potřeb je o tomto problému věnována část 25 POSIX.1e. Vývoj oprávnění definovaných v této části a dalších byl dokončen s vydáním linuxového jádra verze 2.6.26. Zde je vše, co potřebujete vědět o schopnostech linuxového jádra.
Pochopení logiky Capabilities API
Kontrola autorizace v systémech založených na Unixu se skládá ze dvou kroků:
- Pokud je aktuální vlastník (efektivní ID uživatele, EUID) spuštěné aplikace nulový, systém nekontroluje autorizaci
- Pokud je hodnota EUID jiná než nula, systém provede proces kontroly v souladu s oprávněními skutečného uživatele a skupiny příslušné aplikace.
Některé aplikace potřebují mít při běhu širší oprávnění (SUID, SGIT bity). Jako nejtypičtější příklad si můžete myslet aplikaci passwd. Díky tomu mohou uživatelé v systému změnit svá hesla. Nicméně, napsat do
/etc/shadow souboru, kde jsou uchovávána zašifrovaná hesla, je nutné pracovat s právy uživatele root (tj. ID uživatele = 0).K vyřešení tohoto problému má aplikace passwd bit SUID. Ať už tuto aplikaci spustí kterýkoli uživatel, aktivní vlastník (EUID) bude vždy root:
ls -l /usr/bin/passwd
# Výstup
-rwsr-xr-x. 1 kořenový adresář 32552 23. července 2021 /usr/bin/passwd
Zdá se, že možnost spouštět aplikace SUID v tradičním unixovém autentizačním modelu problém vyřešila. Kritické chyby v aplikacích s bity SUID však otevírají dveře ke spouštění nežádoucích kódů pro uživatele s plným oprávněním v systému. Ideální aplikace by měla být schopna běžet, pokud je to možné, aniž by potřebovala uživatelská práva root.
Problém nekončí jen u bitu SUID. Pokud chcete poslouchat na a, musíte mít také uživatelská práva root privilegovaný port TCP nebo UDP méně než 1024 na systémech založených na Unixu. Chcete-li například naslouchat portu TCP 80 webového serveru, musíte aplikaci spustit jako uživatel root.
V průběhu let se ukázalo, jak zničující je provozovat software, který poskytuje služby síťovému prostředí s plně autorizovaným uživatelským účtem. Jako dočasné řešení bylo přijato, že pouze určitá a menší část programu naslouchá na privilegovaném portu jako root, a poté změní ID aktivního uživatele na jiného uživatele pro následné procesy (například uživatel nikdo s omezenými právy).
Tento léta používaný systém se osvědčil svou jednoduchostí a stále se efektivně používá. V dnešní době je však možné získat některé další funkce specifické pro aplikaci, přes rozhraní API pro schopnosti Linuxu, bez nutnosti práv roota, kromě výše uvedeného Systém.
Model schopností Linuxu, vysvětleno!
Nejkomplexnější implementaci API schopností najdete v linuxovém jádře. Moderní linuxové distribuce se také snaží tento nový model co nejvíce využívat v celém systému.
Například, aby aplikace ping fungovala, musí být schopna otevřít RAW sockety, které jsou obecně vyhrazeny pouze pro uživatele root. Ve starých linuxových distribucích je problém dát aplikaci bit SUID, aby jej mohli používat normální uživatelé. Když v těchto verzích odeberete bit SUID z aplikace a pokusíte se aplikaci spustit jako normální uživatel, zobrazí se následující chyba:
ping 8.8.8.8
# Výstup
ping: icmp otevřená zásuvka: Provoz není povolen
Zatímco v moderních distribucích Linuxu aplikace ping pravděpodobně nemá bit SUID:
ls -l /bin/ping
# Výstup
-rwxr-xr-x. 1 kořenový kořen 95232 25. července 2021 /bin/ping
Přesto můžete aplikaci úspěšně spustit jako běžný uživatel. Mechanismus, který to umožňuje, je ten, že aplikace ping má speciální schopnost CAP_NET_RAW.
Další možnosti aplikace se můžete naučit pomocí getcap příkaz takto:
sudo getcap /bin/ping
# Výstup
/bin/ping cap_net_raw=ep
Pokud příkaz getcap vrátí prázdnou odpověď, můžete tuto hodnotu nastavit ručně pomocí:
sudo setcap cap_net_raw+ep /bin/ping
Model způsobilosti procesu
V implementaci Linuxu jsou schopnosti každého procesu seskupeny do tří hlav:
Schopnost | Prohlášení |
povoleno | V tomto clusteru je seznam povolených dalších funkcí pro příslušný proces. Udělení povolení neznamená, že jej lze v té době aktivně používat. Zde je možné zahrnout oprávnění do sady efektivních schopností s další akcí. |
efektivní | Zobrazuje aktuálně aktivní seznam schopností souvisejícího procesu. S pomocnými funkcemi, které regulují systém dovedností, je možné dovednost vzdát nebo ji znovu získat. V každém případě to však lze provést pouze mezi již oprávněnými v povolené skupině. |
dědičný | Když aplikace spustí nový proces, nově spuštěný proces zobrazí seznam schopností, které zdědí ze seznamu povolených. |
Seznam povolených, efektivních a dědičných schopností pro běžící procesy kdykoli je zobrazen jako bitová maska na řádcích CapPrm, CapEff, a CapInh v souboru /proc/
Zkuste například načíst hodnoty vaší spuštěné shellové aplikace z /proc/self/status soubor:
kočka /proc/já/stav | grep Cap
# Výstup
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
Model schopnosti souborů v Linuxu
Činnost systému schopností pro soubory závisí na předpokladu, že tyto vlastnosti mohou být uloženy ve vrstvě virtuálního systému souborů (VFS). Podobně jako u procesního modelu spadají možnosti souborů do tří kategorií:
1. Povoleno
Systém určuje povolené schopnosti procesu, když je v tomto clusteru spuštěn odpovídající spustitelný soubor.
2. Efektivní
Na rozdíl od modelu způsobilosti procesu tato hlavička ukládá pouze jeden bit: aktivní nebo neaktivní. Pokud je bit aktivní, automaticky se aktivují schopnosti definované v seznamu povolených souborů přeneseny do seznamu efektivních schopností příslušného procesu, když je tento soubor spuštěn a proces je spuštěn vytvořené. Pokud bit není aktivní, neprovádí se automatický přenos povolených schopností na souboru do běžícího procesu.
Pokud je však kód příslušné aplikace integrován se systémem schopností, může aktivovat oprávnění v povolené sadě souboru pomocí systémových volání. Hlavním účelem tohoto chování je zajistit, aby staré aplikace, které neobsahují schopnosti, byly specifické pro systém kód, vývoj na úrovni softwarového kódu může pracovat se systémem schopností bez potřeby jakéhokoli zdrojového kódu Změny.
Možná si myslíte, že lépe napsané aplikace budou využívat schopnosti pouze v případě potřeby. Pokud je bit aktivní, všechny funkce v seznamu povolených se aktivují při spuštění aplikace.
3. Dědičné
Stejně jako v procesním modelu se spustí příslušný soubor a dojde k procesu. Pokud se poté z procesu spustí další aplikace, je zahrnuta do seznamu povolených nového procesu. Stručně řečeno, označuje seznam schopností, které lze zdědit.
Role schopností v systému Linux
Když spustíte určitý proces jako normální uživatel, nemáte žádná oprávnění. V důsledku toho máte přístup pouze k oddílům, které systém umožňuje běžným uživatelům. Hlavním důvodem je zpřísnění zabezpečení systému a zavedení takových opatření.
Umožnění přístupu všem uživatelům ke všem zdrojům může způsobit vážnou bezpečnostní chybu. Pro lidi, kteří používají systém pro škodlivé účely, bude velmi snadné zneužít zranitelnosti systému. Možnosti Linuxu se v takových věcech hodí. Zabezpečení svých aplikací můžete snadno posílit pomocí rozhraní API s jádrem.
Možnosti Linuxu jsou jen jedním z problémů, na které je třeba myslet při provádění velmi výkonných metod, jako je rozdělení uživatelů root oprávnění, přidělování různých oprávnění neprivilegovaným uživatelům a přijímání různých opatření ohledně otevřených portů v internetových službách s Linuxové servery.
Zlepšete zabezpečení svého linuxového serveru pomocí těchto 7 kroků posílení
Přečtěte si další
Související témata
- Linux
- Programování
- Linuxové jádro
- Operační systém
O autorovi

Inženýr a vývojář softwaru, který je fanouškem matematiky a technologií. Vždy měl rád počítače, matematiku a fyziku. Vyvinul projekty herních enginů a také strojové učení, umělé neuronové sítě a knihovny lineární algebry. Navíc pokračuje v práci na strojovém učení a lineárních maticích.
Přihlaste se k odběru našeho newsletteru
Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!
Chcete-li se přihlásit k odběru, klikněte sem