Klient VPN potrebuje privilegovanú pomoc s rekonfiguráciou siete a tento fakt sa aplikuje príliš široko na všetko okolo. Skript, ktorý pripája súborové zdieľanie, root nepotrebuje, pretože zdieľanie patrí do relácie prihláseného používateľa a k jeho prihlasovacím údajom. Presunutie pripájania mimo privilegovanej cesty odstraňuje potrebu pravidiel sudo, root háčikov a úprav priložených aplikácií. Čo zostáva, je malý applet, ktorý zostáva otvorený, sleduje jeden profil a vykoná jeden pokus.

Prečo to patrí do používateľskej relácie

Pripojený zväzok je vlastnosť relácie, ktorá ho pripojila. Relácia iného používateľa ho nevidí a pripojenie vlastnené rootom sa správa inak ako to, ktoré vytvoril Finder. Zachovanie pripojenia v používateľskej relácii túto sémantiku zachováva.

Privilegovaní pomocníci existujú pre časti, ktoré ich skutočne potrebujú: vytvorenie tunelového rozhrania, zmenu trás, aktualizáciu resolvera. Pripojenie SMB zdieľania medzi ne nepatrí. Zaobchádzať s ním, akoby patrilo, vynucuje voľbu medzi sudo bez hesla a root skriptom, ktorý beží, keď nikto nie je prítomný. Oboje je väčšie riziko, než problém ospravedlňuje, a prístup cez používateľskú reláciu sa tej voľbe úplne vyhýba.

Vlastné háčiky pripojenia Tunnelblick tu nie sú náhradou, pretože bežia mimo relácie pracovnej plochy a ich poradie voči skriptom klienta nie je definované. Dopytovanie stavu z používateľského appletu je menší mechanizmus s menej predpokladmi.

Najprv dokážte ručne, že zdieľanie funguje

Automatizácia nemôže dodať trasu, oprávnenie ani účet, ktorý neexistuje. Pripojte VPN ručne a otvorte zdieľanie vo Finderi, než napíšete akýkoľvek skript. Ak to zlyhá, skript zlyhá zmätenším spôsobom.

Zapíšte tri hodnoty, ktoré skript použije: názov profilu presne tak, ako ho Tunnelblick uvádza, URL zdieľania a názov zväzku, ktorý Finder po pripojení zobrazí. Názov zväzku je dôležitý, pretože kontrola existujúceho pripojenia ho používa, a kontrola iba podľa názvu je pohodlná poistka, nie dôkaz totožnosti servera. Použite názov, ktorý je na stroji jedinečný. Potom potvrďte, že server vôbec odpovedá.

smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs

Prvý príkaz dokazuje, že server odpovedá, druhý, že sa názov profilu vyrieši, a tretí ukazuje, ako vyzerá úspešné pripojenie. Zaznamenajte všetky tri, než čokoľvek zautomatizujete.

Prečítajte stav profilu z Tunnelblick

Tunnelblick sprístupňuje svoje konfigurácie a ich stavy cez AppleScript, a to je jediný háčik, ktorý tento návrh potrebuje. Stav, na ktorom záleží, je reťazec hlásený pre tento jeden profil, nie prítomnosť aplikácie.

Dopytovanie má dôsledky, ktoré stoja za zmienku. Opätovné pripojenie kratšie ako interval môže prejsť nepovšimnuté a applet prechod vôbec nevidí. To je prijateľné pre poistku pripojenia a neprijateľné pre čokoľvek, čo musí reagovať na každú udalosť. Ak potrebujete vernosť udalostí, je to zlý mechanizmus, nie mechanizmus, ktorý potrebuje kratší časovač. Zvoľte interval s týmto kompromisom na mysli.

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

Exportujte ho ako aplikáciu s voľbou zostať otvorená a potom ho spustite v prihlásenej relácii namiesto cez sudo.

Pripojte raz, potom prestaňte skúšať

Príznak pokusu je to, čo bráni tomu, aby sa z tohto stala slučka hádajúca prihlasovacie údaje. Keď applet skúsi, čaká na zmenu stavu pripojenia, než to skúsi znova.

Toto správanie je zámerné. Zdieľanie, ktoré pripojenie odmieta, ho zvyčajne odmieta z dôvodu, ktorý nový pokus nemôže napraviť, a opakované pokusy menia jednu požiadavku na ich prúd. Príznak sa resetuje, keď profil opustí pripojený stav, takže skutočné opätovné pripojenie vytvorí presne jeden nový pokus. Ukončenie a opätovné spustenie appletu ho tiež resetuje, a to je ručné prepnutie. Ani jedna cesta zlyhanie neskrýva; obe ho nechávajú viditeľné vo Finderi.

Skript nenesie žiadne heslo a tak by to malo zostať. Nechajte operáciu pripojenia opýtať sa a nechajte kľúčenku robiť to, čo organizácia podporuje. Vloženie poverenia do URL mení pohodlný skript na tajomstvo, ktoré je nutné rotovať.

Čo pomocník nedokáže

Tri obmedzenia stoja za to napísať vedľa appletu. Nedokáže vysunúť zaneprázdnený zväzok po zlyhaní siete, nedokáže zaručiť, že DNS a server sú pripravené, keď stav hovorí pripojené, a nereaguje na každé opätovné pripojenie.

Prvé obmedzenie je v praxi najdôležitejšie. Zdieľanie, ktorého server zmizne, zanechá zväzok, ktorý vyzerá pripojene a pri prístupe blokuje, a zdvorilou opravou je dokončiť operácie so súbormi a vysunúť pred plánovaným odpojením. Druhé vysvetľuje väčšinu neúspešných prvých pokusov: tunel je hore, zatiaľ čo resolver ešte nedohonil, takže počkajte a potom raz pripojte ručne pre potvrdenie. Tretie je skorší kompromis dopytovania, nie chyba na opravu.

Pre stroj bez dozoru alebo spravovanú flotilu je tento návrh nesprávny tvar. Použite zásady pripájania vlastnené správcom namiesto rozširovania appletu pracovnej plochy na privilegovanú službu.

Súvisiace články