Monter ei deling frå Tunnelblick utan å køyre som root
Eit AppleScript som held seg ope kan overvake éin Tunnelblick-profil og montere ei SMB-deling som den innlogga brukaren, utan root-hook eller passordlaus sudo.
VPN-klienten treng privilegert hjelp til å setje opp nettet på nytt, og den kjensgjerninga blir brukt for breitt på alt rundt. Eit skript som monterer ei fildeling treng ikkje root, fordi delinga høyrer til økta til den innlogga brukaren og til påloggingsinformasjonen hans. Å flytte monteringa ut av den privilegerte vegen fjernar behovet for sudo-reglar, root-hooks og endringar i medfølgjande program. Det som står att er eit lite applet som held seg ope, overvakar éin profil og gjer eitt forsøk.
Kvifor dette høyrer heime i brukarøkta
Eit montert volum er ein eigenskap ved økta som monterte det. Økta til ein annan brukar ser det ikkje, og ei montering som er eigd av root oppfører seg annleis enn den Finder laga. Å halde monteringa i brukarøkta bevarer den semantikken.
Privilegerte hjelparar finst for delane som verkeleg treng dei: å opprette eit tunnelgrensesnitt, endre ruter, oppdatere resolvaren. Å montere ei SMB-deling er ikkje ein av dei delane. Å handsame det som om det var det tvingar fram eit val mellom passordlaus sudo og eit root-skript som køyrer medan ingen er til stades. Begge er større risikoar enn problemet forsvare, og brukarøkt-tilnærminga unngår valet heilt.
Dei eigne tilkoplingshookane til Tunnelblick er inga erstatning her, sidan dei køyrer utanfor skrivebordsøkta og rekkjefølgja deira i høve til skripta til klienten ikkje er definert. Å polle tilstanden frå eit brukarapplet er ein mindre mekanisme med færre føresetnader.
Prov først for hand at delinga verkar
Automatisering kan ikkje levere ei rute, ei løyve eller ein konto som ikkje finst. Kopla til VPN-en manuelt og opne delinga i Finder før du skriv noko skript. Viss det feilar, vil skriptet feile på ein meir forvirrande måte.
Noter dei tre verdiane skriptet skal bruke: profilnamnet nøyaktig slik Tunnelblick viser det, delings-URL-en og volumnamnet Finder viser etter monteringa. Volumnamnet har noko å seie fordi kontrollen av ei eksisterande montering brukar det, og ein kontroll som berre ser på namnet er ein bekvemmelegheitsvakt snarare enn prov på identiteten til tenaren. Bruk eit namn som er unikt på maskinen. Stadfest deretter at tenaren i det heile svarar.
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 provar at tenaren svarar, den andre at profilnamnet slår opp, og den tredje viser korleis ei vellukka montering ser ut. Fang alle tre før du automatiserer noko.
Les profiltilstanden frå Tunnelblick
Tunnelblick eksponerer konfigurasjonane sine og tilstandane deira via AppleScript, og det er den einaste hooken dette designet treng. Tilstanden du bryr deg om er strengen som blir rapportert for nettopp den profilen, ikkje tilstadeveret av programmet.
Polling har konsekvensar som er verd å nemne. Ei gjenoppkopling som er kortare enn intervallet kan gå ubemerka forbi, og appletten ser aldri overgangen. Det er akseptabelt for ei monteringsvakt og uakseptabelt for noko som må reagere på kvar hending. Viss du treng hendingstruskap, er dette feil mekanisme snarare enn ein mekanisme som treng ein kortare timer. Vel intervallet med den avveginga i tankane.
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 eit program med valet å halde seg ope, og start det deretter i den innlogga økta i staden for via sudo.
Monter éin gong, og slutt så å prøve
Flagget for forsøkt er det som hindrar dette i å bli ei løkke som gissar på påloggingsinformasjon. Når appletten har forsøkt, ventar han på at tilkoplingstilstanden skal endre seg før han prøver igjen.
Den åtferda er medvite. Ei deling som avviser monteringa avviser henne vanlegvis av ein grunn eit nytt forsøk ikkje kan rette, og gjentekne forsøk gjer éi førespurnad til ein straum av dei. Flagget blir nullstilt når profilen forlèt den tilkopla tilstanden, så ei ekte gjenoppkopling gir nøyaktig eitt nytt forsøk. Å avslutte og starte appletten på nytt nullstiller det òg, og det er den manuelle overstyringa. Ingen av vegane skjuler ein feil; begge lèt han vere synleg i Finder.
Skriptet inneheld ikkje passord, og det bør halde fram slik. Lat monteringsoperasjonen spørje, og lat nykelringen gjere det organisasjonen støttar. Å byggje inn påloggingsinformasjon i ein URL gjer eit bekvemmelegheitsskript til ein løyndom som må roterast.
Kva hjelparen ikkje kan gjere
Tre grenser er verd å skrive ved sida av appletten. Han kan ikkje løysa ut eit oppteke volum etter ein nettverksfeil, han kan ikkje garantere at DNS og tenaren er klare når tilstanden seier tilkopla, og han reagerer ikkje på kvar gjenoppkopling.
Den første grensa betyr mest i praksis. Ei deling der tenaren forsvinn lèt att eit volum som ser montert ut og blokkerer ved tilgang, og den høflege løysinga er å fullføre filoperasjonar og løysa ut før ein planlagd fråkopling. Den andre forklarer dei fleste mislukka første forsøka: tunnelen er oppe medan resolvaren ikkje har følgd med, så vent og monter deretter for hand éin gong for å stadfeste. Den tredje er polling-avveginga frå tidlegare snarare enn ein feil som skal rettast.
For ein ubemanna maskin eller ein administrert flåte er dette designet feil form. Bruk ein monteringspolicy som er eigd av administratoren i staden for å utvide eit skrivebordsapplet til ei privilegert teneste.