Dva zlepené recepty s minimálnymi právami neprinášajú prísnejšie nasadenie. Jeden model nechá démona štartovať s právami a po inicializácii prejsť na neprivilegovaný účet; druhý nechá správcu služieb spustiť ho pod obmedzenou identitou už od prvej inštrukcie. Každý funguje sám a kombinácia často vytvorí službu, ktorá nedokáže čisto urobiť ani jednu z dvoch úloh. Zvyšok prechádza rozhodnutie po poradí.

Dva modely, jeden vlastník prepnutia

Prvý model patrí démonovi. Možnosti OpenVPN z komunitného balíka user a group menia identitu po tom, čo sú tunel a kľúče nastavené, a persist-key spolu s persist-tun udržujú tieto prostriedky naďalej použiteľné.

Druhý model patrí správcovi služieb. Nastavenie systemd User= alebo Group= určuje identitu, pod ktorou proces štartuje, a direktívy schopností určujú, čo smie držať. Voľba medzi modelmi je otázka balenia skôr, než je otázkou bezpečnosti, a správca balíka už na ňu odpovedal. Vašou úlohou je tú odpoveď nájsť, nie vymyslieť tretiu možnosť.

Oba sú legitímne. Chyba je brať ich ako vrstvy jedného návrhu, pretože druhý model môže zo zmeny identity prvého urobiť operáciu, ktorú proces už nesmie vykonať.

Určite, kde sa identita mení

Ak jednotka už štartuje ako vyhradený účet, pridanie démonovej inštrukcie prejsť na iný účet žiada prechod setuid, ktorý spevnená služba nikdy nemala robiť. Zlyhanie sa prejaví ako chyba oprávnenia pri štarte, nie ako jasná správa politiky. Číta sa to ako chýbajúca schopnosť, čo ľudí posiela k širšej množine obmedzení namiesto k otázke identity.

Prečítajte si, čo nainštalovaný balík skutočne dodáva, skôr než čokoľvek upravíte, vrátane jeho drop-in adresára. Niektoré jednotky zámerne vynechávajú vlastný pokles démona, pretože správca to už rieši, a iné sa spoliehajú na tieto možnosti pri prepnutí po inicializácii. Odstránenie ktorejkoľvek z nich bez znalosti zdedeného modelu je spôsob, akým funkčná služba prestane štartovať.

Zapíšte zvolený model na jeden riadok: vlastnený správcom, alebo vlastnený démonom. Každá ďalšia direktíva musí byť s tou vetou v súlade a zmiešanú jednotku treba brať ako chybu, nie ako kompromis.

Schopnosti sú limity, nie dary

Množina obmedzení schopností hovorí, čo proces smie držať najviac. Je to strop a uvedenie schopnosti tam samo o sebe nič nedáva, preto jednotka so štedrou množinou obmedzení môže aj tak zlyhať pri vytváraní tunela.

To, čo skutočne umiestni schopnosť do ambientnej množiny služby, je AmbientCapabilities=. Referenčná príručka spúšťania systemd dokumentuje obe direktívy oddelene a tento rozdiel vysvetľuje väčšinu mätúcich rád o schopnostiach na internete.

Pridajte schopnosť až potom, čo ju zlyhávajúca operácia identifikuje. Širšia množina obmedzení skrýva skutočnú príčinu a necháva službu privilegovanejšou, než návrh zamýšľal. Sťažuje aj kontrolu jednotky, pretože strop už neopisuje prácu. Odoberte nadbytočnú schopnosť, keď sa skutočná porucha opraví.

Zmapujte oprávnenia na životný cyklus

Vymenujte, čo musí proces robiť v každej fáze: štart, ustálený stav, opätovné overenie a ukončenie. Vytvorenie rozhrania, zmeny trás, čítanie chráneného kľúča a volanie pomocníka sa nedejú všetky v tom istom okamihu ani za rovnakých požiadaviek. Zoraďte zoznam podľa fázy, skôr než ho zoradíte podľa schopnosti.

Možnosti trvácnosti zachovávajú prostriedky naprieč opätovným vyjednávaním a nedávajú oprávnenia, ktoré nikdy neboli držané. Kľúč, ktorý proces pri štarte neprečíta, zostane nečitateľný aj neskôr, čokoľvek hovoria príznaky trvácnosti. Príznaky zachovávajú to, čo už fungovalo.

Použite vyhradený účet, nie spoločný. Vývojári OpenVPN varujú pred zvykom používať nobody ako všeobecný príklad, pretože iné služby na hostiteľovi už môžu bežať pod tým účtom a izolácia, ktorú si myslíte, že máte, tam nie je.

Funkcie, ktoré menia miestne zaťaženie, ako odklon dátového kanála alebo zostavenie s iným linkovaním, môžu posunúť, ktoré operácie sú potrebné. Mapu revidujte, keď sa zmení balík, nie len keď sa niečo pokazí.

Zapíšte plán a zachovajte prístup na obnovu

Záznam o nasadení by mal pomenovať správcu, identitu pri štarte, zamýšľanú ustálenú identitu a každé oprávnenie spolu s operáciou, ktorá ho vyžaduje. Práve ten záznam robí ďalšiu zmenu kontrolovateľnou namiesto experimentálnej.

Počas úprav majte dostupný prístup ku konzole, pretože jednotku, ktorá zlyhá pri štarte, je ťažké opraviť na diaľku. Otestujte reštart a úplné reštartovanie, než zmenu vyhlásite za hotovú. Jednotka, ktorá prežije reštart, môže stále zlyhať predtým, než je sieť hore.

Úspech je pochopený životný cyklus s minimálnymi oprávneniami, nie proces, ktorý náhodou beží pod menom, ktoré nie je root.

Súvisiace články