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

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

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

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

Сопствените куки за поврзување на Tunnelblick не се замена овде, бидејќи се извршуваат надвор од десктоп сесијата и нивниот редослед во однос на скриптите на клиентот не е дефиниран. Прашањето за состојбата од кориснички 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-от на работната површина во привилегирана услуга.

Поврзани статии