Να εγκαταλείψετε το chroot ή να αντιγράψετε το iproute2 στη φυλακή;
Μια ημιτελής φυλακή αποτυγχάνει μετά την εκκίνηση, όχι στο boot. Διαλέξτε ανάμεσα στη χαλάρωση της σκλήρυνσης και στην αντιγραφή δυαδικών αρχείων και βιβλιοθηκών στον νέο ριζικό κατάλογο.
Η υπηρεσία ξεκινά, ένας πελάτης συνδέεται και καμία διαδρομή δεν εμφανίζεται ποτέ στην πλευρά του διακομιστή. Ή ο δαίμονας αρνείται να ξεκινήσει και ονομάζει μια εντολή που δεν μπόρεσε να εκτελέσει. Και τα δύο αποτελέσματα ακολουθούν τις ίδιες τρεις γραμμές, που συνήθως αντιγράφονται μαζί από έναν οδηγό σκλήρυνσης: μετάβαση σε λογαριασμό χωρίς προνόμια, εγκατάλειψη της ομάδας και αλλαγή της ρίζας του συστήματος αρχείων. Μόνο μία από τις τρεις κρύβει αρχεία, και μόνο μία από αυτές αφαιρεί το προνόμιο αλλαγής του πίνακα δρομολόγησης. Ο διαχωρισμός τους είναι ο τρόπος να μάθετε ποια γραμμή θέλετε πραγματικά.
Τι αφαιρεί η φυλακή και ο δαίμονας το χρειάζεται ακόμη
Η αλλαγή της ρίζας συμβαίνει μετά την εκκίνηση, οπότε ο δαίμονας κρατά ό,τι έχει ήδη ανοίξει και χάνει ό,τι θα άνοιγε αργότερα. Κάθε βοηθός που εκτελεί η σύνδεση μετά από αυτό το σημείο πρέπει να υπάρχει μέσα στη νέα ρίζα, μαζί με τις κοινόχρηστες βιβλιοθήκες που φορτώνει. Μια φυλακή φτιαγμένη από αρχείο ρυθμίσεων και πιστοποιητικό δεν έχει κανένα από τα δύο.
Η μετάβαση σε λογαριασμό χωρίς προνόμια είναι ξεχωριστός περιορισμός. Μια διεργασία που έχει παραιτηθεί από το root μπορεί να μην μπορεί να αλλάξει διαδρομές ή να σηκώσει μια διεπαφή ακόμη και όταν το δυαδικό αρχείο είναι ακριβώς εκεί, οπότε οι δύο αστοχίες πρέπει να διαγνωστούν χωριστά.
Τρεις συνθήκες καθορίζουν ποια διόρθωση χρειάζεστε
Η πρώτη συνθήκη είναι πώς η κατασκευή σας εγκαθιστά διαδρομές. Νεότερες OpenVPN εκδόσεις ρυθμίζουν τη διεπαφή και τον πίνακα δρομολόγησης εντός της διεργασίας, ενώ παλαιότερα πακέτα και προσαρμοσμένες ρυθμίσεις βασίζονται σε εξωτερικά εργαλεία ή σε σενάρια up και down. Αν το αρχείο καταγραφής ονομάζει εντολή, εμπλέκεται εξωτερικό εργαλείο και η φυλακή το κρύβει. Αν το αρχείο καταγραφής δείχνει αντίθετα σφάλμα δικαιωμάτων, το πρόβλημα είναι ο λογαριασμός.
Η δεύτερη είναι η συντήρηση. Μια φυλακή με αντιγραμμένα δυαδικά αρχεία πρέπει να ανανεώνεται κάθε φορά που αναβαθμίζεται το πακέτο που τα παρέχει, αλλιώς η πρώτη αναβάθμιση αφήνει πίσω της ένα σπασμένο τούνελ. Η τρίτη είναι αν ένας συγκεκριμένος έλεγχος απαιτεί πραγματικά chroot· αν η απαίτηση αφορά στην πραγματικότητα τον διαχωρισμό προνομίων, η αλλαγή λογαριασμού μπορεί να αρκεί μόνη της.
| Signal in the log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create the node inside, or open it before the root change |
Τι πρέπει να περιέχει μια λειτουργική φυλακή
Μια φυλακή που εκτελεί εντολές χρειάζεται το δυαδικό αρχείο, κάθε βιβλιοθήκη με την οποία συνδέεται και κάθε κόμβο συσκευής που ο δαίμονας ανοίγει αργά. Αντιγράψτε τα κομμάτια και δοκιμάστε τα χωρίς το VPN στην εικόνα:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Η πρώτη εντολή απαριθμεί τις εξαρτήσεις και είναι αυτή που οι άνθρωποι παραλείπουν. Ένα αντιγραμμένο δυαδικό αρχείο που δεν βρίσκει βιβλιοθήκη αποτυγχάνει με διαφορετικό μήνυμα από ένα δυαδικό αρχείο που λείπει, και τα δύο φαίνονται σαν βλάβη του OpenVPN όταν διαβάζονται από την πλευρά του πελάτη. Η εκτέλεση της εντολής με το χέρι μέσα στη φυλακή αναπαράγει τη βλάβη χωρίς επανεκκίνηση της υπηρεσίας.
Αντιγράψτε επίσης τις ρυθμίσεις, τα πιστοποιητικά και τυχόν CRL μέσα στη φυλακή, γιατί ένα αρχείο που ο δαίμονας περιμένει να ξαναδιαβάσει μετά την εκκίνηση δεν θα βρεθεί μόλις αλλάξει η ρίζα. Καταγράψτε τι αντιγράψατε, αφού η επόμενη αναβάθμιση του πακέτου δικτύου αντικαθιστά τα πρωτότυπα και αφήνει τη φυλακή στο παλιό αντίγραφο.
Μειώστε αντί για αυτό τη σκλήρυνση
Αν η φυλακή υπάρχει μόνο επειδή το έλεγε ένας οδηγός, η αφαίρεση αυτής της μίας γραμμής κρατώντας τους περιορισμούς λογαριασμού είναι υπερασπίσιμο αποτέλεσμα. Ο δαίμονας κρατά την όψη του συστήματος αρχείων και χάνει το πρόβλημα, και η πτώση προνομίων αφαιρεί ακόμη το root από τη μακρόβια διεργασία.
Γράψτε τι μένει και γιατί. Μια ρύθμιση που έχασε ήσυχα έναν έλεγχο χωρίς σημείωση είναι ο τρόπος με τον οποίο ολισθαίνει η σκλήρυνση, και ο επόμενος έλεγχος θα ρωτήσει γιατί εξαφανίστηκε η γραμμή.
Χωρίστε τις τρεις γραμμές πριν διαλέξετε
Αντιγράψτε τις ρυθμίσεις, απενεργοποιήστε και τις τρεις οδηγίες και επιβεβαιώστε ότι ένας πελάτης συνδέεται και ότι εμφανίζονται οι αναμενόμενες διαδρομές. Έπειτα ενεργοποιήστε ξανά μόνο τις γραμμές λογαριασμού, και μετά μόνο το chroot. Το βήμα όπου σπάει το τούνελ δείχνει το όριο, και αποφεύγετε να ξαναχτίσετε μια φυλακή που δεν ήταν ποτέ η αιτία.
Όταν δρομολογεί ξανά, τρέξτε μία συνεδρία πελάτη με μεγαλύτερη λεπτομέρεια και διαβάστε τη γραμμή που ονομάζει την εντολή ή το δικαίωμα που απέτυχε. Αυτή η γραμμή αξίζει περισσότερο από το χρονικό όριο που αναφέρει τελικά ο πελάτης.