Skript, ktorý sa má spustiť po zdvihnutí VPN, potrebuje udalosť od komponentu, ktorý spojenie vlastní. Súbor vložený do starého adresára sieťových hákov nie je spätné volanie pre každú VPN, ktorú môže vytvoriť NetworkManager, pppd alebo samostatný proces OpenVPN. Každý z týchto vlastníkov hlási inú udalosť s iným prostredím, takže vlastníka treba určiť pred výberom háku. Inak je skript správny a jednoducho sa nikdy nespustí.

Pre VPN spravovanú NetworkManagerom je dispečer správne miesto a vpn-up je správna akcia.

Používajte vpn-up, nie udalosť rozhrania

Dispečer rozlišuje up od vpn-up. Prvý hlási aktivované rozhranie; druhý hlási aktivované VPN pripojenie. Zdvihnutie Wi-Fi znamená len to, že podkladové spojenie existuje; tunel môže ešte vyjednávať, alebo sa nemusí nikdy autentifikovať.

Skript dostáva rozhranie a akciu, zatiaľ čo podrobnosti spojenia prichádzajú prostredím, vrátane UUID profilu a IP rozhrania VPN. Čítajte tieto premenné namiesto odvodzovania identity z názvov zariadení.

Obmedzte zhodu na jedno spojenie

Párujte podľa UUID spojenia alebo inej identity, ktorú dispečer poskytuje, nie podľa prefixu tun alebo ppp0. Názvy rozhraní nie sú stabilné, súčasne môže existovať viac ako jeden tunel, a dva profily môžu mať rovnaký zobrazovaný názov. Párovanie podľa prefixu tun znamená, že skript sa skôr či neskôr spustí pre spojenie, ktorého sa nikto nechcel dotknúť. Môže sa spustiť aj dvakrát pre jeden profil, keď opätovné pripojenie znovu postaví zariadenie.

Urobte úlohu idempotentnou. Spätné volanie, ktoré pri každom volaní pridá trasu, nakoniec zaplní tabuľku duplikátmi, a práve druhá kópia rozbíja smerovanie.

Vedzte, čo aktivácia nepreukazuje

vpn-pre-up beží skôr, než NetworkManager ohlási plne aktivovanú VPN, a správca na tieto skripty čaká. Blokujúcu fázu používajte len vtedy, keď úloha naozaj patrí tam, pretože pomalá kontrola zdržuje aktiváciu, na ktorú čakajú všetky ostatné komponenty.

Prítomnosť trás nepreukazuje, že aplikácia počúva, že sa súkromné meno prekladá alebo že existuje používateľská relácia. Overujte to zvlášť s obmedzeným časovým limitom a hlásenie, ktorá vrstva zlyhala, namiesto opakovania celého reťazca.

Rešpektujte kontext, v ktorom skript beží

Skripty dispečera bežia ako root, mimo akejkoľvek používateľskej relácie. Nepredpokladajte, že je dostupné prostredie prihláseného používateľa, jeho grafická relácia alebo odomknutá kľúčenka. Nikto by na chýbajúci kontext pracovnej plochy nemal reagovať tým, že každý prihlasovací údaj sprístupní na čítanie každému procesu. Prácu používateľskej relácie držte v používateľskej službe alebo v pomocníkovi relácie, ktorému spätné volanie môže signalizovať bez vydávania sa za používateľa.

Vlastníctvo a oprávnenia skriptu tiež záležia. Súbor spúšťaný ako root, ktorý môže nahradiť ktorýkoľvek používateľ, je cesta k zvýšeniu oprávnení a je to zistenie nezávislé od toho, či je logika VPN správna.

Počítajte s odpojením, ktoré nikdy nepríde

NetworkManager dokumentuje, že vpn-pre-down sa nevysiela pri vynútených odpojeniach, ako je neočakávané ukončenie alebo strata pripojenia. Preto je čistenie postavené len okolo pokojného pre-down konštrukčne neúplné. Akýkoľvek zdieľaný stav, ktorý skript mení, potrebuje iného vlastníka, ktorý ho po páde obnoví, a túto cestu obnovy treba otestovať, nie predpokladať.

Vyskúšajte hák s normálnym pripojením, opätovným pripojením, úmyselným odpojením a vytiahnutým káblom. Zaznamenajte UUID, akciu a rozhranie, ktoré sa spustilo, bez zaznamenávania tajomstiev. Tento záznam je jediný spoľahlivý dôkaz, že hák bežal pre zamýšľané spojenie, a práve on robí ďalšiu zmenu bezpečnou.

Súvisiace články