Παροχή ενός πελάτη OpenVPN με στάδια που σταματούν σε σφάλμα
Πέντε στάδια εμποδίζουν ένα σενάριο παροχής να αφήσει μισή εγκατάσταση: έλεγχος εισόδων, προετοιμασία του συνόλου, ατομική αλλαγή, ενεργοποίηση ενός ιδιοκτήτη, σχεδιασμός απόσυρσης.
Τα σενάρια παροχής που αναφέρουν σφάλμα και συνεχίζουν είναι χειρότερα από σενάρια που δεν εκτελούνται ποτέ. Η ρύθμιση του πελάτη αγγίζει προστατευμένα κλειδιά, μια ταυτότητα στην πύλη και μια υπηρεσία που μπορεί ήδη να εξυπηρετεί κίνηση. Κάθε ένα από αυτά χρειάζεται συνθήκη διακοπής, και το σενάριο πρέπει να γνωρίζει σε ποιο στάδιο έφτασε όταν σταμάτησε.
Αντιμετώπισε το όλο θέμα ως μία συναλλαγή με πέντε σημεία ελέγχου, και κάνε κάθε σημείο ελέγχου να αρνείται μόνο του να συνεχίσει.
Διόρθωσε τις εισόδους πριν αγγίξεις το σύστημα αρχείων
Ξεκίνα με ρητή συμφωνία: μία ταυτότητα, μία πηγή προφίλ, ένας προβλεπόμενος ιδιοκτήτης υπηρεσίας. Επαλήθευσε ότι το προφίλ υπάρχει, ότι το πιστοποιητικό και το κλειδί στα οποία παραπέμπει είναι αναγνώσιμα, και ότι ο κατάλογος προορισμού ανήκει στο αναμενόμενο πακέτο. Μια διαδρομή που επιλύεται δεν αποτελεί απόδειξη ότι το υλικό πίσω της είναι πλήρες.
Απόρριψε νωρίς τις κενές μεταβλητές. Μια μη ορισμένη $DEVICE που επεκτείνεται στο κενό μετατρέπει το install -m 400 $KEY /etc/openvpn/client/ σε αντίγραφο με στόχο κατάλογο, και η αποτυχία έρχεται αργότερα ως υπηρεσία που δεν μπορεί να διαβάσει το κλειδί της.
Συναρμολόγησε το σύνολο προφίλ σε κατάλογο προετοιμασίας
Χτίσε πρώτα το πλήρες σύνολο σε ιδιωτικό χώρο: προφίλ, CA, πιστοποιητικό πελάτη, κλειδί και κάθε βοηθητικό που καλεί το προφίλ. Αντίγραψε με install -m 400 -o root -g root ώστε τα δικαιώματα να ορίζονται κατά τη δημιουργία και όχι μετά. Έλεγξε μετά τις αναφορές μέσα στο προφίλ, γιατί μια σχετική γραμμή ca ή key επιλύεται ως προς τον κατάλογο εργασίας της μονάδας μόλις ξεκινήσει η υπηρεσία. Δεν πρέπει να γραφτεί τίποτα στον ενεργό κατάλογο μέχρι να επικυρωθεί ολόκληρο το σύνολο.
Κατέγραψε ένα μη μυστικό αποτύπωμα αυτού που παρήγαγε αυτή η εκτέλεση, για παράδειγμα το sha256sum office.conf αποθηκευμένο δίπλα σε δείκτη έκδοσης. Αυτή η μία τιμή επιτρέπει σε μια επανεκτέλεση να ξεχωρίσει μια ενημέρωση από μια εκτέλεση χωρίς ενέργεια.
Άλλαξε ατομικά και κράτησε το προηγούμενο σύνολο
Μετέφερε το προετοιμασμένο σύνολο στη θέση του με μία πράξη όπου το επιτρέπει το σύστημα αρχείων, και κράτησε το ελεγμένο προηγούμενο σύνολο κάτω από όνομα με χρονική σήμανση. Ένα μερικό αντίγραφο που αφήνει νέο προφίλ δίπλα σε παλιό κλειδί παράγει υπηρεσία που πιστοποιείται με λάθος ταυτότητα και δεν καταγράφει τίποτα χρήσιμο για τον λόγο. Αν η αλλαγή δεν μπορεί να είναι ατομική, διάταξε τις μεταφορές ώστε το προφίλ να προσγειωθεί τελευταίο.
Όταν ο στόχος υπάρχει ήδη, αποφάσισε ρητά αν αυτή η εκτέλεση είναι ενημέρωση, πανομοιότυπη επανεκτέλεση ή σύγκρουση με το προφίλ άλλης συσκευής. Η σιωπηλή αντικατάσταση ενός προφίλ που ανήκει σε άλλη ταυτότητα είναι ο τρόπος με τον οποίο δύο μηχανήματα καταλήγουν να μοιράζονται ένα πιστοποιητικό. Απόρριψε την εκτέλεση και ονόμασε τον συγκρουόμενο ιδιοκτήτη.
Ενεργοποίησε έναν ιδιοκτήτη και απόδειξέ το
Διάλεξε μία διαδρομή ενεργοποίησης, είτε το στιγμιότυπο systemd είτε το NetworkManager, και χρησιμοποίησέ την με συνέπεια. Η εκκίνηση μιας μη διαχειριζόμενης διεργασίας openvpn δίπλα σε ενεργοποιημένη μονάδα δίνει δύο τούνελ, ανταγωνιστικές ενημερώσεις DNS και καμία σαφή απάντηση για το ποιο στοχεύει μια εντολή διακοπής. Μετά την ενεργοποίηση, έλεγξε το systemctl is-active openvpn-client@office, μετά τη διαδρομή προς το απομακρυσμένο πρόθεμα, μετά το resolvectl status για τον επιλυτή που εγκατέστησε το τούνελ. Τελείωσε φτάνοντας σε έναν πόρο για τον οποίο υπάρχει το τούνελ.
Μια εκτελούμενη διεργασία και ένα πράσινο εικονίδιο στη γραμμή εργασιών είναι γεγονότα της διεργασίας, όχι απόδειξη ότι η ταυτότητα και η πολιτική κίνησης επέζησαν της παράδοσης.
Η επανεκτέλεση και η απόσυρση είναι ξεχωριστές ροές εργασίας
Μια δεύτερη εκτέλεση θα πρέπει να συγκλίνει στα ίδια ελεγμένα αρχεία και στον ίδιο ιδιοκτήτη, όχι να δημιουργήσει δεύτερο λογαριασμό ή δεύτερο δαίμονα. Η απόσυρση είναι δική της διαδικασία: σταμάτησε τον ακριβή ιδιοκτήτη, αρχειοθέτησε ή διέγραψε το τοπικό προφίλ κατά την πολιτική, και ανακάλεσε την ταυτότητα στην πύλη. Η διαγραφή ενός τοπικού αρχείου κλειδιού δεν ανακαλεί αντίγραφο που έχει ήδη φύγει από το μηχάνημα.
Κράτησε μια διαδρομή ανάκτησης που δεν εξαρτάται από το τούνελ, όπως πρόσβαση κονσόλας ή δεύτερη διαδρομή διαχείρισης. Μια αλλαγή παροχής που σε κλειδώνει έξω από το μηχάνημα είναι αποτυχημένη αλλαγή ακόμα και όταν κάθε στάδιο ανέφερε επιτυχία.
Το σενάριο που αξίζει να κρατήσεις είναι μια συναλλαγή γύρω από την ιδιοκτησία και τα αποδεικτικά. Ένας σύντομος κατάλογος προνομιακών εντολών αντιγραφής δεν είναι το ίδιο πράγμα.