Furnizarea unui client OpenVPN cu etape care se opresc la eroare
Cinci etape împiedică un script de furnizare să lase o instalare pe jumătate: verifică intrările, pregătește setul, schimbă atomic, activează un singur proprietar, planifică retragerea.
Scripturile de furnizare care raportează o eroare și continuă sunt mai proaste decât scripturile care nu rulează niciodată. Configurarea clientului atinge chei protejate, o identitate la poarta de acces și un serviciu care poate deja deservește trafic. Fiecare dintre acestea are nevoie de o condiție de oprire, iar scriptul trebuie să știe la ce etapă a ajuns când s-a oprit.
Tratează totul ca o singură tranzacție cu cinci puncte de control și fă ca fiecare punct de control să refuze singur continuarea.
Corectează intrările înainte de a atinge sistemul de fișiere
Începe cu un contract explicit: o identitate, o sursă de profil, un proprietar de serviciu intenționat. Verifică faptul că profilul există, că certificatul și cheia la care face referire sunt lizibile și că directorul țintă aparține pachetului așteptat. O cale care se rezolvă nu este dovada că materialul din spatele ei este complet.
Respinge devreme variabilele goale. Un $DEVICE nesetat care se extinde în nimic transformă install -m 400 $KEY /etc/openvpn/client/ într-o copie îndreptată spre un director, iar eșecul apare mai târziu ca un serviciu care nu își poate citi cheia.
Asamblează setul de profiluri într-un director de pregătire
Construiește mai întâi setul complet într-un loc privat: profil, CA, certificat de client, cheie și orice ajutor pe care îl apelează profilul. Copiază cu install -m 400 -o root -g root astfel încât permisiunile să fie stabilite la creare, nu după. Apoi verifică referințele din interiorul profilului, deoarece o linie relativă ca sau key se rezolvă față de directorul de lucru al unității de îndată ce serviciul pornește. Nimic nu trebuie scris în directorul activ până când întregul set nu validează.
Înregistrează o amprentă ne-secretă a ceea ce a produs această rulare, de exemplu sha256sum office.conf păstrat lângă un marcator de versiune. Exact acea singură valoare permite unei rulări repetate să distingă o actualizare de o nefacere.
Schimbă atomic și păstrează setul anterior
Mută setul pregătit la locul lui într-o singură operațiune acolo unde sistemul de fișiere permite, și păstrează setul anterior revizuit sub un nume cu marcă de timp. O copie parțială care lasă un profil nou lângă o cheie veche produce un serviciu care se autentifică cu identitatea greșită și nu înregistrează nimic util despre motiv. Dacă schimbul nu poate fi atomic, ordonează mutările astfel încât profilul să ajungă ultimul.
Când ținta există deja, decide explicit dacă această rulare este o actualizare, o repetare identică sau un conflict cu profilul altui dispozitiv. Suprascrierea în silențire a unui profil care aparține altei identități este calea prin care două mașini ajung să partajeze un singur certificat. Refuză rularea și numește proprietarul aflat în conflict.
Activează un singur proprietar și dovedește-o
Alege o singură cale de activare, fie instanța systemd, fie NetworkManager, și folosește-o consecvent. Pornirea unui proces openvpn negestionat lângă o unitate activată oferă două tuneluri, actualizări DNS concurente și niciun răspuns clar despre care dintre ele este vizat de o comandă de oprire. După activare, verifică systemctl is-active openvpn-client@office, apoi ruta către prefixul îndepărtat, apoi resolvectl status pentru resolverul instalat de tunel. Încheie ajungând la o resursă pentru care există tunelul.
Un proces care rulează și o pictogramă verde în tavă sunt fapte despre proces, nu dovada că identitatea și politica de trafic au supraviețuit predării.
Rularea repetată și retragerea sunt fluxuri de lucru separate
O a doua rulare ar trebui să convergă spre aceleași fișiere revizuite și același proprietar, nu să creeze un al doilea cont sau un al doilea demon. Retragerea este o procedură proprie: oprește proprietarul exact, arhivează sau șterge profilul local conform politicii și revocă identitatea la poarta de acces. Ștergerea unui fișier de cheie local nu revocă o copie care a părăsit deja mașina.
Păstrează o cale de recuperare care nu depinde de tunel, cum ar fi accesul la consolă sau o a doua rută de administrare. O modificare de furnizare care te încuie în afara mașinii este o modificare eșuată chiar când fiecare etapă a raportat succes.
Scriptul care merită păstrat este o tranzacție în jurul proprietății și al dovezilor. O listă scurtă de comenzi de copiere privilegiate nu este același lucru.