Príkaz VPN beží pod vaším používateľom, heslo sa neobjaví a tunel sa zdvihne. Táto postupnosť vyzerá ako operácia bez oprávnení, a zvyčajne ňou nie je. Sieťové zmeny vykonáva samostatná služba a zaujímavá otázka je, čo táto služba urobí pre volajúceho, ktorého neoverila. Počítanie výziev na heslo vám o tejto hranici nič nepovie.

Rozhranie, mechanizmus a kontrola

Rozhranie prijíma požiadavky: pripojiť, odpojiť, vybrať profil. Mechanizmus vlastní sieťové operácie: vytváranie rozhraní, zmenu trás, aplikovanie filtrov. Kontrola autorizácie rozhoduje, či tento volajúci smie požiadať o túto akciu. Tieto tri môžu byť rozdelené medzi binárku, pomocníka a systémovú službu a používateľ vidí len prvú.

Roly môžu žiť v jednej binárke, v dvoch procesoch alebo v klientovi a systémovej službe a príkaz, ktorý používateľ vidí, zriedka prezradí ktorú. Ikona v oznamovacej oblasti a systémový démon môžu vyzerať ako jedna aplikácia, hoci bežia s veľmi rozdielnou právomocou. Oprávnenie v čase inštalácie a oprávnenie v čase požiadavky sú tiež rozdielne veci. Inštalátor, ktorý bežal ako root, môže zanechať službu počúvajúcu neskoršie požiadavky dlho po tom, čo správca balíčkov skončil. Právomoc drží táto služba, nie príkaz, ktorý ste napísali.

Delegovanie je bežný návrh

Delegovať privilegovanú sieťovú prácu službe je rozumná architektúra. Udržiava bežné aplikácie bez oprávnení a centralizuje operácie, ktoré si vyžadujú starostlivosť. Návrh sa vyplatí len vtedy, keď služba kontroluje aj to, kto sa pýta a na čo. Bez tejto kontroly sú to len širšie dvere.

NetworkManager je konkrétny príklad pre Linux. Jeho sprievodca konfiguráciou vysvetľuje, ako PolicyKit autorizuje požiadavky, ktoré nie sú od root, v predvolenom nastavení. To ukazuje delegovanú autorizáciu v reálnom produkte. Nedokazuje, že každý komerčný klient používa NetworkManager, a neopisuje cestu k socketu ani politiku žiadneho konkrétneho dodávateľa.

Vzorom je delegovanie s politikou v pozadí. Príklad je jedna implementácia tohto vzoru, nie univerzálna.

Čítajte hranicu, nie požiadavku

Nájdite službu, vlastníka jej konfigurácie a miestne rozhranie, ktoré používa frontend. Potom sa pýtajte, ktorí používatelia smú žiadať ktoré operácie. Možnosť zdvihnúť a spustiť jeden uložený profil nie je rovnaké oprávnenie ako načítanie konfigurácie, ktorú operátor nikdy neprezrel. Rozdiel je celá bezpečnostná otázka.

Začnite pri správcovi služieb a pri vlastnom pohľade klienta na jeho oprávnenia. Príkazy nižšie ukazujú, či démon beží, čo od neho volajúci smie žiadať a čo démon vystavuje v svojom behovom adresári.

systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager

Pýtajte sa aj na to, na čo operácia pôsobí. Položka ponuky, ktorá vyzerá osobne, môže zmeniť trasy a DNS pre celý stroj, čo znamená, že môže narušiť relácie iných používateľov. Dosah vplyvu patrí do rovnakej revízie ako oprávnenie a zvyčajne rozhoduje o tom, či služba potrebuje užšiu rolu.

Opravujte oprávnenia podporovaným spôsobom

Urobiť chránený riadiaci socket zapisovateľný pre všetkých alebo pridať účet do širokej administratívnej skupiny odstráni chybu oprávnenia a vytvorí väčšiu. Chyba bola jediná vec, ktorá vám hovorila, že táto hranica existuje. Použite dokumentovaný proces členstva alebo autorizácie vrátane obnovenia relácie, ktoré vyžaduje. Členstvo v skupine často platí len pre nové prihlasovacie relácie, a preto sa zmena môže zdať, že nič nerobí, až do ďalšieho prihlásenia.

Ak produkt vystavuje užšiu rolu pre operáciu, uprednostnite ju pred plošným oprávnením. Zapíšte zvolenú rolu a jej vlastníka vedľa názvu služby.

Ako vyzerá dobré rozdelenie

Bežné aplikácie zostávajú bez oprávnení, služba vykonáva len nastavenie, na ktoré bola navrhnutá, a každý volajúci sa kontroluje proti politike, ktorú niekto vlastní. To je obhájiteľný návrh. Je aj auditovateľný, pretože politika má pri sebe meno. Čokoľvek väčšie si zaslúži písomnú výnimku a nie tichú zmenu oprávnení.

Režimom zlyhania je služba, ktorá vykoná akúkoľvek požiadavku akéhokoľvek miestneho používateľa, pretože rozhranie je pohodlné. Z pohľadu používateľa to vyzerá rovnako a nesie oveľa väčšiu právomoc. Otestujte jednu odmietnutú požiadavku, nie len tú úspešnú. Odmietnutie, ktoré prichádza z politiky, je dôkazom, že politika existuje.

Súvisiace články