VPN-asiakasohjelma tarvitsee etuoikeutettua apua verkon uudelleenmäärittämiseen, ja tätä tosiasiaa sovelletaan liian laajasti kaikkeen sen ympärillä. Tiedostojakoa liittävä skripti ei tarvitse root-oikeuksia, koska jako kuuluu kirjautuneen käyttäjän istuntoon ja hänen tunnistetietoihinsa. Liittämisen siirtäminen pois etuoikeutetulta polulta poistaa tarpeen sudo-säännöille, root-koukuille ja mukana tulevien sovellusten muokkaamiselle. Jäljelle jää pieni avoinna pysyvä applet, joka seuraa yhtä profiilia ja yrittää kerran.

Miksi tämä kuuluu käyttäjäistuntoon

Liitetty taltio on ominaisuus siinä istunnossa, joka sen liitti. Toisen käyttäjän istunto ei näe sitä, ja rootin omistama liitos käyttäytyy eri tavoin kuin Finderin luoma. Liittämisen pitäminen käyttäjäistunnossa säilyttää tämän semantiikan.

Etuoikeutetut apurit ovat olemassa niitä osia varten, jotka todella tarvitsevat niitä: tunnelirajapinnan luominen, reittien muuttaminen, resolverin päivittäminen. SMB-jaon liittäminen ei ole yksi niistä osista. Sen kohteleminen sellaisena pakottaa valitsemaan salasanattoman sudon ja sellaisen root-skriptin välillä, joka ajetaan, kun paikalla ei ole ketään. Molemmat ovat suurempia riskejä kuin ongelma oikeuttaa, ja käyttäjäistuntotapa välttää valinnan kokonaan.

Tunnelblickin omat yhteyskoukut eivät korvaa tätä, koska ne ajetaan työpöytäistunnon ulkopuolella eikä niiden järjestystä asiakasohjelman skripteihin nähden ole määritelty. Tilanteen kysely käyttäjä-appletista on pienempi mekanismi, jossa on vähemmän oletuksia.

Todista ensin käsin, että jako toimii

Automaatio ei voi tarjota reittiä, käyttöoikeutta tai tiliä, jota ei ole. Yhdistä VPN käsin ja avaa jako Finderissa ennen kuin kirjoitat skriptiä. Jos se epäonnistuu, skripti epäonnistuu hämmentävällä tavalla.

Kirjaa kolme arvoa, joita skripti käyttää: profiilin nimi täsmälleen sellaisena kuin Tunnelblick sen listaa, jaon URL ja taltion nimi, jonka Finder näyttää liittämisen jälkeen. Taltion nimellä on merkitystä, koska olemassa olevan liitoksen tarkistus käyttää sitä, ja pelkkään nimeen perustuva tarkistus on mukavuusvarmistus eikä todiste palvelimen identiteetistä. Käytä nimeä, joka on koneella yksilöllinen. Vahvista sitten, että palvelin ylipäätään vastaa.

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

Ensimmäinen komento todistaa, että palvelin vastaa, toinen, että profiilin nimi ratkeaa, ja kolmas näyttää, miltä onnistunut liitos näyttää. Tallenna kaikki kolme ennen kuin automatisoit mitään.

Lue profiilin tila Tunnelblickistä

Tunnelblick tarjoaa kokoonpanonsa ja niiden tilat AppleScriptin kautta, ja se on ainoa koukku, jonka tämä suunnittelu tarvitsee. Tila, jolla on merkitystä, on juuri kyseiselle profiilille raportoitu merkkijono, ei sovelluksen läsnäolo.

Kyselyllä on seurauksia, jotka kannattaa mainita. Väliä lyhyempi uudelleenyhdistäminen voi mennä huomaamatta ohi, eikä applet näe siirtymää lainkaan. Se on hyväksyttävää liitoksen vartijalle ja mahdotonta hyväksyä millekään, jonka on reagoitava jokaiseen tapahtumaan. Jos tarvitset tapahtumatarkkuutta, tämä on väärä mekanismi eikä mekanismi, joka tarvitsee lyhyemmän ajastimen. Valitse väli tämä kompromissi mielessä.

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

Vie se sovelluksena, jossa on avoinna pysymisen valinta, ja käynnistä se sitten kirjautuneessa istunnossa sudon sijaan.

Liitä kerran ja lopeta sitten yrittäminen

Yritetty-lippu estää tätä muuttumasta silmukaksi, joka arvaa tunnistetietoja. Kun applet on yrittänyt, se odottaa yhteystilan muuttumista ennen kuin yrittää uudelleen.

Tämä käytös on tarkoituksellista. Jako, joka kieltäytyy liittämisestä, kieltäytyy siitä yleensä syystä, jota uusi yritys ei voi korjata, ja toistuvat yritykset muuttavat yhden kehotteen niiden virraksi. Lippu nollataan, kun profiili poistuu yhdistetystä tilasta, joten todellinen uudelleenyhdistäminen tuottaa täsmälleen yhden uuden yrityksen. Appletin lopettaminen ja uudelleenkäynnistäminen nollaa sen myös, ja se on manuaalinen ohitus. Kumpikaan polku ei piilota epäonnistumista; molemmat jättävät sen näkyviin Finderiin.

Skripti ei sisällä salasanaa, ja niin sen pitää pysyä. Anna liittämistoiminnon kysyä ja anna avainnipun tehdä se, mitä organisaatio tukee. Tunnistetiedon upottaminen URL-osoitteeseen muuttaa mukavuusskriptin salaisuudeksi, joka on kierrätettävä.

Mitä apuri ei voi tehdä

Kolme rajaa kannattaa kirjoittaa appletin viereen. Se ei voi poistaa varattua taltiota verkkohäiriön jälkeen, se ei voi taata, että DNS ja palvelin ovat valmiita, kun tila sanoo yhdistetty, eikä se reagoi jokaiseen uudelleenyhdistämiseen.

Ensimmäinen raja merkitsee käytännössä eniten. Jako, jonka palvelin katoaa, jättää taltion, joka näyttää liitetyltä ja estää käytön, ja kohtelias korjaus on lopettaa tiedostotoiminnot ja poistaa taltio ennen suunniteltua irrotusta. Toinen selittää useimmat epäonnistuneet ensiyrittämiset: tunneli on pystyssä, kun resolver ei ole vielä ehtinyt mukaan, joten odota ja liitä sitten kerran käsin vahvistaaksesi. Kolmas on aiempi kyselykompromissi eikä korjattava virhe.

Valvomattomalle koneelle tai hallitulle laivueelle tämä suunnittelu on väärän muotoinen. Käytä ylläpitäjän omistamaa liittämiskäytäntöä sen sijaan, että laajentaisit työpöytä-appletin etuoikeutetuksi palveluksi.

Aiheeseen liittyvät artikkelit