Odjemalec VPN potrebuje privilegirano pomoč za ponovno konfiguracijo omrežja, in to dejstvo se uporablja preširoko za vse okoli. Skript, ki priklopi datotečno delitev, ne potrebuje roota, ker delitev pripada seji prijavljenega uporabnika in njegovim poverilnicam. Premik priklapljanja iz privilegirane poti odpravi potrebo po pravilih sudo, root kavljev in spreminjanju priloženih aplikacij. Kar ostane, je majhen applet, ki ostane odprt, spremlja en profil in izvede en poskus.

Zakaj to spada v uporabniško sejo

Priklopljeni nosilec je lastnost seje, ki ga je priklopila. Seja drugega uporabnika ga ne vidi, in priklop v lasti roota se obnaša drugače od tistega, ki ga je ustvaril Finder. Ohranjanje priklopa v uporabniški seji ohranja to semantiko.

Privilegirani pomočniki obstajajo za dele, ki jih resnično potrebujejo: ustvarjanje tunelskega vmesnika, spreminjanje poti, posodabljanje razreševalnika. Priklop delitve SMB ni eden od teh delov. Obravnavanje, kot da bi bil, vsili izbiro med sudo brez gesla in root skriptom, ki se izvaja, ko nikogar ni. Oboje je večje tveganje, kot ga problem upravičuje, in pristop prek uporabniške seje se izbiri popolnoma izogne.

Lastni kavlji povezave Tunnelblicka tukaj niso nadomestilo, ker se izvajajo zunaj seje namizja in njihov vrstni red glede na skripte odjemalca ni določen. Poizvedovanje stanja iz uporabniškega appleta je manjši mehanizem z manj predpostavkami.

Najprej ročno dokažite, da delitev deluje

Avtomatizacija ne more zagotoviti poti, dovoljenja ali računa, ki ne obstaja. Ročno povežite VPN in odprite delitev v Finderju, preden napišete kateri koli skript. Če to spodleti, bo skript spodletel na bolj zmeden način.

Zapišite tri vrednosti, ki jih bo skript uporabil: ime profila natanko tako, kot ga navaja Tunnelblick, URL delitve in ime nosilca, ki ga Finder pokaže po priklopu. Ime nosilca je pomembno, ker ga preverjanje obstoječega priklopa uporablja, in preverjanje samo po imenu je priročna zaščita, ne dokaz identitete strežnika. Uporabite ime, ki je na stroju edinstveno. Nato potrdite, da strežnik sploh odgovarja.

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

Prvi ukaz dokazuje, da strežnik odgovarja, drugi, da se ime profila razreši, in tretji pokaže, kako izgleda uspešen priklop. Zabeležite vse tri, preden karkoli avtomatizirate.

Preberite stanje profila iz Tunnelblicka

Tunnelblick razkrije svoje konfiguracije in njihova stanja prek AppleScripta, in to je edini kavelj, ki ga ta zasnova potrebuje. Stanje, ki šteje, je niz, sporočen za ta profil, ne prisotnost aplikacije.

Poizvedovanje ima posledice, ki jih velja omeniti. Ponovna povezava, krajša od intervala, lahko mine neopaženo, in applet prehoda sploh ne vidi. To je sprejemljivo za zaščito priklopa in nesprejemljivo za karkoli, kar se mora odzvati na vsak dogodek. Če potrebujete zvestobo dogodkom, je to napačen mehanizem in ne mehanizem, ki potrebuje krajši časovnik. Izberite interval s tem kompromisom v mislih.

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

Izvezite ga kot aplikacijo z možnostjo, da ostane odprta, in ga nato zaženite v prijavljeni seji namesto prek sudo.

Priklopite enkrat, nato prenehajte poskušati

Zastavica poskusa je tisto, kar preprečuje, da bi to postala zanka, ki ugiba poverilnice. Ko applet poskusi, počaka, da se stanje povezave spremeni, preden poskusi znova.

To vedenje je namerno. Delitev, ki priklop zavrne, ga običajno zavrne zaradi razloga, ki ga nov poskus ne more odpraviti, in ponovljeni poskusi spremenijo eno zahtevo v njihov tok. Zastavica se ponastavi, ko profil zapusti povezano stanje, zato resnična ponovna povezava ustvari natanko en nov poskus. Izhod in ponovni zagon appleta jo prav tako ponastavita, in to je ročni poseg. Nobena od poti ne skrije napake; obe jo pustita vidno v Finderju.

Skript ne nosi nobenega gesla in tako bi moralo ostati. Pustite, da operacija priklopa vpraša, in pustite ključavnici, da naredi tisto, kar organizacija podpira. Vgradnja poverilnice v URL spremeni priročen skript v skrivnost, ki jo je treba zamenjati.

Česa pomočnik ne zmore

Tri omejitve velja zapisati ob appletu. Ne zmore izvreči zasedenega nosilca po omrežni napaki, ne more zagotoviti, da sta DNS in strežnik pripravljena, ko stanje pravi povezano, in se ne odzove na vsako ponovno povezavo.

Prva omejitev je v praksi najpomembnejša. Delitev, katere strežnik izgine, pusti nosilec, ki izgleda priklopljen in blokira pri dostopu, in vljudni popravek je dokončati datotečne operacije in ga izvreči pred načrtovanim odklopom. Druga pojasnjuje večino neuspešnih prvih poskusov: tunel je vzpostavljen, medtem ko razreševalnik še ni dohitel, zato počakajte in nato enkrat ročno priklopite za potrditev. Tretja je prejšnji kompromis poizvedovanja in ne napaka, ki bi jo bilo treba popraviti.

Za stroj brez nadzora ali upravljano floto je ta zasnova napačne oblike. Uporabite pravilnik priklapljanja v lasti skrbnika, namesto da bi applet namizja razširili v privilegirano storitev.

Sorodni članki