Γράφετε ένα σκριπτ που εκτελεί scutil --nc start με το όνομα της σύνδεσης, δουλεύει στο Mac σας και αποτυγχάνει σε κάθε νέα εγκατεστημένη μηχανή του γραφείου. Το σκριπτ δεν είναι χαλασμένο. Του ζητείται κάτι που ποτέ δεν μπορούσε: η εκκίνηση μιας υπάρχουσας σύνδεσης δεν είναι η ίδια πράξη με τη δημιουργία μιας νέας.

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

Με τι μιλά στην πραγματικότητα η εντολή εκκίνησης

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

Γι' αυτό η αποτυχία εμφανίζεται σε νέο υλικό και όχι στον φορητό του διαχειριστή. Ο φορητός προετοιμάστηκε μήνες πριν από κάποιον που έκτοτε το ξέχασε. Σκεφτείτε την εντολή εκκίνησης σαν κουδούνι πόρτας που κάποιος καλωδίωσε το προηγούμενο τρίμηνο. Το πάτημά του δεν είναι το ίδιο με την τοποθέτηση της καλωδίωσης.

Τρεις ιδιοκτήτες μιας διαμόρφωσης VPN

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

Μια εγγενής προσωπική διαμόρφωση VPN δημιουργείται μέσω του Network Extension API της Apple, το οποίο καλύπτει τα ενσωματωμένα πρωτόκολλα IPsec και IKEv2. Είναι διεπαφή εφαρμογής με βήμα αποθήκευσης και έγκριση χρήστη, όχι εντολή κελύφους που δημιουργεί σιωπηλά οποιονδήποτε τύπο τούνελ παρέχει ένας προμηθευτής.

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

Η εγγενής προετοιμασία έχει αποθήκευση και έγκριση

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

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

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

Τι μπορεί να υποθέτει μια επαναλήψιμη εντολή εκκίνησης

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

Για εγγενείς συνδέσεις, ένα αίτημα συνεδρίας με όνομα όπως το scutil --nc start είναι πράξη ελέγχου. Δεν εγκαθιστά ρυθμίσεις διακομιστή, δεν εισάγει διαπιστευτήρια και δεν εκτελεί εξουσιοδότηση πρώτης αποθήκευσης. Αντιμετωπίστε το ως το τελευταίο βήμα μιας αλυσίδας, ποτέ ως ολόκληρη την αλυσίδα.

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

Δύο έλεγχοι αποδοχής

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

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

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