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 на работния плот до привилегирована услуга.

Подобни статии