Priprema OpenVPN klijenta u fazama koje se zaustavljaju na grešci
Pet faza sprječavaju skriptu za pripremu da ostavi pola instalacije: provjeri ulaze, pripremi skup, zamijeni atomski, aktiviraj jednog vlasnika, isplaniraj ukidanje.
Skripte za pripremu koje prijave grešku i nastave rade gore od skripti koje se nikada ne pokrenu. Postavljanje klijenta dira zaštićene ključeve, identitet na pristupniku i servis koji možda već poslužuje promet. Svakome od toga treba uvjet zaustavljanja, a skripta mora znati do koje je faze stigla kada se zaustavila.
Tretiraj cijelu stvar kao jednu transakciju s pet kontrolnih tačaka i natjeraj svaku kontrolnu tačku da sama odbije nastavak.
Popravi ulaze prije nego dodirneš datotečni sistem
Počni s izričitim ugovorom: jedan identitet, jedan izvor profila, jedan namjeravani vlasnik servisa. Provjeri da profil postoji, da su certifikat i ključ na koje upućuje čitljivi i da ciljni direktorij pripada očekivanom paketu. Putanja koja se razriješi nije dokaz da je materijal iza nje potpun.
Odbij prazne varijable rano. Nepostavljena $DEVICE koja se širi u ništa pretvara install -m 400 $KEY /etc/openvpn/client/ u kopiju usmjerenu na direktorij, a kvar dolazi kasnije kao servis koji ne može pročitati svoj ključ.
Sastavi skup profila u pripremnom direktoriju
Prvo izgradi potpuni skup na privatnom mjestu: profil, CA, klijentski certifikat, ključ i svaki pomoćnik koji profil poziva. Kopiraj s install -m 400 -o root -g root tako da se dozvole postave pri stvaranju, a ne poslije. Zatim provjeri reference unutar profila, jer se relativna linija ca ili key razrješava prema radnom direktoriju jedinice kada se servis pokrene. Ništa se ne smije pisati u živi direktorij dok se cijeli skup ne provjeri.
Zabilježi ne-tajni otisak onoga što je ovaj prolaz proizveo, na primjer sha256sum office.conf pohranjen uz oznaku verzije. Upravo ta jedna vrijednost omogućava ponovnom prolazu da razlikuje ažuriranje od nepostupanja.
Zamijeni atomski i sačuvaj prethodni skup
Premjesti pripremljeni skup na mjesto jednom operacijom gdje to datotečni sistem dopušta i sačuvaj pregledani prethodni skup pod vremenski označenim imenom. Djelimična kopija koja ostavi novi profil uz stari ključ stvara servis koji se autentificira s pogrešnim identitetom i ne bilježi ništa korisno o razlogu. Ako zamjena ne može biti atomska, poredaj premještanja tako da profil sleti posljednji.
Kada cilj već postoji, izričito odluči je li ovaj prolaz ažuriranje, identično ponavljanje ili sukob s profilom drugog uređaja. Tiho prepisivanje profila koji pripada drugom identitetu put je kojim dvije mašine završe dijeleći jedan certifikat. Umjesto toga odbij prolaz i imenuj sukobljenog vlasnika.
Aktiviraj jednog vlasnika i dokaži to
Odaberi jedan put aktivacije, bilo instancu systemd bilo NetworkManager, i koristi ga dosljedno. Pokretanje neupravljanog procesa openvpn uz omogućenu jedinicu daje dva tunela, konkurentska DNS ažuriranja i nema jasnog odgovora na koje od njih cilja naredba za zaustavljanje. Nakon aktivacije provjeri systemctl is-active openvpn-client@office, zatim rutu do udaljenog prefiksa, zatim resolvectl status za razrješivač koji je tunel instalirao. Završi dosezanjem jednog resursa zbog kojeg tunel postoji.
Proces koji radi i zelena ikona u traci su činjenice o procesu, ne dokaz da su identitet i prometna politika preživjeli primopredaju.
Ponovni prolaz i ukidanje su odvojeni tokovi rada
Drugi prolaz treba konvergirati na iste pregledane datoteke i istog vlasnika, a ne stvoriti drugi račun ili drugi daemon. Ukidanje je vlastiti postupak: zaustavi točno određenog vlasnika, arhiviraj ili izbriši lokalni profil prema politici i opozovi identitet na pristupniku. Brisanje lokalne datoteke ključa ne opoziva kopiju koja je već napustila mašinu.
Zadrži put oporavka koji ne zavisi od tunela, poput pristupa konzoli ili druge rute za upravljanje. Promjena pripreme koja te zaključa izvan kutije je neuspjela promjena čak i kada je svaka faza prijavila uspjeh.
Skripta koju vrijedi zadržati je transakcija oko vlasništva i dokaza. Kratak spisak privilegovanih naredbi za kopiranje nije ista stvar.