Váš příkaz VPN běží bez oprávnění; služba ne
Žádná výzva k zadání hesla neříká, kdo mění trasy. Najděte službu, rozhraní, které vystavuje, a politiku, která rozhoduje, kdo smí žádat.
Příkaz VPN běží pod vaším uživatelem, heslo se neobjeví a tunel se zvedne. Tato posloupnost vypadá jako operace bez oprávnění, a obvykle jí není. Síťové změny provádí samostatná služba a zajímavá otázka je, co tato služba udělá pro volajícího, kterého neověřila. Počítání výzev k heslu vám o této hranici neřekne nic.
Rozhraní, mechanismus a kontrola
Rozhraní přijímá požadavky: připojit, odpojit, vybrat profil. Mechanismus vlastní síťové operace: vytváření rozhraní, změnu tras, aplikaci filtrů. Kontrola autorizace rozhoduje, zda tento volající smí o tuto akci požádat. Tyto tři mohou být rozděleny mezi binárku, pomocníka a systémovou službu a uživatel vidí jen první.
Role mohou žít v jedné binárce, ve dvou procesech nebo v klientovi a systémové službě a příkaz, který uživatel vidí, zřídka prozradí který. Ikona v oznamovací oblasti a systémový démon mohou vypadat jako jedna aplikace, přitom běží s velmi rozdílnou pravomocí. Oprávnění v době instalace a oprávnění v době požadavku jsou také různé věci. Instalátor, který běžel jako root, může zanechat službu naslouchající pozdějším požadavkům dlouho poté, co správce balíčků skončil. Pravomoc drží tato služba, ne příkaz, který jste napsali.
Delegování je běžný návrh
Delegovat privilegovanou síťovou práci na službu je rozumná architektura. Udržuje běžné aplikace bez oprávnění a centralizuje operace, které vyžadují péči. Návrh se vyplatí jen tehdy, když služba také kontroluje, kdo se ptá a na co. Bez této kontroly jsou to jen širší dveře.
NetworkManager je konkrétní příklad pro Linux. Jeho průvodce konfigurací vysvětluje, jak PolicyKit autorizuje požadavky, které nejsou od root, ve výchozím nastavení. To ukazuje delegovanou autorizaci v reálném produktu. Nedokazuje, že každý komerční klient používá NetworkManager, a nepopisuje cestu k socketu ani politiku žádného konkrétního dodavatele.
Vzorem je delegování s politikou v pozadí. Příklad je jedna implementace tohoto vzoru, ne univerzální.
Čtěte hranici, ne požadavek
Najděte službu, vlastníka její konfigurace a místní rozhraní, které používá frontend. Pak se ptejte, kteří uživatelé smějí žádat které operace. Možnost zvednout a spustit jeden uložený profil není stejné oprávnění jako načtení konfigurace, kterou operátor nikdy neprohlédl. Rozdíl je celá bezpečnostní otázka.
Začněte u správce služeb a u vlastního pohledu klienta na jeho oprávnění. Příkazy níže ukazují, zda démon běží, co od něj volající smí žádat a co démon vystavuje ve svém běhovém adresáři.
systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager
Ptejte se také, na co operace působí. Položka nabídky, která vypadá osobně, může změnit trasy a DNS pro celý stroj, což znamená, že může narušit relace jiných uživatelů. Dosah dopadu patří do stejné revize jako oprávnění a obvykle rozhoduje o tom, zda služba potřebuje užší roli.
Opravujte oprávnění podporovaným způsobem
Udělat chráněný řídicí socket zapisovatelný pro všechny nebo přidat účet do široké administrativní skupiny odstraní chybu oprávnění a vytvoří větší. Chyba byla jediná věc, která vám říkala, že tato hranice existuje. Použijte dokumentovaný proces členství nebo autorizace, včetně obnovení relace, které vyžaduje. Členství ve skupině často platí jen pro nové přihlašovací relace, a proto se změna může zdát, že nic nedělá, až do dalšího přihlášení.
Pokud produkt pro operaci vystavuje užší roli, dejte jí přednost před plošným oprávněním. Zapište zvolenou roli a jejího vlastníka vedle názvu služby.
Jak vypadá dobré rozdělení
Běžné aplikace zůstávají bez oprávnění, služba provádí jen nastavení, pro které byla navržena, a každý volající se kontroluje proti politice, kterou někdo vlastní. To je obhajitelný návrh. Je také auditovatelný, protože politika má u sebe jméno. Cokoli většího si zaslouží písemnou výjimku, ne tiché rozšíření oprávnění.
Režimem selhání je služba, která provede jakýkoli požadavek jakéhokoli místního uživatele, protože rozhraní je pohodlné. Z pohledu uživatele to vypadá stejně a nese mnohem větší pravomoc. Otestujte jeden odmítnutý požadavek, ne jen ten úspěšný. Odmítnutí, které přichází z politiky, je důkazem, že politika existuje.