OpenVPN कुञ्जी बनाउन तपाईंलाई अस्थायी फाइल आवश्यक पर्दैन
कुञ्जीको सामग्री स्मृतिमा राख्नुले फाइलको जीवनचक्र टार्छ, चुहावट होइन। आउटपुट र त्रुटिका प्रवाह अलग राख्नुहोस्, र त्यसपछि कुञ्जीलाई गोप्य मान्नुहोस्।
कुञ्जी बनाउन अस्थायी फाइल आवश्यक पर्दैन, र त्यसलाई छोड्नुले अधिकांश मार्गदर्शिकाले संकेत गरेभन्दा कम सुधार्छ। यसले हटाउने कुरा फाइलको जीवनचक्र र त्यसको वरिपरिको सफाइ दौड हो। यसले अछुतो छोड्ने कुरा पछि गोप्यता चुहाउने हरेक अवसर हो। यी स्क्रिप्टहरूमा शुद्धताको समस्या सामान्यतया अन्तै हुन्छ, किनकि निदान र कुञ्जीको सामग्री फरक फरक प्रवाहमा यात्रा गर्छन्।
फाइल कहिल्यै तपाईंले सोचेको त्यो जोखिम थिएन
अस्थायी फाइल ठोस जोखिम हो जब त्यो सबैले पढ्न सक्ने हुन्छ, जब त्यो क्र्यासबाट बाँच्छ, वा जब अपवादपछि सफाइको चरण छोडिन्छ। यी वास्तविक हुन्, र यिनलाई सुधार्न लायक छ। ती स्थानीय, देखिने र परीक्षण गर्न सजिलो पनि छन्। परिवर्तन केवल देखावटी थियो भन्ने निष्कर्षमा पुग्नुअघि आफ्नै स्क्रिप्टमा प्रत्येकको नाम लिनुहोस्।
अझ शान्त जोखिमहरू तल बस्छन्: डिबगिङका क्रममा छापिएको कुञ्जी, सम्पूर्ण नतिजा वस्तुलाई क्रमबद्ध गर्ने अपवाद, कोर डम्प लेख्ने क्र्यास ह्यान्डलर, पहिले फाइलको मार्ग र त्यसपछि सामग्री प्राप्त गर्ने लग सङ्ग्राहक। अस्थायी फाइलबाट बच्नुले तीमध्ये कुनैको लागि पनि केही गर्दैन, र विपरीत विश्वास गर्नु नै सद्भावनापूर्ण पुनर्लेखनले गोप्यतालाई पहिलेभन्दा बढी खुला छोड्ने बाटो हो। परिवर्तनलाई क्रममा एउटा सुधार मान्नुहोस्, समाधान होइन।
फाइलको नाम नदिइएपछि ग्राहकले के लेख्छ
ग्राहकका वर्तमान संस्करणहरूले आउटपुट मार्ग बिना कुञ्जी आदेश दिइएपछि बनाइएको कुञ्जी मानक आउटपुटमा पठाउँछन्। यही अभिलेखित व्यवहारले स्मृति-आधारित दृष्टिकोणलाई सम्भव बनाउँछ, र यसले उपकरणलाई यन्त्रको मार्गतर्फ निर्देश गर्ने पुरानो चलाखीको आवश्यकता हटाउँछ।
import subprocess
proc = subprocess.run(
["openvpn", "--genkey", "tls-crypt"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True,
)
key_material = proc.stdout
आदेशलाई सूचीको रूपमा दिनुहोस्। यहाँ कुनै शेल विस्तार आवश्यक छैन, र शेल सक्षम गर्नाले तर्कको सीमालाई तपाईंले नियन्त्रण नगर्ने उद्धरण चिन्हहरूमा निर्भर बनाउँथ्यो। स्क्रिप्ट तपाईंले अपेक्षा गरेभन्दा फरक खोज मार्गसँग चल्न सक्छ भने अभिप्रेत कार्यान्वयनयोग्य फाइल निरपेक्ष मार्गबाट प्रयोग गर्नुहोस्।
फिर्ता कोड जाँचले असफल आह्वानपछि सफलताको मार्ग अगाडि बढ्नबाट रोक्छ। त्यो बिना, खाली बाइट शृंखला अगाडि बग्न सक्छ र धेरै पछि मात्र असफल हुन्छ, त्यो बिन्दुमा जहाँ कुञ्जी प्रयोग हुन्छ र त्रुटि सन्देशले अब निर्माणको उल्लेख पनि गर्दैन।
दुई प्रवाह, दुई अर्थ
मानक आउटपुटले कुञ्जी बोक्छ। मानक त्रुटिले उपकरणले तपाईंलाई भन्न चाहेको सबै बोक्छ, कन्फिगरेसन, संस्करण र कुञ्जीको प्रकारबारे चेतावनीहरू सहित। दुवैलाई एउटै बफरमा मोड्नु नै त्यो गल्ती हो जसले विश्वसनीय देखिने कुञ्जी उत्पादन गर्छ जसको बीचमा एउटा वाक्य सिलाइएको हुन्छ।
असफलताको मार्ग पनि अलग राख्नुहोस्। आह्वान असफल हुँदा, असफल भएको आदेश र निकास स्थिति रिपोर्ट गर्नुहोस्, र त्यसपछि मानक त्रुटिको कुनै भाग देखाउनु सुरक्षित छ कि छैन भन्ने सचेत रूपमा निर्णय गर्नुहोस्। सम्पूर्ण नतिजा वस्तुलाई लगमा पोख्नु सामान्य छोटो बाटो हो, र यसले कुञ्जीलाई साथै लैजान सक्छ।
बाइनरीका लागि सुरक्षित पठन महत्त्वपूर्ण हुन्छ यदि तपाईंले पछि सामग्रीको ह्यास गर्नुहुन्छ वा तुलना गर्नुहुन्छ। अप्रत्याशित इन्कोडिङसहितको पाठ मोडले कहिल्यै पाठ हुनका लागि नभएका बाइटहरू बदल्न सक्छ, र बदलिएको कुञ्जी हातमिलन असफल नभएसम्म गलत कुञ्जीबाट छुट्याउन सकिँदैन।
यदि तपाईंले यसलाई जसरी भए पनि सुरक्षित राख्नुहुन्छ भने, सचेत रूपमा गर्नुहोस्
अधिकांश परिनियोजनलाई अन्ततः कुञ्जी डिस्कमा, गेटवेमा वा गोप्य भण्डारमा चाहिन्छ। यसलाई एकपटक लेख्नुहोस्, निर्माणदेखि नै प्रतिबन्धित अनुमतिहरूसहित, पछिको chmod होइन, र लेखनलाई परमाणु बनाउनुहोस् ताकि आंशिक फाइल कहिल्यै सेवाले सुरुमा पढ्ने फाइल नबनोस्। एउटै निर्देशिकाको मार्गबाट पुनर्नामकरण सामान्यतया त्यसका लागि पर्याप्त हुन्छ। असफलताको शाखामा स्टेजिङ मार्ग हटाउनुहोस्, किनकि असफल लेखन नै मानिसहरूले बिर्सने प्रतिलिपि हो।
फाइल बनाउँदा त्यसको मोड सेट गर्नुहोस्, र निर्देशिकाको मोड पनि प्रतिबन्धित राख्नुहोस्। ब्याकअप कामले नसोची सफा गर्ने स्थानमुनिको कुनै पनि मार्गबाट बच्नुहोस्, किनकि रातको ब्याकअपमा रहेको गोप्यता त्यो ब्याकअपको हरेक प्रतिलिपिमा गोप्यता हो। उही तर्क अन्य सेवाहरूले पढ्न सक्ने साझा भोल्युममा पनि लागू हुन्छ।
साझा कुञ्जी पहिचान होइन
यो सामग्री उत्पादन गर्नुले प्रमाणपत्र जारी गर्दैन, ग्राहक दर्ता गर्दैन र को जोडिँदै छ भन्ने स्थापित गर्दैन। साझा कुञ्जीले पहिले नै एकअर्कालाई विश्वास गर्ने पक्षहरूबीचको च्यानलको रक्षा गर्छ; पहिचान अझै प्रमाणपत्रबाट र त्यसको अगाडि बस्ने कुनै पनि प्रमाणीकरणबाट आउँछ।
कुञ्जीका प्रकारहरू पनि एकअर्कासँग साट्न सकिँदैन। एउटा सुविधाका लागि सममित कुञ्जी अर्काका लागि तयार विकल्प होइन, र नयाँ संस्करणहरूले प्रत्येक छेउमा फरक फाइलहरूसहित आफ्नै प्रकारहरू थप्छन्। तपाईंको कन्फिगरेसनले साँच्चै नाम लिने प्रकार उत्पादन गर्नुहोस्, अनि त्यसलाई त्यो प्रकारले परिभाषित गर्ने भूमिकामा प्रयोग गर्नुहोस्।
फाइलको आकार हेर्नुको सट्टा वास्तविक जडानले नतिजा परीक्षण गर्नुहोस्। हातमिलन पूरा भयो र लगहरूले कुनै कुञ्जी चेतावनी देखाएनन् भने निर्माणको मार्ग ठीक छ; कुञ्जी मिलाइएको प्रवाहले काटिएको भए, जडानले स्क्रिप्टतर्फ होइन, सामुको पक्षतर्फ सङ्केत गर्ने तरिकाले असफल हुन्थ्यो।