Klargøringsskripter, der rapporterer en fejl og fortsætter, er værre end skripter, der aldrig kører. Klientopsætning rører beskyttede nøgler, en identitet ved gatewayen og en tjeneste, der måske allerede betjener trafik. Hver af dem har brug for en stopbetingelse, og skriptet skal vide, hvilken fase det nåede, da det stoppede.

Behandl det hele som én transaktion med fem kontrolpunkter, og få hvert kontrolpunkt til at nægte at fortsætte på egen hånd.

Ret input, før du rører filsystemet

Start med en udtrykkelig kontrakt: én identitet, én profilkilde, én tiltænkt tjenesteejer. Kontrollér, at profilen findes, at det certifikat og den nøgle, den henviser til, er læsbare, og at målkataloget tilhører den forventede pakke. En sti, der opløses, er ikke bevis for, at materialet bag den er komplet.

Afvis tomme variabler tidligt. En ikke-sat $DEVICE, der udvides til intet, gør install -m 400 $KEY /etc/openvpn/client/ til en kopi rettet mod et katalog, og fejlen dukker senere op som en tjeneste, der ikke kan læse sin nøgle.

Saml profilsættet i et klargøringskatalog

Byg først det komplette sæt et privat sted: profil, CA, klientcertifikat, nøgle og enhver hjælper, som profilen kalder. Kopiér med install -m 400 -o root -g root, så rettigheder sættes ved oprettelsen og ikke bagefter. Kontrollér derefter referencerne inde i profilen, fordi en relativ ca- eller key-linje opløses mod enhedens arbejdskatalog, når tjenesten starter. Der bør ikke skrives noget i det levende katalog, før hele sættet validerer.

Registrér et ikke-hemmeligt fingeraftryk af det, denne kørsel producerede, for eksempel sha256sum office.conf gemt ved siden af en versionsmarkør. Netop den ene værdi gør det muligt for en ny kørsel at skelne en opdatering fra en kørsel uden ændringer.

Skift atomisk og behold det forrige sæt

Flyt det klargjorte sæt på plads som én operation, hvor filsystemet tillader det, og behold det gennemgåede forrige sæt under et tidsstemplet navn. En delvis kopi, der efterlader en ny profil ved siden af en gammel nøgle, giver en tjeneste, der autentificerer med den forkerte identitet og ikke logger noget brugbart om hvorfor. Hvis skiftet ikke kan være atomisk, skal du ordne flytningerne, så profilen lander sidst.

Når målet allerede findes, skal du udtrykkeligt beslutte, om denne kørsel er en opdatering, en identisk genkørsel eller en konflikt med en anden enheds profil. Stille overskrivning af en profil, der tilhører en anden identitet, er måden, hvorpå to maskiner ender med at dele ét certifikat. Afvis i stedet kørslen og navngiv den konfliktende ejer.

Aktivér én ejer og bevis det

Vælg én aktiveringsvej, enten systemd-instansen eller NetworkManager, og brug den konsekvent. Start af en ustyret openvpn-proces ved siden af en aktiveret enhed giver to tunneler, konkurrerende DNS-opdateringer og intet klart svar på, hvilken en stopkommando rammer. Kontrollér efter aktiveringen systemctl is-active openvpn-client@office, derefter ruten til det fjerne præfiks, derefter resolvectl status for den resolver, tunnelen installerede. Slut af med at nå en ressource, som tunnelen findes for.

En kørende proces og et grønt bakkeikon er procesfakta, ikke bevis for at identiteten og trafikpolitikken overlevede overdragelsen.

Genkørsel og nedlæggelse er separate arbejdsgange

En anden kørsel bør konvergere mod de samme gennemgåede filer og den samme ejer, ikke oprette en anden konto eller en anden dæmon. Nedlæggelse er sin egen procedure: stop den præcise ejer, arkivér eller slet den lokale profil efter politik, og tilbagekald identiteten ved gatewayen. Sletning af en lokal nøglefil tilbagekalder ikke en kopi, der allerede har forladt maskinen.

Behold en gendannelsesvej, der ikke afhænger af tunnelen, såsom konsoladgang eller en anden administrationsrute. En klargøringsændring, der låser dig ude af maskinen, er en mislykket ændring, selv når hver fase rapporterede succes.

Det skript, der er værd at beholde, er en transaktion omkring ejerskab og bevis. En kort liste af privilegerede kopikommandoer er ikke det samme.

Relaterede artikler