OpenVPN के script-security स्तर 0 से 3, और हर एक क्या खोलता है
हर script-security स्तर यह विस्तृत करता है कि कोई प्रोफ़ाइल क्या निष्पादित कर सकती है: पहले प्रशासनिक सहायक, फिर उपयोगकर्ता स्क्रिप्ट, फिर पर्यावरण में पासवर्ड। निर्देश पढ़ें।
किसी डेस्कटॉप क्लाइंट में प्रोफ़ाइल आयात करें और पहली विफलता अक्सर वह पंक्ति होती है जिसे क्लाइंट मानने से इनकार करता है: एक स्क्रिप्ट हुक जिसे वह नहीं चलाएगा, या कोई script-security मान जिसे वह बहुत अधिक अनुमतिप्रद मानता है। संख्या बढ़ाने से संवाद बंद हो जाता है। लेकिन यह उस प्रोफ़ाइल को आपकी मशीन पर जो निष्पादित करने की अनुमति देता है उसे भी बढ़ा देता है, जो केवल चेतावनी हटाने के लिए देना विचित्र बात है। आयात को निर्देश तक पीछे ले जाएँ और निर्णय ठोस हो जाता है।
आयात संवाद से निर्देश तक
प्रोफ़ाइल निर्देशों वाली एक टेक्स्ट फ़ाइल है, और कोई सुरंग बनने से पहले क्लाइंट उन्हें पढ़ता है। up, down या tls-verify जैसा निर्देश किसी बाहरी प्रोग्राम का नाम देता है जिसे OpenVPN किसी निर्धारित क्षण पर चलाएगा। OpenVPN उसे चलाने को तैयार है या नहीं, यह script-security नामक अलग सेटिंग है, और प्रोफ़ाइल सामान्यतः उसे भी तय करती है।
तो चेतावनी कूटलेखन या प्रमाणपत्रों के बारे में नहीं है। यह एक कॉन्फ़िगरेशन फ़ाइल के बारे में है जो क्लाइंट से मेज़बान पर कुछ निष्पादित करने को कहती है, और क्लाइंट के बारे में जो जाँचता है कि उसका वर्तमान अनुमति स्तर उस अनुरोध की अनुमति देता है या नहीं।
इस चरण में दो अलग विफलताएँ एक जैसी दिखती हैं। जो प्रोफ़ाइल ऐसा स्तर माँगती है जो क्लाइंट नहीं देगा, वह अस्वीकृति उत्पन्न करती है। जो प्रोफ़ाइल ऐसा स्तर माँगती है जो क्लाइंट देता है पर स्क्रिप्ट गायब है, वह इसके बजाय चलाने के समय विफलता उत्पन्न करती है, और सहायता थ्रेड में दोनों मिला दिए जाते हैं। एक अनुमति का प्रश्न है और दूसरा पैकेजिंग का प्रश्न।
हर स्तर वास्तव में क्या खोलता है
स्तर 0 बाहरी प्रोग्राम कॉल को पूरी तरह प्रतिबंधित करता है, जो ऐसे क्लाइंट के लिए सुसंगत है जो बिना सहायता के अपना इंटरफ़ेस स्वयं कॉन्फ़िगर करता है और उसके लिए असंगत है जो ऑपरेटिंग सिस्टम को पुकारता है। स्तर 1, डिफ़ॉल्ट, उन अंतर्निहित निष्पादन योग्य फ़ाइलों की अनुमति देता है जिनकी इंटरफ़ेस और मार्ग कॉन्फ़िगरेशन को आवश्यकता होती है। दोनों में से कोई स्तर उपयोगकर्ता द्वारा दी गई किसी चीज़ को नहीं चलाता।
| 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 |
स्तर 2 दिलचस्प सीमा है, क्योंकि वह उपयोगकर्ता-परिभाषित स्क्रिप्ट स्वीकार करता है। उस बिंदु से क्लाइंट के विशेषाधिकार ऐसे कोड पर लागू होते हैं जिसे आपने शायद कभी नहीं पढ़ा, जिसे ऐसे क्षणों में बुलाया जाता है जिन्हें आपने नहीं चुना, ऐसे पर्यावरण के साथ जिसमें कनेक्शन का विवरण होता है। स्तर 3 आगे जाता है और पर्यावरण चरों के माध्यम से पासवर्ड भेजने की अनुमति देता है, इसलिए मैनुअल इसे संभावित रूप से असुरक्षित बताता है।
इनमें से कोई भी संख्या शक्ति की सेटिंग नहीं है। स्तर 3 पर प्रोफ़ाइल का एन्क्रिप्शन स्तर 1 वाले से बेहतर नहीं है; इसमें बस बड़ी निष्पादन सतह है, और सुरंग समान है।
तय करें कि प्रोफ़ाइल किस योग्य है
स्क्रिप्ट किस काम के लिए है यह पूछें, इससे पहले कि पूछें कि उसे कौन सा स्तर चाहिए। DNS सेटिंग्स को धकेलने या कनेक्ट के बाद मार्ग ठीक करने वाला हुक कुछ चलाने का वैध कारण है। अस्थायी फ़ोल्डर में किसी अपरिचित बाइनरी को बुलाने वाला हुक रुकने का कारण है।
स्क्रिप्ट का पथ स्क्रिप्ट जितना ही महत्वपूर्ण है। सापेक्ष पथ उस फ़ोल्डर के सापेक्ष हल होता है जो क्लाइंट उपयोग करता है, और लिखने योग्य फ़ोल्डर एक-बार के आयात को स्थायी निष्पादन स्लॉट बना देता है। ऐसे फ़ोल्डर में निरपेक्ष पथ जिसे उपयोगकर्ता बदल नहीं सकता, वही रूप है जिसे पसंद किया जाना चाहिए।
स्क्रिप्ट क्लाइंट का पर्यावरण भी विरासत में लेती हैं, जहाँ क्रेडेंशियल और कनेक्शन मेटाडेटा रहते हैं। यही विरासत स्तर 3 को उस स्क्रिप्ट के साथ खतरनाक बनाती है जो अपना पर्यावरण लॉग करती है, और इसीलिए स्क्रिप्ट-सक्षम क्लाइंट से लिया गया निदान डंप टिकट में चिपकाने से पहले दूसरी नज़र का हक़दार है। साझा करने से पहले पर्यावरण हटा दें।
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnएक चीज़ बदलें, फिर टूटने पर भी नज़र रखें
अगर प्रोफ़ाइल को सचमुच स्क्रिप्ट चाहिए, तो केवल स्तर बदलें और केवल उसी प्रोफ़ाइल के लिए। क्लाइंट को अग्रभूमि में विस्तृत आउटपुट के साथ चलाएँ ताकि स्क्रिप्ट की अपनी त्रुटियाँ दिखें, सेवा प्रबंधक उन्हें निगल न ले।
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
पूरा जीवनचक्र परखें, केवल कनेक्शन नहीं। विफल डाउन हुक मार्गों को मृत सुरंग की ओर छोड़ देता है, जिससे ऐसी मशीन बनती है जो जुड़ी दिखती है और कहीं नहीं पहुँचती। बदलाव को पूर्ण घोषित करने से पहले एक बार फिर कनेक्ट करें और एक बार डिस्कनेक्ट करें, और हर बार के बाद रूटिंग तालिका जाँचें।
मूल प्रोफ़ाइल की प्रति रखें। अगर कोई प्लेटफ़ॉर्म क्लाइंट वही स्क्रिप्टिंग मॉडल लागू नहीं करता, तो आयात सफल होने तक निर्देश हटाना उस DNS या मार्ग एकीकरण को हटा सकता है जिसकी सुरंग को आवश्यकता थी, और परिणामी कनेक्शन पूरी तरह प्रमाणित होगा जबकि कुछ भी हल नहीं करेगा।
दर्ज करने योग्य निर्णय संकीर्ण है: कौन सी स्क्रिप्ट, किस पथ पर, किस स्तर पर अनुमत, किस प्रोफ़ाइल के लिए। प्रोफ़ाइल में बाकी सब अपरिवर्तित रहता है, और यह ऐसा वाक्य है जिसे समीक्षक जाँच सकता है।