Monter en deling fra Tunnelblick uten å kjøre som root
Et AppleScript som holder seg åpent kan overvåke én Tunnelblick-profil og montere en SMB-deling som den innloggede brukeren, uten root-hook eller passordløs sudo.
VPN-klienten trenger privilegert hjelp til å konfigurere nettet på nytt, og den kjensgjerningen blir brukt for bredt på alt rundt. Et skript som monterer en fildeling trenger ikke root, fordi delingen tilhører den innloggede brukerens økt og den brukerens påloggingsinformasjon. Å flytte monteringen ut av den privilegerte veien fjerner behovet for sudo-regler, root-hooks og endringer i medfølgende programmer. Det som gjenstår er et lite applet som holder seg åpent, overvåker én profil og gjør ett forsøk.
Hvorfor dette hører hjemme i brukerøkten
Et montert volum er en egenskap ved økten som monterte det. En annen brukers økt ser det ikke, og en montering som eies av root oppfører seg annerledes enn den Finder laget. Å holde monteringen i brukerøkten bevarer den semantikken.
Privilegerte hjelpere finnes for delene som virkelig trenger dem: å opprette et tunnelgrensesnitt, endre ruter, oppdatere resolveren. Å montere en SMB-deling er ikke en av de delene. Å behandle det som om det var det tvinger fram et valg mellom passordløs sudo og et root-skript som kjører mens ingen er til stede. Begge er større risikoer enn problemet forsvarer, og brukerøkt-tilnærmingen unngår valget helt.
Tunnelblicks egne tilkoblingshooks er ingen erstatning her, siden de kjører utenfor skrivebordsøkten og rekkefølgen deres i forhold til klientens skript ikke er definert. Å polle tilstanden fra et brukerapplet er en mindre mekanisme med færre antakelser.
Bevis først for hånd at delingen virker
Automatisering kan ikke levere en rute, en tillatelse eller en konto som ikke finnes. Koble til VPN-en manuelt og åpne delingen i Finder før du skriver noe skript. Hvis det feiler, vil skriptet feile på en mer forvirrende måte.
Noter de tre verdiene skriptet skal bruke: profilnavnet nøyaktig slik Tunnelblick viser det, delings-URL-en og volumnavnet Finder viser etter monteringen. Volumnavnet betyr noe fordi kontrollen av en eksisterende montering bruker det, og en kontroll som bare ser på navnet er en bekvemmelighetsvakt snarere enn bevis på serverens identitet. Bruk et navn som er unikt på maskinen. Bekreft deretter at serveren i det hele tatt svarer.
smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs
Den første kommandoen beviser at serveren svarer, den andre at profilnavnet slår opp, og den tredje viser hvordan en vellykket montering ser ut. Fang alle tre før du automatiserer noe.
Les profiltilstanden fra Tunnelblick
Tunnelblick eksponerer konfigurasjonene sine og tilstandene deres via AppleScript, og det er den eneste hooken dette designet trenger. Tilstanden du bryr deg om er strengen som rapporteres for nettopp den profilen, ikke tilstedeværelsen av programmet.
Polling har konsekvenser som er verdt å nevne. En gjenoppkobling som er kortere enn intervallet kan gå ubemerket forbi, og appletten ser aldri overgangen. Det er akseptabelt for en monteringsvakt og uakseptabelt for noe som må reagere på hver hendelse. Hvis du trenger hendelsestrohet, er dette feil mekanisme snarere enn en mekanisme som trenger en kortere timer. Velg intervallet med den avveiningen i tankene.
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
Eksporter det som et program med alternativet å holde seg åpent, og start det deretter i den innloggede økten i stedet for via sudo.
Monter én gang, og slutt så å prøve
Flagget for forsøkt er det som hindrer dette i å bli en løkke som gjetter på påloggingsinformasjon. Når appletten har forsøkt, venter den på at tilkoblingstilstanden skal endre seg før den prøver igjen.
Den oppførselen er bevisst. En deling som avviser monteringen avviser den vanligvis av en grunn et nytt forsøk ikke kan rette, og gjentatte forsøk gjør én forespørsel til en strøm av dem. Flagget nullstilles når profilen forlater den tilkoblede tilstanden, så en ekte gjenoppkobling gir nøyaktig ett nytt forsøk. Å avslutte og starte appletten på nytt nullstiller det også, og det er den manuelle overstyringen. Ingen av veiene skjuler en feil; begge lar den være synlig i Finder.
Skriptet inneholder ikke passord, og det bør det fortsette med. La monteringsoperasjonen spørre, og la nøkkelringen gjøre det organisasjonen støtter. Å bygge inn påloggingsinformasjon i en URL gjør et bekvemmelighetsskript til en hemmelighet som må roteres.
Hva hjelperen ikke kan gjøre
Tre grenser er verdt å skrive ved siden av appletten. Den kan ikke løse ut et opptatt volum etter en nettverksfeil, den kan ikke garantere at DNS og serveren er klare når tilstanden sier tilkoblet, og den reagerer ikke på hver gjenoppkobling.
Den første grensen betyr mest i praksis. En deling der serveren forsvinner etterlater et volum som ser montert ut og blokkerer ved tilgang, og den høflige løsningen er å fullføre filoperasjoner og løse ut før en planlagt frakobling. Den andre forklarer de fleste mislykkede første forsøkene: tunnelen er oppe mens resolveren ikke har fulgt med, så vent og monter deretter for hånd én gang for å bekrefte. Den tredje er polling-avveiningen fra tidligere snarere enn en feil som skal rettes.
For en ubemannet maskin eller en administrert flåte er dette designet feil form. Bruk en monteringspolicy som eies av administratoren i stedet for å utvide en skrivebordsapplet til en privilegert tjeneste.