Úrovně script-security v OpenVPN od 0 do 3 a co každá z nich otevírá
Každá úroveň script-security rozšiřuje, co profil smí spouštět: nejprve správcovské pomocníky, pak uživatelské skripty a nakonec hesla v prostředí. Přečtěte si direktivy.
Naimportujte profil do desktopového klienta a prvním selháním bývá řádek, který klient odmítá respektovat: háček skriptu, který nespustí, nebo hodnota script-security, kterou považuje za příliš benevolentní. Zvýšení čísla dialog odstraní. Zároveň však rozšiřuje, co smí tento profil na vašem počítači spouštět, což je zvláštní věc udělit jen proto, aby zmizelo varování. Sledujte import až k direktivě a rozhodnutí se zkonkrétní.
Od dialogu importu k direktivě
Profil je textový soubor s direktivami a klient je čte dřív, než existuje jakýkoli tunel. Direktiva jako up, down nebo tls-verify pojmenovává externí program, který má OpenVPN spustit v určený okamžik. Zda je OpenVPN ochoten ho spustit, je samostatné nastavení zvané script-security a profil ho obvykle také nastavuje.
Varování tedy není o kryptografii ani certifikátech. Je o konfiguračním souboru, který žádá klienta, aby na hostiteli něco spustil, a o klientovi, který ověřuje, zda to jeho současná úroveň oprávnění dovoluje.
V této fázi vypadají dvě různé poruchy stejně. Profil, který žádá úroveň, kterou klient nedá, skončí odmítnutím. Profil, který žádá úroveň, kterou klient dá, ale skript chybí, vyvolá poruchu za běhu, a obojí se v diskusích podpory směšuje. Jedno je otázka oprávnění a druhé otázka balení.
Co každá úroveň skutečně otevírá
Úroveň 0 zakazuje volání externích programů úplně, což je konzistentní u klienta, který si rozhraní nastaví sám bez pomoci, a nekonzistentní u toho, kdo volá operační systém. Úroveň 1, výchozí, povoluje vestavěné spustitelné soubory, které potřebuje konfigurace rozhraní a tras. Ani jedna z úrovní nespouští nic, co dodal uživatel.
| Level | What OpenVPN may execute | What it exposes |
|---|---|---|
| 0 | No external programs at all | Interface and route setup must not depend on helpers |
| 1 (default) | Built-in helpers such as ip, ifconfig, route or netsh | Privileged commands the platform already ships |
| 2 | Built-in helpers plus user-defined scripts | Whatever the named script does with the client's privileges |
| 3 | Everything above, plus passwords in environment variables | Credentials visible to child processes and their logs |
Úroveň 2 je zajímavá hranice, protože připouští uživatelsky definované skripty. Od toho bodu se oprávnění klienta vztahují na kód, který jste možná nikdy nečetli, volaný v okamžicích, které jste si nevybrali, v prostředí, které obsahuje údaje o připojení. Úroveň 3 jde dál a umožňuje předávat hesla přes proměnné prostředí, a proto ji příručka označuje za potenciálně nebezpečnou.
Žádné z těchto čísel není nastavení síly. Profil na úrovni 3 nemá lepší šifrování než ten na úrovni 1; má prostě větší plochu pro spouštění a tunel je stejný.
Rozhodněte, co si profil zaslouží
Ptejte se, k čemu skript je, dřív než na to, jakou úroveň potřebuje. Háček, který protlačí nastavení DNS nebo po připojení opraví trasu, je legitimní důvod něco spustit. Háček, který v dočasném adresáři volá neznámý binární soubor, je důvod zastavit.
Cesta ke skriptu je stejně důležitá jako skript. Relativní cesta se vyhodnocuje vůči adresáři, který klient používá, a zapisovatelný adresář mění jednorázový import v trvalé místo spouštění. Absolutní cesty v adresáři, který uživatel nemůže měnit, jsou tvar, který je třeba preferovat.
Skripty také dědí prostředí klienta, v němž žijí přihlašovací údaje a metadata připojení. Právě toto dědění dělá úroveň 3 nebezpečnou ve spojení se skriptem, který své prostředí zaznamenává, a proto si diagnostický výpis z klienta s povolenými skripty zaslouží druhý pohled, než ho vložíte do tiketu. Před sdílením prostředí vyčistěte.
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnZměňte jednu věc a pak sledujte i ukončení
Pokud profil skript opravdu potřebuje, změňte jen úroveň a jen u tohoto profilu. Spusťte klienta v popředí s podrobným výstupem, aby byly vidět vlastní chyby skriptu, místo aby je spolkl správce služeb.
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
Otestujte celý životní cyklus, ne jen připojení. Selhávající háček při odpojení nechá trasy ukazovat na mrtvý tunel, takže stroj vypadá připojený a nikam se nedostane. Před prohlášením změny za hotovou se jednou znovu připojte a jednou odpojte a po každém kroku zkontrolujte směrovací tabulku.
Uchovejte kopii původního profilu. Pokud klientská aplikace platformy neimplementuje stejný model skriptů, mazání direktiv do úspěšného importu může odstranit integraci DNS nebo tras, kterou tunel potřeboval, a výsledné připojení se dokonale autentizuje, ale nic nerozliší.
Rozhodnutí k zaznamenání je úzké: který skript, na které cestě, na které úrovni povolen, pro který profil. Vše ostatní v profilu zůstává beze změny, a to je věta, kterou recenzent může ověřit.