Η υπηρεσία αποτυγχάνει, τα αρχεία καταγραφής αναφέρουν ένα spawn και έναν κατάλογο, και η πρώτη παρόρμηση είναι να ελεγχθεί η διαμόρφωση του VPN. Τίποτα σε αυτό το αρχείο δεν έχει διαβαστεί ακόμη. Το systemd απέτυχε κατά την προετοιμασία της διεργασίας, πριν εκτελεστεί το εκτελέσιμο, επομένως δεν συμβουλεύτηκε κανένας αναλυτής, κανένα πιστοποιητικό και κανένας απομακρυσμένος διακομιστής. Το να διαβάσει κανείς τον κωδικό κατάστασης ως δήλωση για το systemd και όχι για το OpenVPN είναι αυτό που κάνει την υπόθεση σύντομη έρευνα.

Διαβάστε τον κωδικό κατάστασης πριν την εφαρμογή

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

Αυτή η διάκριση έχει σημασία επειδή οι διορθώσεις βρίσκονται σε διαφορετικά αρχεία. Μια αποτυχία CHDIR αφορά μια διαδρομή και το πώς τη βλέπει η υπηρεσία. Μια αποτυχία exec αφορά το δυαδικό αρχείο, τον διερμηνέα του ή ένα άσχετο mount. Η αλλαγή του απομακρυσμένου σημείου του VPN, της λίστας κρυπτογράφησης ή της διαδρομής του πιστοποιητικού δεν μπορεί να διορθώσει καμία από τις δύο.

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

Ρωτήστε το unit πού θέλει να βρίσκεται

Διαβάστε το ενεργό unit και όχι το αρχείο που νομίζετε ότι είναι εγκατεστημένο, επειδή τα drop-in μπορούν να παρακάμψουν τον κατάλογο εργασίας χωρίς να επεξεργαστείτε ποτέ το κύριο unit. Η έξοδος του show απαντά άμεσα στην ερώτηση:

systemctl cat [email protected]
systemctl show [email protected] -p WorkingDirectory -p RootDirectory -p User -p ProtectHome
journalctl -u [email protected] -b --no-pager | tail -30

Για το πρότυπο του upstream διακομιστή, ο κατάλογος εργασίας είναι ο κατάλογος διαμόρφωσης του διακομιστή και το όνομα του στιγμιοτύπου επιλέγει το προφίλ μέσα του. Ένα στιγμιότυπο με όνομα branch περιμένει επομένως το δικό του αρχείο στον ίδιο κατάλογο, και ένα προφίλ τοποθετημένο αλλού δεν ικανοποιεί καθόλου την απαίτηση του καταλόγου εργασίας.

Συγκρίνετε τι ζητά το unit με τι υπάρχει. Μια διαδρομή που κάποτε υπήρχε, ένας συμβολικός σύνδεσμος που τώρα δείχνει αλλού ή ένα όνομα στιγμιοτύπου που δεν αντιστοιχεί πλέον σε κατάλογο είναι όλα συνήθεις αλλαγές που παράγουν ακριβώς αυτή την αποτυχία.

Ελέγξτε τη διαδρομή όπως τη βλέπει η υπηρεσία

Το κέλυφός σας και η υπηρεσία δεν μοιράζονται την ίδια όψη του συστήματος αρχείων. Ένας ρυθμισμένος ριζικός κατάλογος ή root image αλλάζει το νόημα μιας απόλυτης διαδρομής μέσα στο unit, και μια διαδρομή που υπάρχει προφανώς στον διακομιστή μπορεί να λείπει σε εκείνο τον χώρο ονομάτων. Διαβάστε τις ρυθμίσεις του unit πριν εμπιστευτείτε μια χειροκίνητη δοκιμή.

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

namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths

Οι ρυθμίσεις σκλήρυνσης είναι επίσης μέρος αυτής της εικόνας. Ένα unit που κρύβει τους καταλόγους home ή κάνει μέρος του συστήματος αρχείων μόνο για ανάγνωση κάνει ακριβώς αυτό για το οποίο έχει ρυθμιστεί, και ο κατάλογος εργασίας πρέπει να βρίσκεται εκεί όπου το sandbox τον εκθέτει ακόμη.

Διορθώστε τον ιδιοκτήτη και μετά περιμένετε άλλο σφάλμα

Διορθώστε τη διάταξη ή το unit μέσω εκείνου που κατέχει αυτή τη διαμόρφωση. Η μετακίνηση ενός προφίλ στον αναμενόμενο κατάλογο είναι νόμιμη διόρθωση όταν η διάταξη είναι λάθος, αλλά δεν εξηγεί έναν κατάλογο στον οποίο δεν μπορεί κανείς να μπει, γι' αυτό μην το θεωρείτε τη γενική απάντηση.

Αντισταθείτε στη συντόμευση της διεύρυνσης δικαιωμάτων στο δέντρο διαμόρφωσης ή της αφαίρεσης του sandbox. Και τα δύο εξαφανίζουν το σύμπτωμα αφαιρώντας παράλληλα τις προστασίες που είχαν τοποθετηθεί εκεί σκόπιμα, και η επόμενη αποτυχία θα είναι δυσκολότερο να ερμηνευτεί.

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

Η αναφορά εκτέλεσης του systemd ορίζει πώς ερμηνεύεται ο κατάλογος εργασίας μαζί με τους ριζικούς καταλόγους και το sandbox. Το μοτίβο που αξίζει να θυμάστε είναι απλό: κάθε κωδικός κατάστασης ονομάζει διαφορετικό στάδιο, και μόνο τα σφάλματα της ίδιας της εφαρμογής περιγράφουν την εφαρμογή.

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