Montimi i një ndarjeje nga Tunnelblick pa ekzekutuar si root
Një AppleScript që mbetet i hapur mund të mbikëqyrë një profil Tunnelblick dhe të montojë një ndarje SMB si përdoruesi i identifikuar, pa grep root ose sudo pa fjalëkalim.
Klienti VPN ka nevojë për ndihmë të privilegjuar për të rikonfiguruar rrjetin, dhe ky fakt zbatohet shumë gjerësisht për gjithçka rreth tij. Një skript që monton një ndarje skedarësh nuk ka nevojë për root, sepse ndarja i përket sesionit të përdoruesit të identifikuar dhe kredencialeve të atij përdoruesi. Heqja e montimit nga rruga e privilegjuar eliminon nevojën për rregulla sudo, grepa root dhe modifikime të aplikacioneve të paketuara. Ajo që mbetet është një applet i vogël që mbetet i hapur, mbikëqyr një profil dhe bën një tentativë.
Pse kjo i përket sesionit të përdoruesit
Një vëllim i montuar është veti e sesionit që e montoi. Sesioni i një përdoruesi tjetër nuk e sheh, dhe një montim në pronësi të root sillet ndryshe nga ai që krijoi Finder. Mbajtja e montimit në sesionin e përdoruesit ruan atë semantikë.
Ndihmësit e privilegjuar ekzistojnë për pjesët që kanë vërtet nevojë për ta: krijimi i një ndërfaqeje tuneli, ndryshimi i rrugëve, përditësimi i rezoluesit. Montimi i një ndarjeje SMB nuk është një nga ato pjesë. Trajtimi i tij sikur të ishte imponon një zgjedhje midis sudo pa fjalëkalim dhe një skripti root që ekzekutohet kur nuk është askush i pranishëm. Të dyja janë rreziqe më të mëdha sesa justifikon problemi, dhe qasja e sesionit të përdoruesit e shmang zgjedhjen plotësisht.
Grepët e lidhjes të vetë Tunnelblick nuk janë zëvendësues këtu, pasi ekzekutohen jashtë sesionit të desktopit dhe renditja e tyre ndaj skripteve të klientit nuk është e përcaktuar. Të pyesësh gjendjen nga një applet përdoruesi është mekanizëm më i vogël me më pak supozime.
Provoje fillimisht me dorë që ndarja funksionon
Automatizimi nuk mund të sigurojë një rrugë, një leje ose një llogari që nuk ekziston. Lidhe VPN-në manualisht dhe hap ndarjen në Finder përpara se të shkruash ndonjë skript. Nëse kjo dështon, skripti do të dështojë në një mënyrë më konfuze.
Shëno tre vlerat që do të përdorë skripti: emrin e profilit saktësisht siç e liston Tunnelblick, URL-në e ndarjes dhe emrin e vëllimit që Finder tregon pas montimit. Emri i vëllimit ka rëndësi sepse kontrolli i një montimi ekzistues e përdor atë, dhe një kontroll vetëm mbi emrin është një mbrojtje komoditeti, jo provë e identitetit të serverit. Përdor një emër unik në makinë. Pastaj konfirmo që serveri përgjigjet qoftë edhe pak.
smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs
Komanda e parë provon që serveri përgjigjet, e dyta që emri i profilit zgjidhet, dhe e treta tregon si duket një montim i suksesshëm. Regjistro të tre përpara se të automatizosh çdo gjë.
Lexo gjendjen e profilit nga Tunnelblick
Tunnelblick ekspozon konfigurimet e tij dhe gjendjet e tyre përmes AppleScript, dhe ky është grepi i vetëm që i nevojitet këtij dizajni. Gjendja që ka rëndësi është vargu i raportuar për atë profil të caktuar, jo prania e aplikacionit.
Pyetja ka pasoja që ia vlen të përmenden. Një rilidhje më e shkurtër se intervali mund të kalojë pa u vënë re, dhe applet-i nuk e sheh fare tranzicionin. Kjo është e pranueshme për një mbrojtje montimi dhe e papranueshme për çdo gjë që duhet të reagojë ndaj çdo ngjarjeje. Nëse të duhet besnikëri e ngjarjeve, ky është mekanizmi i gabuar, jo një mekanizëm që kërkon një kohëmatës më të shkurtër. Zgjidh intervalin duke pasur parasysh këtë kompromis.
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
Eksportoje si aplikacion me opsionin për të mbetur i hapur, pastaj nise në sesionin e identifikuar në vend të sudo.
Monto një herë, pastaj ndalo së provuari
Flamuri i tentuar është ai që e pengon këtë të bëhet një lak që hamendëson kredenciale. Pasi applet-i ka provuar, pret që gjendja e lidhjes të ndryshojë përpara se të provojë përsëri.
Kjo sjellje është e qëllimshme. Një ndarje që refuzon montimin zakonisht e refuzon për një arsye që një tentativë e re nuk mund ta rregullojë, dhe tentativat e përsëritura e kthejnë një kërkesë në një rrjedhë të tillë. Flamuri rivendoset kur profili largohet nga gjendja e lidhur, kështu që një rilidhje e vërtetë prodhon saktësisht një tentativë të re. Dalja dhe rinisja e applet-it gjithashtu e rivendos, dhe ky është anashkalimi manual. Asnjëra rrugë nuk e fsheh një dështim; të dyja e lënë atë të dukshëm në Finder.
Skripti nuk mbart asnjë fjalëkalim, dhe kështu duhet të mbetet. Lëri operacionit të montimit të pyesë, dhe lëri çelësoren të bëjë atë që mbështet organizata. Futja e një kredencieli në një URL e kthen një skript komoditeti në një sekret që duhet rotacion.
Çfarë nuk mund të bëjë ndihmësi
Tre kufij ia vlen të shkruhen pranë applet-it. Nuk mund të nxjerrë një vëllim të zënë pas një dështimi rrjeti, nuk mund të garantojë që DNS dhe serveri janë gati kur gjendja thotë i lidhur, dhe nuk reagon ndaj çdo rilidhjeje.
Kufizimi i parë ka më shumë rëndësi në praktikë. Një ndarje, serveri i së cilës zhduket, lë një vëllim që duket i montuar dhe bllokon në akses, dhe rregullimi i sjellshëm është të përfundosh operacionet e skedarëve dhe ta nxjerrësh përpara një shkëputjeje të planifikuar. I dyti shpjegon shumicën e tentativave të para të dështuara: tuneli është lart ndërsa rezoluesi nuk ka arritur ende, prandaj prit dhe pastaj monto me dorë një herë për ta konfirmuar. I treti është kompromisi i pyetjes së mëparshme, jo një defekt për t’u rregulluar.
Për një makinë pa mbikëqyrje ose një flotë të menaxhuar, ky dizajn ka formën e gabuar. Përdor një politikë montimi në pronësi të administratorit në vend që të zgjasësh një applet desktopi në një shërbim të privilegjuar.