Proces Linuxu je tradičně buď privilegovaný (běží jako root), nebo bez oprávnění. Privilegované procesy nepodléhají kontrole oprávnění jádra, a proto mají plnou moc nad systémem. Schopnost je odlišné a nezávislé oprávnění, které může proces použít k obcházení určitých kontrol oprávnění. Schopnosti byly poprvé představeny v Linuxu 2.2 a několik dalších bylo přidáno v pozdějších verzích. Obvykle jsou nastaveny na spustitelné soubory a jsou automaticky uděleny procesu, když je spuštěn soubor s funkcí. Schopnosti v podstatě rozdělují sílu uživatele root do samostatných oprávnění, což zlepšuje zabezpečení omezením přístupu, který by útočník získal zneužitím nebo zneužitím služby.
Tato příručka představí některé běžně používané funkce a ukáže, jak je lze prohlížet a upravovat.
Běžné schopnosti
Linuxové jádro implementuje velké množství funkcí. Některé z nich jsou:
- CAP_SYS_ADMIN:Umožňuje širokou škálu operací. Této schopnosti je třeba se vyhnout ve prospěch specifičtějších schopností.
- CAP_CHOWN:Proveďte změny ID uživatele a ID skupiny souborů
- CAP_DAC_READ_SEARCH:Vynechá čtení souborů a kontroly čtení/spouštění adresáře. Program s touto schopností lze použít ke čtení libovolného souboru v systému.
- CAP_DAC_OVERRIDE:Přepíše DAC (Discretionary Access Control), tj. vynechá kontroly oprávnění ke čtení/zápisu/spouštění. Tato schopnost uděluje spustitelnému souboru schopnost přistupovat a upravovat jakýkoli soubor v souborovém systému.
- CAP_NET_BIND_SERVICE:Umožňuje vazbu na čísla portů nižší než 1024.
- CAP_KILL:Obejít kontroly oprávnění pro odesílání signálů procesům, jako jsou SIGHUP a SIGKILL.
- CAP_SYS_NICE:Upravte mimo jiné hodnotu zdvořilosti a prioritu plánování procesů.
- CAP_SYS_RESOURCE:Umožňuje přepsat různé limity systémových prostředků, jako jsou diskové kvóty, limity času CPU atd.
Úplný seznam je k dispozici na manuálové stránce schopností(7).
Souborům lze přiřadit možnosti ve 3 různých sadách:povolené, dědičné a efektivní. Vlákna mají 2 další sady:ambient a bounding. Každá sada může obsahovat nula nebo více funkcí, s výjimkou efektivní sady pro soubory, což je ve skutečnosti jeden bit. Tyto sady definují komplexní chování jádra, které přesahuje rámec tohoto průvodce. Při přiřazování schopností souborům ve většině případů použijeme povolené a efektivní sady.
POZNÁMKA:SELinux může narušovat funkce. Na systémech s SELinux v režimu vynucení může bránit procesům ve využívání jejich schopností.
Požadované nástroje
Existují dva různé balíčky pro správu schopností:libcap a libcap-ng. Druhý je navržen tak, aby byl jednodušší než první. Oba jsou popsány v této příručce.
libcap poskytuje getcap a setcap pro prohlížení a nastavení možností souborů, zatímco libcap-ng sjednocuje obě funkce do jednoho nástroje, filecap.
libcap
Instalace
V Debianu, Ubuntu a dalších distribucích založených na Debianu lze nástroje libcap nainstalovat pomocí:
apt update apt install libcap2-bin
Pro instalaci na CentOS použijte následující příkaz:
yum install libcap
Pro instalaci na Fedoru použijte následující příkaz:
dnf install libcap
Pro instalaci na Arch použijte následující příkaz:
pacman -Sy libcap
Využití
getcap jednoduše zobrazuje možnosti přiřazené souboru, pokud nějaké existují. Použijte následující syntaxi:
getcap /path/to/binary
Například:
Getcap může také vyhledávat rekurzivně pomocí parametru -r. Například:
POZNÁMKA:2>/dev/null se používá, aby se zabránilo zahlcení výstupu chybami "Operace není podporována", ke kterým dochází, když se getcap pokouší získat schopnosti souborů v /sys, /proc atd. Tyto speciální virtuální souborové systémy nepodporují schopnosti.
Chcete-li nastavit možnosti souboru pomocí setcap, použijte následující syntaxi:
setcap CAP+set filename
Chcete-li například přidat CAP_CHOWN a CAP_DAC_OVERRIDE k povoleným a účinným sadám, použijte:
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
Chcete-li odebrat funkce ze souboru, použijte parametr -r:
setcap -r filename
Zde je několik dalších příkladů:
libcap-ng
Instalace
Chcete-li nainstalovat na Debian, Ubuntu a další distribuce založené na Debianu:
apt update apt install libcap-ng-utils
Instalace na CentOS:
yum install libcap-ng-utils
Instalace na Fedoru:
dnf install libcap-ng-utils
Instalace na Arch:
pacman -Sy libcap-ng
Využití
- Program filecap odkazuje na možnosti bez předpony "CAP_" (například NET_ADMIN místo CAP_NET_ADMIN).
- filecap nepracuje s relativními cestami, očekává úplnou cestu při předávání souborů nebo adresářů jako argumentů.
- filecap neumožňuje specifikovat sady schopností, při nastavování schopností vždy používá povolené a efektivní.
Chcete-li zobrazit možnosti přiřazené souboru:
filecap /full/path/to/file
Chcete-li prohledat adresář rekurzivně, použijte:
filecap /full/path/to/dir
Chcete-li prohledat celý souborový systém pomocí filecap, použijte jeden z následujících příkazů:
filecap / filecap -a
Zde je několik příkladů použití filecap k prozkoumání souborů a adresářů:
Chcete-li nastavit schopnost souboru, použijte syntaxi:
filecap /full/path/to/file cap_name
Například:
filecap /usr/bin/tac dac_override
Chcete-li odebrat funkce, použijte tuto syntaxi:
filecap /full/path/to/file none
Zde je několik příkladů nastavení a odebrání funkcí pomocí filecap:
Závěr
Schopnosti jsou výkonnou funkcí jádra s širokými bezpečnostními aplikacemi. Kdykoli je to možné, měly by být nahrazeny úplnými oprávněními a kořenovým SUID.