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

Ο μύθος: το πρόσθετο είναι η υποστηριζόμενη διαδρομή

Ένα πρόσθετο είναι ένα κοινόχρηστο αντικείμενο που φορτώνεται στη διεργασία του OpenVPN, επομένως πρέπει να ταιριάζει με τη διεπαφή που εκθέτει αυτή η διεργασία. Οι εκδόσεις αλλάζουν, η συσκευασία αλλάζει, και μια βιβλιοθήκη μεταγλωττισμένη για παλαιότερη διεπαφή απλώς αρνείται να φορτωθεί. Τίποτα στη διαμόρφωση του διακομιστή δεν μπορεί να γεφυρώσει αυτό το χάσμα, γι' αυτό η συμβουλή «απλώς εγκαταστήστε το radiusplugin» καταλήγει σε διακομιστή που δεν ξεκινά.

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

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

Τι έδενε το πρόσθετο

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

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

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

Σε τι βασίζεται πραγματικά το άγκιστρο σεναρίου

Το άγκιστρο διαμορφώνεται με auth-user-pass-verify και έναν μηχανισμό παράδοσης: μεταβλητές περιβάλλοντος ή προσωρινό αρχείο. Στη μορφή περιβάλλοντος, το OpenVPN απαιτεί script-security 3, το τεκμηριωμένο επίπεδο που επιτρέπει την έκθεση κωδικού πρόσβασης σε σενάρια. Αυτό το επίπεδο είναι σκόπιμη αποδυνάμωση της προεπιλογής και θα πρέπει να αντιμετωπίζεται ως άδεια με αιτιολόγηση συνημμένη.

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

ls -l /usr/local/sbin/radius-auth.sh
stat -c '%U %a' /usr/local/sbin/radius-auth.sh

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

Οι κωδικοί εξόδου καθορίζουν αν αποτυγχάνετε ανοιχτά

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

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

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

Τι χάνετε όταν φεύγει το πιστοποιητικό

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

Κρατήστε την προστασία του καναλιού ελέγχου ώστε ένας μη ταυτοποιημένος ομότιμος να μην μπορεί να ανιχνεύσει ή να πλημμυρίσει τη χειραψία, και χρησιμοποιήστε το username-as-common-name όταν η διαμόρφωση ανά χρήστη εξαρτάται από το κοινό όνομα. Οι διαχειριζόμενες πύλες το λύνουν συχνά διαφορετικά, τερματίζοντας την ταυτοποίηση πιστοποιητικού σε πύλη που μιλά EAP-TLS με το RADIUS, και σε αυτή την περίπτωση καμία από αυτές τις οδηγίες διακομιστή δεν ισχύει. Αντιγράψτε το μοντέλο που τεκμηριώνει η δική σας πλατφόρμα, όχι αυτό γειτονικού προϊόντος. Οι οδηγίες που μετράνε διαφέρουν αρκετά ώστε η ανάμειξή τους να παράγει διαμόρφωση που αναλύεται και μετά δεν ταυτοποιεί κανέναν.

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