VPN klientam nepieciešama privilēģēta palīdzība tīkla pārkonfigurēšanai, un šis fakts tiek piemērots pārāk plaši visam apkārt. Skriptam, kas montē failu koplietojumu, nav vajadzīgs root, jo koplietojums pieder pieteikušās lietotāja sesijai un viņa akreditācijas datiem. Montēšanas iznešana no privilēģētā ceļa novērš vajadzību pēc sudo noteikumiem, root āķiem un iebūvēto lietotņu labojumiem. Paliek mazs applet, kas paliek atvērts, uzrauga vienu profilu un veic vienu mēģinājumu.

Kāpēc tas pieder lietotāja sesijai

Piemontēts sējums ir sesijas, kas to piemontēja, īpašība. Cita lietotāja sesija to neredz, un root piederoša montāža uzvedas citādi nekā Finder izveidotā. Montāžas saglabāšana lietotāja sesijā saglabā šo semantiku.

Privilēģēti palīgi pastāv tām daļām, kurām tie patiešām nepieciešami: tuneļa saskarnes izveidei, maršrutu maiņai, risinātāja atjaunināšanai. SMB koplietojuma montēšana nav viena no šīm daļām. Izturēšanās pret to tā, it kā tā būtu, uzspiež izvēli starp sudo bez paroles un root skriptu, kas izpildās, kad neviena nav. Abi ir lielāks risks, nekā problēma attaisno, un pieeja caur lietotāja sesiju pilnībā izvairās no šīs izvēles.

Pašas Tunnelblick savienojuma āķi šeit neaizstāj, jo tie izpildās ārpus darbvirsmas sesijas un to secība attiecībā pret klienta skriptiem nav definēta. Stāvokļa vaicāšana no lietotāja applet ir mazāks mehānisms ar mazāk pieņēmumiem.

Vispirms manuāli pierādiet, ka koplietojums darbojas

Automatizācija nevar nodrošināt maršrutu, atļauju vai kontu, kas neeksistē. Pievienojiet VPN manuāli un atveriet koplietojumu Finder, pirms rakstāt jebkuru skriptu. Ja tas neizdosies, skripts neizdosies mulsinošākā veidā.

Pierakstiet trīs vērtības, ko skripts izmantos: profila nosaukumu tieši tā, kā to uzskaita Tunnelblick, koplietojuma URL un sējuma nosaukumu, ko Finder rāda pēc montēšanas. Sējuma nosaukums ir svarīgs, jo esošās montāžas pārbaude to izmanto, un pārbaude tikai pēc nosaukuma ir ērtības aizsargs, nevis servera identitātes pierādījums. Izmantojiet mašīnā unikālu nosaukumu. Pēc tam pārliecinieties, ka serveris vispār atbild.

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

Pirmā komanda pierāda, ka serveris atbild, otrā – ka profila nosaukums tiek atrisināts, un trešā parāda, kā izskatās veiksmīga montāža. Fiksējiet visas trīs, pirms kaut ko automatizējat.

Nolasiet profila stāvokli no Tunnelblick

Tunnelblick atklāj savas konfigurācijas un to stāvokļus, izmantojot AppleScript, un tas ir vienīgais āķis, kas šim projektam nepieciešams. Svarīgais stāvoklis ir virkne, kas tiek ziņota tieši šim profilam, nevis lietotnes klātbūtne.

Vaicāšanai ir sekas, ko vērts pieminēt. Atkārtots savienojums, kas īsāks par intervālu, var paiet nepamanīts, un applet pāreju nemaz neredz. Tas ir pieņemami montāžas aizsargam un nepieņemami jebkam, kam jāreaģē uz katru notikumu. Ja nepieciešama notikumu precizitāte, tas ir nepareizais mehānisms, nevis mehānisms, kam vajadzīgs īsāks taimeris. Izvēlieties intervālu, ņemot vērā šo kompromisu.

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

Eksportējiet to kā programmu ar iespēju palikt atvērtai, pēc tam palaidiet pieteikušās lietotāja sesijā, nevis caur sudo.

Montējiet vienreiz, pēc tam pārtrauciet mēģināt

Mēģinājuma karodziņš ir tas, kas neļauj tam kļūt par ciklu, kas min akreditācijas datus. Kad applet ir mēģinājis, tas gaida savienojuma stāvokļa maiņu, pirms mēģināt vēlreiz.

Šāda uzvedība ir apzināta. Koplietojums, kas atsakās no montāžas, parasti atsakās iemesla dēļ, ko atkārtots mēģinājums nevar novērst, un atkārtoti mēģinājumi pārvērš vienu pieprasījumu to plūsmā. Karodziņš tiek atiestatīts, kad profils pamet savienoto stāvokli, tāpēc īsts atkārtots savienojums dod tieši vienu jaunu mēģinājumu. Iziešana un applet atkārtota palaišana arī to atiestata, un tas ir manuālais pārraksts. Neviens no ceļiem neslēpj kļūmi; abi atstāj to redzamu Finder.

Skripts nesatur nekādu paroli, un tā tam jāpaliek. Ļaujiet montēšanas operācijai pajautāt, un ļaujiet atslēgu saišķim darīt to, ko organizācija atbalsta. Akreditācijas datu iegulšana URL pārvērš ērtības skriptu par noslēpumu, kas jārotē.

Ko palīgs nevar

Trīs ierobežojumus vērts pierakstīt pie applet. Tas nevar izmest aizņemtu sējumu pēc tīkla kļūmes, nevar garantēt, ka DNS un serveris ir gatavi, kad stāvoklis saka savienots, un nereaģē uz katru atkārtotu savienojumu.

Pirmais ierobežojums praksē ir svarīgākais. Koplietojums, kura serveris pazūd, atstāj sējumu, kas izskatās piemontēts un bloķē piekļuvi, un pieklājīgais labojums ir pabeigt failu operācijas un izmest to pirms plānotas atvienošanas. Otrais izskaidro lielāko daļu neveiksmīgo pirmo mēģinājumu: tunelis ir pacelts, kamēr risinātājs vēl nav panācis, tāpēc pagaidiet un pēc tam vienreiz piemontējiet manuāli, lai apstiprinātu. Trešais ir iepriekš minētais vaicāšanas kompromiss, nevis kļūda, kas jālabo.

Neuzraudzītai mašīnai vai pārvaldītam parkam šis dizains ir nepareizā formā. Izmantojiet administratora pārvaldītu montēšanas politiku, nevis paplašiniet darbvirsmas applet par privilēģētu pakalpojumu.

Saistītie raksti