Nivelurile script-security din OpenVPN, de la 0 la 3, și ce deschide fiecare
Fiecare nivel script-security lărgește ce poate executa un profil: mai întâi ajutoare administrative, apoi scripturi de utilizator, apoi parole în mediu. Citiți directivele.
Importați un profil într-un client desktop și prima eroare este adesea o linie pe care clientul refuză să o respecte: un cârlig de script pe care nu îl va rula, sau o valoare script-security pe care o consideră prea permisivă. Creșterea numărului face dialogul să dispară. Dar lărgește și ce are voie acel profil să execute pe mașina dumneavoastră, ceea ce este un lucru ciudat de acordat doar pentru a scăpa de un avertisment. Urmați importul până la directivă și decizia devine concretă.
De la dialogul de import la directivă
Profilul este un fișier text cu directive, iar clientul le citește înainte de a exista vreun tunel. O directivă precum up, down sau tls-verify numește un program extern pe care OpenVPN trebuie să îl ruleze la un moment definit. Dacă OpenVPN este dispus să îl ruleze este o setare separată numită script-security, iar profilul o stabilește de obicei și pe aceasta.
Avertismentul nu este deci despre criptografie sau certificate. Este despre un fișier de configurare care cere clientului să execute ceva pe gazdă, și despre clientul care verifică dacă nivelul său actual de permisiuni permite acea cerere.
În această etapă două eșecuri diferite arată la fel. Un profil care cere un nivel pe care clientul nu îl va acorda produce un refuz. Un profil care cere un nivel pe care clientul îl acordă dar lipsește scriptul produce în schimb o eroare la rulare, iar cele două sunt confundate în firele de suport. Unul este o chestiune de permisiuni, celălalt de ambalare.
Ce deschide de fapt fiecare nivel
Nivelul 0 interzice complet apelurile la programe externe, ceea ce este coerent pentru un client care își configurează singur interfața fără ajutor și incoerent pentru unul care apelează sistemul de operare. Nivelul 1, cel implicit, permite fișierele executabile încorporate de care au nevoie configurarea interfeței și a rutelor. Niciunul dintre niveluri nu rulează ceva furnizat de utilizator.
| 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 |
Nivelul 2 este granița interesantă, pentru că admite scripturi definite de utilizator. Din acel punct privilegiile clientului se aplică unui cod pe care poate nu l-ați citit niciodată, invocat în momente pe care nu le-ați ales, într-un mediu care conține detalii ale conexiunii. Nivelul 3 merge mai departe și permite transmiterea parolelor prin variabile de mediu, motiv pentru care manualul îl descrie ca potențial nesigur.
Niciunul dintre aceste numere nu este o setare de putere. Un profil la nivelul 3 nu are criptare mai bună decât unul la nivelul 1; are pur și simplu o suprafață de execuție mai mare, iar tunelul este identic.
Decideți ce merită profilul
Întrebați la ce folosește scriptul înainte de a întreba de ce nivel are nevoie. Un cârlig care împinge setările DNS sau repară o rută după conectare este un motiv legitim de a rula ceva. Un cârlig care apelează un binar necunoscut într-un director temporar este un motiv de a vă opri.
Calea scriptului contează la fel de mult ca scriptul. O cale relativă este rezolvată față de directorul pe care îl folosește clientul, iar un director în care se poate scrie transformă un import unic într-un loc de execuție permanent. Căile absolute într-un director pe care utilizatorul nu îl poate modifica sunt forma de preferat.
Scripturile moștenesc și mediul clientului, unde trăiesc acreditările și metadatele conexiunii. Tocmai această moștenire face nivelul 3 periculos împreună cu un script care își înregistrează mediul, și de aceea o descărcare de diagnostic de la un client cu scripturi merită o a doua privire înainte de a fi lipită într-un tichet. Eliminați mediul înainte de a-l partaja.
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnSchimbați un singur lucru, apoi urmăriți și demontarea
Dacă profilul are într-adevăr nevoie de un script, schimbați doar nivelul și doar pentru acel profil. Rulați clientul în prim-plan cu ieșire detaliată pentru ca erorile scriptului însuși să fie vizibile, nu înghițite de un manager de servicii.
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
Testați întregul ciclu de viață, nu doar conectarea. Un cârlig de deconectare care eșuează lasă rute îndreptate spre un tunel mort, ceea ce produce o mașină care pare conectată și nu ajunge nicăieri. Reconectați o dată și deconectați o dată înainte de a declara schimbarea terminată, și verificați tabela de rutare după fiecare.
Păstrați o copie a profilului original. Dacă un client de platformă nu implementează același model de scripturi, ștergerea directivelor până când importul reușește poate elimina integrarea DNS sau de rute de care tunelul avea nevoie, iar conexiunea rezultată se va autentifica perfect fără a rezolva nimic.
Decizia de consemnat este îngustă: ce script, pe ce cale, acordat la ce nivel, pentru ce profil. Tot restul profilului rămâne neschimbat, și aceasta este o propoziție pe care un recenzor o poate verifica.