Η προειδοποίηση για πολλαπλά σενάρια ακούγεται σαν παράπονο για τον προγραμματισμό, οπότε η προφανής διόρθωση είναι να αναδιατάσσετε τις γραμμές μέχρι να εξαφανιστεί. Δεν είναι παράπονο για τον προγραμματισμό. Ένας μεταγενέστερος ορισμός --up αντικαθιστά την εντολή που είναι ήδη αποθηκευμένη για αυτό το στάδιο, και ο αναλυτής το λέει, που σημαίνει ότι από τα δύο σενάριά σας έχει εκτελεστεί ποτέ ακριβώς ένα. Το άλλο δεν περιμένει στην ουρά πίσω του· έχει χαθεί.

Γι’ αυτό η προειδοποίηση αξίζει προσοχή παρόλο που δεν είναι μοιραία: αυτό που προβλέπει είναι μια ενημέρωση DNS ή μια αλλαγή διαδρομής που σταμάτησε ήσυχα να συμβαίνει.

Η προειδοποίηση δεν αφορά τη σειρά

Το OpenVPN αποθηκεύει μία μόνο εντολή σεναρίου χρήστη για το στάδιο up. Όταν ο αναλυτής συναντήσει άλλον ορισμό, από το προφίλ, ένα συμπεριλαμβανόμενο αρχείο ή τη γραμμή εντολών, αντικαθιστά ό,τι ήδη κρατούσε και εκδίδει την προειδοποίηση. Τίποτα δεν συνενώνεται, τίποτα δεν εκτελείται δύο φορές και δεν υπάρχει ζήτημα σειράς. Επιβιώνει η εντολή που είδε τελευταία ο αναλυτής, γι’ αυτό η μετακίνηση μιας γραμμής μπορεί να αλλάξει τον νικητή αφήνοντας το άλλο σενάριο νεκρό.

Το ίδιο μοτίβο ισχύει για τα άλλα στάδια σεναρίων: μία εντολή το καθένα. Αν δύο εργασίες πρέπει να συμβούν και οι δύο, χρειάζονται ένα σημείο εισόδου, όχι δύο οδηγίες που μοιάζουν με λίστα.

Βρείτε και τους δύο ορισμούς στην πραγματική εκκίνηση

Ξεκινήστε από αυτό που έλαβε πραγματικά ο δαίμονας, όχι από το προφίλ που επεξεργαστήκατε. Το ps -ef και το ExecStart της μονάδας δείχνουν τη γραμμή εντολών, η οποία μπορεί να προσθέσει --up από σημείο εισόδου container ή από περιτύλιγμα· ένα αρχείο init της διανομής μπορεί να κάνει το ίδιο. Το systemctl cat openvpn-server@server αποκαλύπτει τι συνεισφέρει η ίδια η υπηρεσία, και ένα αναδρομικό grep στον κατάλογο ρυθμίσεων βρίσκει τους ορισμούς σε επίπεδο αρχείου. Τα διπλότυπα προέρχονται συνήθως από διαφορετικά επίπεδα, και γι’ αυτό ακριβώς η επεξεργασία ενός αρχείου δεν αλλάζει τίποτα.

Η αντιγραφή ενός σεναρίου σε άλλον κατάλογο ή η μετονομασία του επίσης δεν αφαιρεί μια οδηγία. Ο αναλυτής μετρά ορισμούς, όχι αρχεία.

Αφήστε ένα hook να αναλάβει τη δουλειά

Η διαρκής λύση είναι ένας μόνο αποστολέας που εκτελεί και τις δύο ενέργειες με σκόπιμη σειρά. Ένα σύντομο σενάριο shell με set -eu που καλεί την απαιτούμενη ενσωμάτωση και μετά την τοπική ενέργεια, προωθώντας το "$@" ώστε να επιβιώσουν τα όρια των ορισμάτων, κρατά τη συμπεριφορά σε ένα ελέγξιμο σημείο. Η προώθηση ορισμάτων απλώς τα διατηρεί· δεν αποδεικνύει ότι οι δύο βοηθοί περιμένουν την ίδια διεπαφή, οπότε διαβάστε το συμβόλαιο καθενός. Αποφασίστε τι πρέπει να κάνει μια αποτυχία και αν οι μερικές αλλαγές χρειάζονται αναστροφή.

Αν ο εκκινητής προσφέρει υποστηριζόμενο hook επέκτασης, προτιμήστε το από τη χειροποίητη αλυσίδα. Ένα image container ή ένα πακέτο προμηθευτή έχει συχνά τεκμηριωμένη θέση για πρόσθετη εργασία, και η χρήση του εμποδίζει μια αναβάθμιση να αντικαταστήσει τον αποστολέα σας.

Ο καθαρισμός ανήκει στο αντίστοιχο στάδιο down. Μια ενέργεια up που ξαναγράφει το DNS ή προσθέτει διαδρομές χρειάζεται τεκμηριωμένη αναστροφή, και ένας αποστολέας που χειρίζεται μόνο την εκκίνηση είναι μισός σχεδιασμός.

Επιβεβαιώστε την ενσωμάτωση, όχι μόνο τη σιωπή

Η αφαίρεση της διπλότυπης προειδοποίησης είναι το εύκολο μέρος· η ενσωμάτωση πρέπει να δουλέψει. Ελέγξτε την κατάσταση του resolver μετά τη σύνδεση με το resolvectl status ή διαβάζοντας το /etc/resolv.conf, και επιβεβαιώστε τις διαδρομές με το ip route. Έπειτα αποσυνδεθείτε και επανασυνδεθείτε, γιατί ένα hook που συνδέθηκε βιαστικά τείνει να αφήνει κάτι από την προηγούμενη συνεδρία. Το journalctl -u openvpn-server@server -b δείχνει αν έτρεξε ο αποστολέας σας και τι τύπωσε.

Κρατήστε τα προνόμια του hook εκεί που ανήκουν. Η αύξηση του script-security ή η εκτέλεση του δαίμονα με περισσότερα δικαιώματα δεν είναι διόρθωση για αντικατεστημένο hook· διευρύνει το τι μπορεί να κάνει κάθε μελλοντικό σενάριο, ακόμη και ένα που θα ονομάσει ένας επιτιθέμενος.

Το σημάδι ότι η διόρθωση είναι πραγματική δεν είναι η σιωπή στο αρχείο καταγραφής. Είναι η απάντηση DNS, η καταχώριση διαδρομής και ο καθαρισμός που λειτουργούν όλα μετά από δύο επανασυνδέσεις.

Σχετικά άρθρα