script-security-nivå i OpenVPN frå 0 til 3, og kva kvart nivå opnar
Kvart script-security-nivå utvidar kva ein profil kan køyre: først administrative hjelparar, så brukarskript, til slutt passord i miljøet. Les direktiva.
Importer ein profil i ein skrivebordsklient, og den første feilen er ofte ei linje klienten nektar å etterkoma: ein skriptkrok han ikkje vil køyre, eller ein script-security-verdi han meiner er for ettergjevande. Å heve talet får dialogen til å forsvinne. Det utvidar òg kva den profilen kan køyre på maskina di, som er ein merkeleg ting å gi berre for å bli kvitt ei åtvaring. Følg importen til direktivet, og avgjerda blir konkret.
Frå importdialogen til direktivet
Profilen er ei tekstfil med direktiv, og klienten les dei før nokon tunnel finst. Eit direktiv som up, down eller tls-verify namngir eit eksternt program som OpenVPN skal køyre på eit bestemt tidspunkt. Om OpenVPN er viljug til å køyre det, er ei eiga innstilling kalla script-security, og profilen set henne vanlegvis òg.
Åtvaringa handlar altså ikkje om kryptografi eller sertifikat. Ho handlar om ei konfigurasjonsfil som ber klienten køyre noko på verten, og om klienten som sjekkar om det noverande løyvenivået hans tillèt den førespurnaden.
To ulike feil ser like ut på dette stadiet. Ein profil som ber om eit nivå klienten ikkje vil gi, gir ei avvising. Ein profil som ber om eit nivå klienten gir, men der skriptet manglar, gir i staden ein feil under køyring, og dei to blir blanda saman i støttetrådar. Den eine er eit løyvespørsmål, den andre eit pakkingsspørsmål.
Kva kvart nivå faktisk opnar
Nivå 0 forbyr eksterne programkall heilt, noko som er samanhengande for ein klient som konfigurerer sitt eige grensesnitt utan hjelp, og usamanhengande for ein som kallar operativsystemet. Nivå 1, standarden, tillèt dei innebygde køyrbare filene som grensesnitt- og ruteoppsett treng. Ingen av nivåa køyrer noko brukaren har levert.
| 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 |
Nivå 2 er den interessante grensa, fordi det slepp inn brukardefinerte skript. Frå det punktet gjeld privilegia til klienten for kode du kanskje aldri har lese, kalla på tidspunkt du ikkje valde, i eit miljø som inneheld tilkoplingsdetaljar. Nivå 3 går lenger og tillèt at passord blir sende gjennom miljøvariablar, og derfor skildrar handboka det som potensielt utrygt.
Ingen av desse tala er ei styrkeinnstilling. Ein profil på nivå 3 har ikkje betre kryptering enn ein på nivå 1; han har berre ei større køyringsflate, og tunnelen er identisk.
Avgjer kva profilen fortener
Spør kva skriptet er til før du spør kva nivå det treng. Ein krok som skyv DNS-innstillingar eller reparerer ei rute etter tilkopling er ei legitim grunn til å køyre noko. Ein krok som kallar ei ukjend binærfil i ei mellombels mappe, er ei grunn til å stoppe.
Stien til skriptet tyder like mykje som skriptet. Ein relativ sti blir løyst mot den mappa klienten brukar, og ei skrivbar mappe gjer ein eingongsimport til ein permanent køyringsstad. Absolutte stiar i ei mappe brukaren ikkje kan endre, er forma som bør føretrekkjast.
Skript arvar òg miljøet til klienten, der påloggingsinformasjon og tilkoplingsmetadata bur. Nettopp den arven er det som gjer nivå 3 farleg saman med eit skript som loggar miljøet sitt, og det er grunnen til at ein diagnostisk utskrift frå ein klient med skript fortener eit ekstra blikk før han blir limd inn i ei sak. Fjern miljøet før du deler det.
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnEndre éin ting, og følg deretter òg med på nedkoplinga
Viss profilen verkeleg treng eit skript, endre berre nivået og berre for den profilen. Køyr klienten i forgrunnen med utførleg utdata slik at skriptet sine eigne feil er synlege i staden for å bli slukt av ein tenesteadministrator.
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
Test heile livssyklusen, ikkje berre tilkoplinga. Ein krok for nedkopling som feilar, lèt ruter peike på ein død tunnel, noko som gir ei maskin som ser tilkopla ut og ikkje når noko. Kopla til på nytt éin gong og kopla frå éin gong før du erklærer endringa ferdig, og kontroller rutetabellen etter kvar.
Ta vare på ein kopi av den opphavlege profilen. Viss ein plattformklient ikkje implementerer den same skriptmodellen, kan sletting av direktiv til importen lukkast fjerne DNS- eller ruteintegrasjonen som tunnelen trong, og den resulterande tilkoplinga vil autentisere perfekt medan ho ikkje løyser noko.
Avgjerda som skal registrerast, er smal: kva skript, på kva sti, gitt på kva nivå, for kva profil. Alt anna i profilen er uendra, og det er ei setning ein gjennomlesar kan kontrollere.