Zřizování klienta OpenVPN ve fázích, které se zastaví při chybě
Pět fází zabrání tomu, aby zřizovací skript nechal polovinu instalace: ověř vstupy, připrav sadu, atomicky vyměň, aktivuj jednoho vlastníka, naplánuj vyřazení.
Zřizovací skripty, které ohlásí chybu a pokračují, jsou horší než skripty, které se nikdy nespustí. Nastavení klienta se dotýká chráněných klíčů, identity na bráně a služby, která už může obsluhovat provoz. Každé z toho potřebuje podmínku zastavení a skript musí vědět, do které fáze se dostal, když se zastavil.
Ber celou věc jako jednu transakci s pěti kontrolními body a přinuť každý kontrolní bod, aby sám odmítl pokračovat.
Oprav vstupy, než se dotkneš souborového systému
Začni výslovnou dohodou: jedna identita, jeden zdroj profilu, jeden zamýšlený vlastník služby. Ověř, že profil existuje, že certifikát a klíč, na které odkazuje, jsou čitelné a že cílový adresář patří očekávanému balíčku. Cesta, která se vyřeší, není důkazem, že materiál za ní je úplný.
Odmítej prázdné proměnné brzy. Nenastavená $DEVICE, která se rozvine v nic, promění install -m 400 $KEY /etc/openvpn/client/ v kopii namířenou do adresáře a selhání dorazí později jako služba, která nemůže přečíst svůj klíč.
Sestav sadu profilů v přípravném adresáři
Nejprve sestav úplnou sadu na soukromém místě: profil, CA, klientský certifikát, klíč a každý pomocník, který profil volá. Kopíruj s install -m 400 -o root -g root, aby se oprávnění nastavila při vytvoření, ne až potom. Pak zkontroluj odkazy uvnitř profilu, protože relativní řádek ca nebo key se vyhodnocuje vůči pracovnímu adresáři jednotky, jakmile se služba spustí. Do živého adresáře se nesmí zapsat nic, dokud se celá sada neověří.
Zaznamenej ne-tajný otisk toho, co tento běh vytvořil, například sha256sum office.conf uložený vedle značky verze. Právě tato jediná hodnota umožní opakovanému běhu rozeznat aktualizaci od nečinnosti.
Vyměň atomicky a zachovej předchozí sadu
Přesuň připravenou sadu na místo jednou operací, kde to souborový systém dovolí, a zachovej zkontrolovanou předchozí sadu pod časovým razítkem. Částečná kopie, která nechá nový profil vedle starého klíče, vytvoří službu, jež se autentizuje špatnou identitou a nezaloguje nic užitečného o důvodu. Pokud výměna nemůže být atomická, seřaď přesuny tak, aby profil přistál poslední.
Když cíl už existuje, výslovně rozhodni, zda je tento běh aktualizace, totožné opakování, nebo konflikt s profilem jiného zařízení. Tiché přepsání profilu, který patří jiné identitě, je způsob, jak dva stroje skončí sdílením jednoho certifikátu. Místo toho běh odmítni a pojmenuj konfliktního vlastníka.
Aktivuj jednoho vlastníka a dokaž to
Zvol jednu cestu aktivace, buď instanci systemd, nebo NetworkManager, a používej ji důsledně. Spuštění neřízeného procesu openvpn vedle povolené jednotky dá dva tunely, soupeřící aktualizace DNS a žádnou jasnou odpověď, na který z nich míří příkaz k zastavení. Po aktivaci zkontroluj systemctl is-active openvpn-client@office, pak trasu k vzdálenému prefixu, pak resolvectl status pro resolver, který tunel nainstaloval. Skonči dosažením jednoho zdroje, kvůli kterému tunel existuje.
Běžící proces a zelená ikona v oznamovací oblasti jsou fakta o procesu, ne důkaz, že identita a dopravní politika přežily předání.
Opakovaný běh a vyřazení jsou samostatné postupy
Druhý běh by měl konvergovat ke stejným zkontrolovaným souborům a stejnému vlastníkovi, ne vytvořit druhý účet nebo druhého démona. Vyřazení je vlastní postup: zastav přesného vlastníka, archivuj nebo smaž místní profil podle zásad a odeber identitu na bráně. Smazání místního souboru s klíčem neodebere kopii, která už stroj opustila.
Zachovej cestu pro obnovu, která nezávisí na tunelu, například přístup ke konzoli nebo druhou správcovskou trasu. Změna zřízení, která tě zamkne mimo stroj, je neúspěšná změna, i když každá fáze ohlásila úspěch.
Skript, který stojí za to si nechat, je transakce kolem vlastnictví a důkazů. Krátký seznam privilegovaných kopírovacích příkazů není totéž.