Προσάρτηση κοινόχρηστου φακέλου από το Tunnelblick χωρίς εκτέλεση ως root
Ένα AppleScript που παραμένει ανοιχτό μπορεί να παρακολουθεί ένα προφίλ Tunnelblick και να προσαρτά κοινόχρηστο SMB ως ο συνδεδεμένος χρήστης, χωρίς άγκιστρο root ή sudo χωρίς κωδικό.
Ο πελάτης VPN χρειάζεται προνομιακή βοήθεια για την αναδιαμόρφωση του δικτύου, και το γεγονός αυτό εφαρμόζεται πολύ ευρύτερα σε ό,τι το περιβάλλει. Ένα σενάριο που προσαρτά κοινόχρηστο αρχείων δεν χρειάζεται root, επειδή ο κοινόχρηστος ανήκει στη συνεδρία του συνδεδεμένου χρήστη και στα διαπιστευτήριά του. Η μετακίνηση της προσάρτησης εκτός της προνομιακής διαδρομής αφαιρεί την ανάγκη για κανόνες sudo, άγκιστρα root και τροποποιήσεις στις ενσωματωμένες εφαρμογές. Αυτό που μένει είναι ένα μικρό applet που παραμένει ανοιχτό, παρακολουθεί ένα προφίλ και κάνει μία προσπάθεια.
Γιατί αυτό ανήκει στη συνεδρία χρήστη
Ένας προσαρτημένος τόμος είναι ιδιότητα της συνεδρίας που τον προσάρτησε. Η συνεδρία άλλου χρήστη δεν τον βλέπει, και μια προσάρτηση που ανήκει στο root συμπεριφέρεται διαφορετικά από εκείνη που δημιούργησε το Finder. Η διατήρηση της προσάρτησης στη συνεδρία χρήστη διατηρεί αυτή τη σημασιολογία.
Οι προνομιακοί βοηθοί υπάρχουν για τα μέρη που τους χρειάζονται πραγματικά: δημιουργία διεπαφής τούνελ, αλλαγή διαδρομών, ενημέρωση του resolver. Η προσάρτηση κοινόχρηστου SMB δεν είναι ένα από αυτά τα μέρη. Η αντιμετώπισή του σαν να ήταν επιβάλλει επιλογή ανάμεσα σε sudo χωρίς κωδικό και ένα σενάριο root που εκτελείται όταν δεν είναι κανείς παρών. Και τα δύο είναι μεγαλύτερος κίνδυνος από ό,τι δικαιολογεί το πρόβλημα, και η προσέγγιση μέσω της συνεδρίας χρήστη αποφεύγει εντελώς αυτή την επιλογή.
Τα δικά του άγκιστρα σύνδεσης του Tunnelblick δεν αποτελούν υποκατάστατο εδώ, αφού εκτελούνται έξω από τη συνεδρία επιφάνειας εργασίας και η σειρά τους ως προς τα σενάρια του πελάτη δεν ορίζεται. Η ερώτηση της κατάστασης από ένα applet χρήστη είναι μικρότερος μηχανισμός με λιγότερες παραδοχές.
Αποδείξτε πρώτα με το χέρι ότι ο κοινόχρηστος λειτουργεί
Η αυτοματοποίηση δεν μπορεί να παρέχει διαδρομή, άδεια ή λογαριασμό που δεν υπάρχει. Συνδέστε το VPN χειροκίνητα και ανοίξτε τον κοινόχρηστο στο Finder πριν γράψετε οποιοδήποτε σενάριο. Αν αυτό αποτύχει, το σενάριο θα αποτύχει με πιο μπερδεμένο τρόπο.
Σημειώστε τις τρεις τιμές που θα χρησιμοποιήσει το σενάριο: το όνομα του προφίλ ακριβώς όπως το απαριθμεί το Tunnelblick, το URL του κοινόχρηστου και το όνομα του τόμου που δείχνει το Finder μετά την προσάρτηση. Το όνομα του τόμου έχει σημασία επειδή ο έλεγχος υπάρχουσας προσάρτησης το χρησιμοποιεί, και ένας έλεγχος μόνο με βάση το όνομα είναι προστασία ευκολίας, όχι απόδειξη της ταυτότητας του διακομιστή. Χρησιμοποιήστε όνομα μοναδικό στο μηχάνημα. Στη συνέχεια επιβεβαιώστε ότι ο διακομιστής απαντά έστω και λίγο.
smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs
Η πρώτη εντολή αποδεικνύει ότι ο διακομιστής απαντά, η δεύτερη ότι το όνομα του προφίλ επιλύεται, και η τρίτη δείχνει πώς μοιάζει μια επιτυχημένη προσάρτηση. Καταγράψτε και τις τρεις πριν αυτοματοποιήσετε οτιδήποτε.
Διαβάστε την κατάσταση του προφίλ από το Tunnelblick
Το Tunnelblick εκθέτει τις διαμορφώσεις του και τις καταστάσεις τους μέσω AppleScript, και αυτό είναι το μόνο άγκιστρο που χρειάζεται αυτός ο σχεδιασμός. Η κατάσταση που μετράει είναι η συμβολοσειρά που αναφέρεται για αυτό το ένα προφίλ, όχι η παρουσία της εφαρμογής.
Η ερώτηση έχει συνέπειες που αξίζει να αναφερθούν. Μια επανασύνδεση μικρότερη από το διάστημα μπορεί να περάσει απαρατήρητη, και το applet δεν βλέπει καθόλου τη μετάβαση. Αυτό είναι αποδεκτό για μια προστασία προσάρτησης και μη αποδεκτό για οτιδήποτε πρέπει να αντιδρά σε κάθε γεγονός. Αν χρειάζεστε πιστότητα γεγονότων, αυτός είναι ο λάθος μηχανισμός και όχι ένας μηχανισμός που χρειάζεται συντομότερο χρονόμετρο. Διαλέξτε το διάστημα με αυτόν τον συμβιβασμό κατά νου.
property attempted : false
on idle
set profileName to "Office"
set shareURL to "smb://files.corp.example/OfficeTeam"
set volName to "OfficeTeam"
tell application "Tunnelblick" to set vpnState to state of first configuration whose name is profileName
if vpnState is not "CONNECTED" then
set attempted to false
return 20
end if
tell application "Finder" to set mounted to (exists disk volName)
if (not mounted) and (not attempted) then
set attempted to true
try
mount volume shareURL
end try
end if
return 20
end idle
Εξαγάγετε το ως εφαρμογή με την επιλογή να παραμένει ανοιχτή και μετά εκκινήστε το στη συνδεδεμένη συνεδρία αντί μέσω sudo.
Προσαρτήστε μία φορά και μετά σταματήστε να προσπαθείτε
Η σημαία της προσπάθειας είναι αυτό που εμποδίζει να γίνει αυτό βρόχος που μαντεύει διαπιστευτήρια. Μόλις το applet προσπαθήσει, περιμένει να αλλάξει η κατάσταση σύνδεσης πριν ξαναπροσπαθήσει.
Αυτή η συμπεριφορά είναι σκόπιμη. Ένας κοινόχρηστος που αρνείται την προσάρτηση συνήθως την αρνείται για λόγο που μια νέα προσπάθεια δεν μπορεί να διορθώσει, και οι επαναλαμβανόμενες προσπάθειες μετατρέπουν ένα αίτημα σε ροή αιτημάτων. Η σημαία επαναφέρεται όταν το προφίλ εγκαταλείπει τη συνδεδεμένη κατάσταση, οπότε μια πραγματική επανασύνδεση παράγει ακριβώς μία νέα προσπάθεια. Η έξοδος και η επανεκκίνηση του applet την επαναφέρουν επίσης, και αυτή είναι η χειροκίνητη παράκαμψη. Κανένα από τα δύο μονοπάτια δεν κρύβει μια αποτυχία· και τα δύο την αφήνουν ορατή στο Finder.
Το σενάριο δεν φέρει κωδικό πρόσβασης, και έτσι πρέπει να μείνει. Αφήστε την πράξη προσάρτησης να ρωτήσει, και αφήστε το κλειδοκράτορα να κάνει ό,τι υποστηρίζει ο οργανισμός. Η ενσωμάτωση διαπιστευτηρίου σε URL μετατρέπει ένα σενάριο ευκολίας σε μυστικό που πρέπει να περιστραφεί.
Τι δεν μπορεί να κάνει ο βοηθός
Τρία όρια αξίζει να γραφτούν δίπλα στο applet. Δεν μπορεί να αποσπάσει έναν απασχολημένο τόμο μετά από αποτυχία δικτύου, δεν μπορεί να εγγυηθεί ότι το DNS και ο διακομιστής είναι έτοιμα όταν η κατάσταση λέει συνδεδεμένο, και δεν αντιδρά σε κάθε επανασύνδεση.
Το πρώτο όριο μετράει περισσότερο στην πράξη. Ένας κοινόχρηστος του οποίου ο διακομιστής εξαφανίζεται αφήνει έναν τόμο που φαίνεται προσαρτημένος και μπλοκάρει στην πρόσβαση, και η ευγενική διόρθωση είναι να ολοκληρωθούν οι εργασίες αρχείων και να αποσπαστεί πριν από μια προγραμματισμένη αποσύνδεση. Το δεύτερο εξηγεί τις περισσότερες αποτυχημένες πρώτες προσπάθειες: το τούνελ είναι πάνω ενώ ο resolver δεν έχει προλάβει, οπότε περιμένετε και μετά προσαρτήστε μία φορά με το χέρι για επιβεβαίωση. Το τρίτο είναι ο συμβιβασμός της ερώτησης που αναφέρθηκε πριν, όχι σφάλμα προς διόρθωση.
Για μηχάνημα χωρίς επίβλεψη ή διαχειριζόμενο στόλο, αυτός ο σχεδιασμός έχει λάθος μορφή. Χρησιμοποιήστε πολιτική προσάρτησης που ανήκει στον διαχειριστή αντί να επεκτείνετε ένα applet επιφάνειας εργασίας σε προνομιακή υπηρεσία.