Τα μη έγκυρα μυστικά είναι πρόβλημα δοχείου, όχι κανόνας κωδικού
Ένα απορριφθέν διαπιστευτήριο μπορεί να μην έφτασε ποτέ στην πύλη. Συγκρίνετε πρώτα το δοχείο εισόδου, το στάδιο ταυτοποίησης και τον ίδιο τον λογαριασμό.
Η εμφάνιση «μη έγκυρων μυστικών» συνήθως οδηγεί σε ένα συμπέρασμα: το VPN δεν συμπαθεί τη στίξη. Αυτό το συμπέρασμα είναι συνήθως λάθος, γιατί το μήνυμα έρχεται συχνά από τοπική επεξεργασία πριν κοιτάξει οποιαδήποτε πύλη τον λογαριασμό. Δύο σχεδιάσεις παραδίδουν τον ίδιο κωδικό, ένα γραφικό πεδίο και ένα αρχείο διαπιστευτηρίων, και αποτυγχάνουν σε διαφορετικά σημεία. Συγκρίνετε τα δοχεία πριν απλοποιήσετε έναν κωδικό που ήταν εντάξει από την αρχή.
Το σφάλμα έρχεται πριν από την πύλη
Η τοπική επικύρωση, μια κλειδωμένη αποθήκη μυστικών, ένας πράκτορας που λείπει και ένα αρχείο διαπιστευτηρίων με λάθος μορφή παράγουν όλα αποτυχίες που ο χρήστης βιώνει ως μία απόρριψη. Καμία από αυτές δεν αφορά τον διακομιστή ταυτοποίησης. Η απόρριψη της ίδιας της πύλης είναι ξεχωριστό γεγονός και συνήθως φτάνει με διαφορετικό μήνυμα και σε διαφορετικό χρόνο. Συμβαίνει αφού υπάρχει τούνελ και αφού έχουν μεταδοθεί τα διαπιστευτήρια.
Άρα το πρώτο ερώτημα δεν είναι ποιοι χαρακτήρες επιτρέπονται αλλά πού σταμάτησε η προσπάθεια. Ένας πελάτης που δεν άνοιξε ποτέ σύνδεση δεν έχει απορριφθεί από κανέναν. Καταγράψτε το στάδιο που παρατηρήσατε, γιατί κάθε επόμενο βήμα εξαρτάται από αυτή την ταξινόμηση.
Η διάκριση αλλάζει και το ποιος το διορθώνει. Ένα πρόβλημα δοχείου ανήκει στη συσκευή και στον ιδιοκτήτη της, ενώ μια απόρριψη λογαριασμού ανήκει σε όποιον διαχειρίζεται το σύστημα ταυτοποίησης.
Συγκρίνετε τα δοχεία, όχι τους χαρακτήρες
Ένα γραφικό πεδίο κωδικού, μια καταχώριση στην αλυσίδα κλειδιών, ένα αρχείο διαπιστευτηρίων δύο γραμμών και ένα μυστικό αυτοματισμού μεταφέρουν καθένα την ίδια τιμή σε διαφορετικό φάκελο. Ο φάκελος έχει τους δικούς του κανόνες, και αυτοί οι κανόνες είναι που σπάνε συνήθως. Σπάνια φταίει η τιμή· η μεταφορά της τιμής φταίει. Κρατήστε τις δύο ιδέες χωριστά και η διάγνωση θα γίνει συντομότερη.
| Where the value stops | What you see | What you check | Who owns the fix |
|---|---|---|---|
| GUI field or managed profile | A validation message before any connection opens | The selected authentication mode and whether the field holds the secret or the username | The device owner or the profile author |
| Keychain or secret agent | A prompt that keeps reappearing, or an agent error | Whether the agent is unlocked and holds an entry for this profile | The user who owns the keychain |
| Two-line credential file | A prompt for a password that was already supplied | Line count, line order and whether a trailing newline is present | Whoever generated the file |
| Shell argument or environment | Works interactively but fails in automation | Whether the shell expanded, trimmed or logged the value | Whoever wrote the automation |
Επιλογές πελάτη OpenVPN 2.6 της κοινότητας περιγράφουν αυτό το αρχείο δύο γραμμών για το auth-user-pass, μαζί με τη συμπεριφορά όταν λείπει η γραμμή του κωδικού: τότε ο πελάτης ρωτά μόνος του. Αυτή η μία λεπτομέρεια εξηγεί μια ολόκληρη κατηγορία αναφορών του τύπου «ζητά κωδικό που τον έχω ήδη δώσει». Σας λέει επίσης ότι μια κενή δεύτερη γραμμή είναι σημαντική κατάσταση και όχι ακίνδυνη επιλογή μορφοποίησης.
Η παράθεση είναι πάλι ξεχωριστό επίπεδο: τα εισαγωγικά μέσα σε ένα συνηθισμένο αρχείο διαπιστευτηρίων αποθηκεύονται ως δεδομένα, ενώ το κέλυφος τα αφαιρεί πριν δει το πρόγραμμα οτιδήποτε. Ο ίδιος χαρακτήρας είναι ακίνδυνος σε ένα σημείο και δομικός σε άλλο. Ένας πίνακας δεν μπορεί να σας πει ποιο δοχείο χρησιμοποίησε ο πελάτης σας, οπότε διαβάστε την ίδια τη διαμόρφωση του πελάτη πριν διαλέξετε γραμμή.
Και οι αλλαγές γραμμής είναι δομικές. Ένα αρχείο με πεδία χωρισμένα με γραμμές δεν μπορεί να μεταφέρει τιμή που περιέχει νέα γραμμή, και αυτό είναι περιορισμός της μορφής, όχι κρίση για την ισχύ του κωδικού. Χρησιμοποιήστε τον υποστηριζόμενο από την ανάπτυξη μηχανισμό παράδοσης αντί να κόβετε το μυστικό για να χωρέσει σε ένα πρόχειρο αρχείο.
Δημιουργήστε το αρχείο διαπιστευτηρίων χωρίς ζημιά από το κέλυφος
Η ασφαλέστερη τοπική διαδρομή κρατά το μυστικό έξω από το ιστορικό του κελύφους και έξω από τη λίστα ορισμάτων της διεργασίας. Διαβάστε και τα δύο πεδία διαδραστικά, μετά γράψτε τις δύο γραμμές που περιμένει ο πελάτης. Όλα τα άλλα μπορούν να μείνουν σε ένα αρχείο διαμόρφωσης που ελέγχεται εύκολα.
read -r VPN_USER
read -rs VPN_PASS
printf '%s\n%s\n' "$VPN_USER" "$VPN_PASS" > /etc/openvpn/client/creds
chmod 600 /etc/openvpn/client/creds
openvpn --config /etc/openvpn/client/office.conf --auth-user-pass /etc/openvpn/client/creds
Οι δύο πρώτες εντολές διαβάζουν το όνομα χρήστη και μετά τον κωδικό χωρίς να τον εμφανίζουν, η τρίτη γράφει και τις δύο γραμμές, η τέταρτη περιορίζει το αρχείο και η τελευταία ξεκινά τον πελάτη με αυτό το αρχείο. Προσέξτε ότι το read -r διατηρεί τις ανάστροφες καθέτους, και αυτή είναι ακριβώς η λεπτομέρεια που μετατρέπει έναν κωδικό που δουλεύει σε κωδικό που αποτυγχάνει όταν παραλειφθεί.
Αποφύγετε να φτιάξετε το αρχείο με μεταβλητή χωρίς εισαγωγικά ή με here-document γεμάτο επεκτάσεις κελύφους. Και τα δύο μπορούν να αλλάξουν χαρακτήρες πριν φτάσουν στο αρχείο, και η αποτυχία που προκύπτει μοιάζει με απόρριψη VPN επειδή ο κωδικός στον δίσκο είναι πράγματι διαφορετικός από τον κωδικό που ξέρετε. Αν το υποψιάζεστε, συγκρίνετε το μήκος του αρχείου σε byte με την αναμενόμενη τιμή, χωρίς να εκτυπώσετε το ίδιο το μυστικό. Διαφορά ενός ή δύο byte είναι η υπογραφή ενός ατυχήματος εισαγωγικών.
Διαβάστε το στάδιο από το πρώτο σφάλμα
Κρατήστε το πρώτο συγκεκριμένο μήνυμα μιας προσπάθειας και μετά ταξινομήστε το. Σφάλμα τοπικής επικύρωσης, ιδιωτικό κλειδί που λείπει, πράκτορας μυστικών μη διαθέσιμος και αποτυχία ταυτοποίησης στην πύλη είναι τέσσερα διαφορετικά αποτελέσματα με τέσσερις διαφορετικούς ιδιοκτήτες. Μόνο ένα από αυτά αφορά τον λογαριασμό.
Αν η πύλη όντως απορρίπτει ένα σωστά παραδοθέν διαπιστευτήριο, ελέγξτε τον λογαριασμό, το σύστημα ταυτοποίησης και οποιαδήποτε απαιτούμενη πρόκληση με τον διαχειριστή. Μια γενική αποτυχία ταυτοποίησης δεν ονομάζει απαγορευμένο χαρακτήρα.
Επαναφέρετε την εγκεκριμένη τιμή μέσω του σωστού μηχανισμού αντί να τη μειώσετε σε γράμματα και ψηφία. Η πολιτική κωδικών ανήκει στον διαχειριστή και μια παράκαμψη που την υπονομεύει σιωπηλά δεν είναι διόρθωση. Κρύβει επίσης το πραγματικό ελάττωμα από τον επόμενο άνθρωπο, που θα συναντήσει το ίδιο σφάλμα με ασθενέστερο κωδικό και χωρίς καλύτερη ιδέα.