Gli script di approvvigionamento che segnalano un errore e proseguono sono peggiori degli script che non vengono mai eseguiti. La configurazione del client tocca chiavi protette, un'identità sul gateway e un servizio che forse sta già servendo traffico. Ognuno di questi elementi richiede una condizione di arresto, e lo script deve sapere a quale fase è arrivato quando si è fermato.

Tratta l'intera faccenda come una transazione con cinque punti di controllo, e fai in modo che ogni punto di controllo rifiuti di proseguire da solo.

Correggi gli input prima di toccare il file system

Parti da un contratto esplicito: un'identità, una fonte di profilo, un proprietario del servizio previsto. Verifica che il profilo esista, che il certificato e la chiave a cui fa riferimento siano leggibili e che la directory di destinazione appartenga al pacchetto atteso. Un percorso che si risolve non è prova che il materiale dietro di esso sia completo.

Rifiuta presto le variabili vuote. Una $DEVICE non impostata che si espande a nulla trasforma install -m 400 $KEY /etc/openvpn/client/ in una copia rivolta a una directory, e il guasto arriva più tardi come un servizio che non riesce a leggere la propria chiave.

Assembla l'insieme dei profili in una directory di preparazione

Costruisci prima l'insieme completo in un luogo privato: profilo, CA, certificato client, chiave e qualsiasi ausiliario chiamato dal profilo. Copia con install -m 400 -o root -g root così che i permessi siano fissati alla creazione e non dopo. Poi controlla i riferimenti dentro il profilo, perché una riga relativa ca o key si risolve rispetto alla directory di lavoro dell'unità appena il servizio parte. Nulla va scritto nella directory attiva finché l'intero insieme non è validato.

Registra un'impronta non segreta di ciò che questa esecuzione ha prodotto, per esempio sha256sum office.conf conservato accanto a un marcatore di versione. È proprio quel singolo valore a permettere a una riesecuzione di distinguere un aggiornamento da un'azione nulla.

Scambia in modo atomico e conserva l'insieme precedente

Sposta l'insieme preparato al suo posto con una sola operazione dove il file system lo consente, e conserva l'insieme precedente riesaminato sotto un nome con marca temporale. Una copia parziale che lascia un nuovo profilo accanto a una vecchia chiave produce un servizio che si autentica con l'identità sbagliata e non registra nulla di utile sul motivo. Se lo scambio non può essere atomico, ordina gli spostamenti in modo che il profilo arrivi per ultimo.

Quando la destinazione esiste già, decidi esplicitamente se questa esecuzione è un aggiornamento, una riesecuzione identica o un conflitto con il profilo di un altro dispositivo. Sovrascrivere in silenzio un profilo che appartiene a un'altra identità è il modo in cui due macchine finiscono per condividere un solo certificato. Rifiuta l'esecuzione e nomina il proprietario in conflitto.

Attiva un solo proprietario e dimostralo

Scegli un solo percorso di attivazione, o l'istanza systemd o NetworkManager, e usalo in modo coerente. Avviare un processo openvpn non gestito accanto a un'unità abilitata dà due tunnel, aggiornamenti DNS concorrenti e nessuna risposta chiara su quale colpisca un comando di arresto. Dopo l'attivazione, controlla systemctl is-active openvpn-client@office, poi la rotta verso il prefisso remoto, poi resolvectl status per il resolver installato dal tunnel. Concludi raggiungendo una risorsa per la quale il tunnel esiste.

Un processo in esecuzione e un'icona verde nella barra sono fatti del processo, non prova che l'identità e la politica di traffico abbiano superato il passaggio.

Riesecuzione e dismissione sono flussi di lavoro separati

Una seconda esecuzione dovrebbe convergere sugli stessi file riesaminati e sullo stesso proprietario, non creare un secondo account o un secondo demone. La dismissione è una procedura a sé: ferma il proprietario esatto, archivia o elimina il profilo locale secondo la politica, e revoca l'identità sul gateway. Eliminare un file di chiave locale non revoca una copia che ha già lasciato la macchina.

Mantieni un percorso di ripristino che non dipenda dal tunnel, come l'accesso alla console o una seconda rotta di gestione. Un cambiamento di approvvigionamento che ti chiude fuori dalla macchina è un cambiamento fallito anche quando ogni fase ha riferito successo.

Lo script che vale la pena conservare è una transazione attorno alla proprietà e alle prove. Un breve elenco di comandi di copia privilegiati non è la stessa cosa.

Articoli correlati