VPN klijent treba privilegovanu pomoć za rekonfiguraciju mreže, a ta činjenica se primjenjuje preširoko na sve oko njega. Skripta koja montira datotečno dijeljenje ne treba root, jer dijeljenje pripada sesiji prijavljenog korisnika i njegovim vjerodajnicama. Premještanje montiranja iz privilegovane putanje uklanja potrebu za sudo pravilima, root kukama i izmjenama priloženih aplikacija. Ono što ostaje je mali applet koji ostaje otvoren, prati jedan profil i čini jedan pokušaj.

Zašto ovo pripada korisničkoj sesiji

Montirani volumen je svojstvo sesije koja ga je montirala. Sesija drugog korisnika ga ne vidi, a montiranje u vlasništvu roota ponaša se drukčije od onog koje je stvorio Finder. Zadržavanje montiranja u korisničkoj sesiji čuva tu semantiku.

Privilegovani pomagači postoje za dijelove kojima su zaista potrebni: stvaranje tunelskog interfejsa, mijenjanje ruta, ažuriranje rezolvera. Montiranje SMB dijeljenja nije jedan od tih dijelova. Tretiranje kao da jeste prisiljava izbor između sudo bez lozinke i root skripte koja se izvršava kada nikoga nema. Oboje je veći rizik nego što problem opravdava, a pristup kroz korisničku sesiju u potpunosti izbjegava taj izbor.

Vlastite kuke veze Tunnelblicka ovdje nisu zamjena, jer se izvršavaju izvan desktop sesije i njihov redoslijed u odnosu na skripte klijenta nije definiran. Ispitivanje stanja iz korisničkog appleta manji je mehanizam s manje pretpostavki.

Prvo ručno dokažite da dijeljenje radi

Automatizacija ne može pružiti rutu, dozvolu ni račun koji ne postoji. Povežite VPN ručno i otvorite dijeljenje u Finderu prije nego što napišete bilo koju skriptu. Ako to ne uspije, skripta će neuspjeti na zbunjujući način.

Zapišite tri vrijednosti koje će skripta koristiti: naziv profila tačno onako kako ga Tunnelblick navodi, URL dijeljenja i naziv volumena koji Finder pokaže nakon montiranja. Naziv volumena je važan jer provjera postojećeg montiranja koristi njega, a provjera samo po nazivu je zaštita radi praktičnosti, ne dokaz identiteta servera. Koristite naziv koji je jedinstven na mašini. Zatim potvrdite da server uopće odgovara.

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

Prva naredba dokazuje da server odgovara, druga da se naziv profila razrješava, a treća pokazuje kako izgleda uspješno montiranje. Zabilježite sve tri prije nego što bilo šta automatizujete.

Pročitajte stanje profila iz Tunnelblicka

Tunnelblick izlaže svoje konfiguracije i njihova stanja putem AppleScripta, i to je jedina kuka koja je potrebna ovom dizajnu. Stanje koje je važno je niz koji se prijavljuje za taj jedan profil, ne prisutnost aplikacije.

Ispitivanje ima posljedice koje vrijedi navesti. Ponovno povezivanje kraće od intervala može proći neopaženo, a applet uopće ne vidi prijelaz. To je prihvatljivo za zaštitu montiranja i neprihvatljivo za bilo šta što mora reagovati na svaki događaj. Ako vam treba vjernost događajima, ovo je pogrešan mehanizam, a ne mehanizam kojem treba kraći tajmer. Odaberite interval s tim kompromisom na umu.

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 kao aplikaciju s opcijom da ostane otvorena, a zatim ga pokrenite u prijavljenoj sesiji umjesto putem sudo.

Montirajte jednom, pa prestanite pokušavati

Zastavica pokušaja je ono što sprječava da ovo postane petlja koja pogađa vjerodajnice. Nakon što applet pokuša, čeka da se stanje veze promijeni prije nego što pokuša ponovo.

To ponašanje je namjerno. Dijeljenje koje odbija montiranje obično ga odbija zbog razloga koji novi pokušaj ne može ispraviti, a ponovljeni pokušaji pretvaraju jedan zahtjev u njihov tok. Zastavica se resetuje kada profil napusti povezano stanje, pa istinsko ponovno povezivanje daje tačno jedan novi pokušaj. Izlazak i ponovno pokretanje appleta također ga resetuju, i to je ručno nadjačavanje. Nijedan od dvaju puteva ne skriva neuspjeh; oba ga ostavljaju vidljivim u Finderu.

Skripta ne nosi nikakvu lozinku i tako bi trebalo da ostane. Neka operacija montiranja pita, a neka privjesak ključeva radi ono što organizacija podržava. Ugrađivanje vjerodajnice u URL pretvara skriptu za praktičnost u tajnu koju treba rotirati.

Šta pomagač ne može

Tri ograničenja vrijedi napisati pored appleta. Ne može izbaciti zauzeti volumen nakon mrežnog kvara, ne može garantovati da su DNS i server spremni kada stanje kaže povezano, i ne reaguje na svako ponovno povezivanje.

Prvo ograničenje je u praksi najvažnije. Dijeljenje čiji server nestane ostavlja volumen koji izgleda montiran i blokira pri pristupu, a pristojan ispravak je dovršiti datotečne operacije i izbaciti ga prije planiranog prekida veze. Drugo objašnjava većinu neuspjelih prvih pokušaja: tunel je podignut dok rezolver još nije sustigao, pa sačekajte i zatim jednom ručno montirajte da biste to potvrdili. Treće je ranije spomenuti kompromis ispitivanja, a ne greška koju treba popraviti.

Za mašinu bez nadzora ili upravljanu flotu ovaj dizajn ima pogrešan oblik. Koristite politiku montiranja u vlasništvu administratora umjesto da applet radne površine proširujete u privilegovani servis.

Povezani članci