VPN клијент захтева привилеговану помоћ за реконфигурацију мреже, а та чињеница се примењује прешироко на све око њега. Скрипта која монтира дељење датотека не захтева root, јер дељење припада сесији пријављеног корисника и његовим акредитивима. Премештање монтирања из привилеговане путање уклања потребу за sudo правилима, root кукама и изменама у испорученим апликацијама. Оно што остаје је мали applet који остаје отворен, прати један профил и чини један покушај.

Зашто ово припада корисничкој сесији

Монтирани волумен је својство сесије која га је монтирала. Сесија другог корисника га не види, а монтирање у власништву root-а понаша се другачије од оног које је направио Finder. Задржавање монтирања у корисничкој сесији чува ту семантику.

Привилеговани помагачи постоје за делове којима су заиста потребни: стварање тунелског интерфејса, промену рута, ажурирање резолвера. Монтирање SMB дељења није један од тих делова. Третирање као да јесте присиљава избор између sudo без лозинке и root скрипте која се извршава када никога нема. Оба су већи ризик него што проблем оправдава, а приступ кроз корисничку сесију потпуно избегава тај избор.

Сопствене куке везе Tunnelblick-а овде нису замена, јер се извршавају изван desktop сесије и њихов редослед у односу на скрипте клијента није дефинисан. Испитивање стања из корисничког applet-а је мањи механизам са мање претпоставки.

Прво ручно докажите да дељење ради

Аутоматизација не може да пружи руту, дозволу ни налог који не постоји. Повежите VPN ручно и отворите дељење у Finder-у пре него што напишете било коју скрипту. Ако то не успе, скрипта ће неуслети на збуњујући начин.

Запишите три вредности које ће скрипта користити: назив профила тачно онако како га Tunnelblick наводи, URL дељења и назив волумена који Finder приказује након монтирања. Назив волумена је важан јер провера постојећег монтирања користи њега, а провера само по називу је заштита ради практичности, не доказ идентитета сервера. Користите назив који је јединствен на машини. Затим потврдите да сервер уопште одговара.

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

Прва наредба доказује да сервер одговара, друга да се назив профила разрешава, а трећа показује како изгледа успешно монтирање. Забележите све три пре него што било шта аутоматизујете.

Прочитајте стање профила из Tunnelblick-а

Tunnelblick излаже своје конфигурације и њихова стања путем AppleScript-а, и то је једина кука потребна овом дизајну. Стање које је важно је низ који се пријављује за тај један профил, не присутност апликације.

Испитивање има последице које вреди навести. Поновно повезивање краће од интервала може проћи неопажено, а applet уопште не види прелаз. То је прихватљиво за заштиту монтирања и неприхватљиво за било шта што мора да реагује на сваки догађај. Ако вам је потребна верност догађајима, ово је погрешан механизам, а не механизам којем треба краћи тајмер. Изаберите интервал с тим компромисом на уму.

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

Извезите га као апликацију са опцијом да остане отворена, а затим га покрените у пријављеној сесији уместо путем sudo.

Монтирајте једном, па престаните да покушавате

Заставица покушаја је оно што спречава да ово постане петља која погађа акредитиве. Након што applet покуша, чека да се стање везе промени пре него што покуша поново.

То понашање је намерно. Дељење које одбија монтирање обично га одбија због разлога који нови покушај не може да исправи, а поновљени покушаји претварају један захтев у њихов ток. Заставица се ресетује када профил напусти повезано стање, па истинско поновно повезивање даје тачно један нови покушај. Излазак и поновно покретање applet-а такође га ресетују, и то је ручно надјачавање. Ниједан од два пута не скрива неуспех; оба га остављају видљивим у Finder-у.

Скрипта не носи никакву лозинку и тако би требало да остане. Нека операција монтирања пита, а нека привезак кључева ради оно што организација подржава. Уграђивање акредитива у URL претвара скрипту за практичност у тајну коју треба ротирати.

Шта помагач не може

Три ограничења вреди написати поред applet-а. Не може да избаци заузет волумен након мрежног квара, не може да гарантује да су DNS и сервер спремни када стање каже повезано, и не реагује на свако поновно повезивање.

Прво ограничење је у пракси најважније. Дељење чији сервер нестане оставља волумен који изгледа монтиран и блокира при приступу, а пристојан исправак је довршити операције са датотекама и избацити га пре планираног прекида везе. Друго објашњава већину неуспелих првих покушаја: тунел је подигнут док резолвер још није сустигао, па сачекајте и затим једном ручно монтирајте да то потврдите. Треће је раније поменути компромис испитивања, а не грешка коју треба поправити.

За машину без надзора или управљану флоту овај дизајн има погрешан облик. Користите политику монтирања у власништву администратора уместо да applet радне површине проширујете у привилеговани сервис.

Повезани чланци