could not read Auth username from stdin μοιάζει με πρόβλημα ταυτοποίησης και δεν είναι. Το OpenVPN προσπάθησε να ζητήσει το όνομα χρήστη από την τυπική είσοδο, δεν βρήκε τίποτα αναγνώσιμο και σταμάτησε πριν καν επικοινωνήσει με τον διακομιστή. Ο λογαριασμός μπορεί να είναι απολύτως έγκυρος· απλώς η διεργασία δεν έχει κανέναν να ρωτήσει.

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

Διαβάστε το σφάλμα ως τοπική αποτυχία εισόδου

Όταν auth-user-pass εμφανίζεται χωρίς όρισμα αρχείου, ο πελάτης περιμένει να ζητήσει. Σε ένα διαδραστικό κέλυφος αυτό το αίτημα λειτουργεί επειδή η διεργασία κατέχει τερματικό. Κάτω από το systemd, μια εργασία cron ή ένα container, η τυπική είσοδος είναι συνήθως κενή και η ανάγνωση επιστρέφει αμέσως με το σφάλμα που βλέπετε.

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

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

Δώστε στην υπηρεσία μια υποστηριζόμενη πηγή διαπιστευτηρίων

Η υποστηριζόμενη πηγή για λειτουργία χωρίς επίβλεψη είναι ένα αρχείο διαπιστευτηρίων που περνά ως όρισμα στο auth-user-pass. Το αρχείο διαβάζεται ως απλό κείμενο: η πρώτη γραμμή είναι το όνομα χρήστη, η δεύτερη ο κωδικός πρόσβασης. Δείξτε το με απόλυτη διαδρομή, όπως /etc/openvpn/client/creds , ώστε ο κατάλογος εργασίας του λογαριασμού υπηρεσίας να μην μπορεί να αλλάξει το νόημα της οδηγίας.

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

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

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

Γιατί το script-security δεν θα βοηθήσει

script-security ελέγχει αν ο πελάτης μπορεί να εκτελεί σενάρια και πόσα μπορεί να τους περάσει, συμπεριλαμβανομένου του αν ένας κωδικός πρόσβασης μπορεί να δοθεί σε σενάριο μέσω μεταβλητής περιβάλλοντος. Δεν λέει τίποτα για το από πού προέρχονται αρχικά το όνομα χρήστη και ο κωδικός.

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

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

Επαληθεύστε το επόμενο στάδιο αφού ο πελάτης διαβάσει το αρχείο

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

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

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

Λίστα ελέγχου: απόλυτη διαδρομή διαπιστευτηρίων, αναγνώσιμη ως λογαριασμός υπηρεσίας, χωρίς ανάγκη τερματικού, script-security στο ελάχιστο, διεπαφή διαχείρισης μόνο αν είναι δεσμευμένη και ταυτοποιημένη, και η προκύπτουσα απάντηση του διακομιστή αντιμετωπίζεται ως ξεχωριστό γεγονός.

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