क्या chroot छोड़ें या iproute2 को जेल में कॉपी करें?
अधूरी जेल बूट के समय नहीं, शुरू होने के बाद विफल होती है। सख़्ती ढीली करने और बाइनरी फ़ाइलों तथा लाइब्रेरी को नई रूट में कॉपी करने के बीच चुनें।
सेवा शुरू होती है, क्लाइंट जुड़ता है, और सर्वर की ओर कभी कोई रूट नहीं दिखता। या डेमॉन शुरू होने से इनकार करता है और ऐसी कमांड बताता है जिसे वह चला नहीं सका। दोनों नतीजे उन्हीं तीन पंक्तियों का पालन करते हैं, जो आम तौर पर सख़्ती की गाइड से एक साथ कॉपी की जाती हैं: गैर-विशेषाधिकार वाले खाते पर जाना, समूह छोड़ना और फ़ाइल सिस्टम की रूट बदलना। तीनों में से केवल एक फ़ाइलें छिपाती है, और उनमें से केवल एक रूटिंग टेबल बदलने का अधिकार हटाती है। उन्हें अलग करना ही यह सीखने का तरीका है कि आपको वास्तव में कौन सी पंक्ति चाहिए।
जेल क्या हटाती है जो डेमॉन को अब भी चाहिए
रूट का बदलाव शुरू होने के बाद होता है, इसलिए डेमॉन वह सब रखता है जो उसने पहले ही खोल रखा है और वह सब खो देता है जो वह बाद में खोलता। कनेक्शन के उस बिंदु के बाद चलने वाले हर सहायक को नई रूट के अंदर मौजूद होना चाहिए, उन साझा लाइब्रेरी के साथ जो वह लोड करता है। कॉन्फ़िगरेशन फ़ाइल और प्रमाणपत्र से बनी जेल में दोनों में से कोई नहीं होता।
गैर-विशेषाधिकार वाले खाते पर जाना एक अलग प्रतिबंध है। root छोड़ चुकी प्रक्रिया रूट बदल नहीं पाए या इंटरफ़ेस ऊपर न ला पाए, भले ही बाइनरी ठीक वहीं हो, इसलिए दोनों विफलताओं का अलग-अलग निदान ज़रूरी है।
तीन शर्तें तय करती हैं कि आपको कौन सी मरम्मत चाहिए
पहली शर्त यह है कि आपका बिल्ड रूट कैसे इंस्टॉल करता है। नए OpenVPN संस्करण इंटरफ़ेस और रूटिंग टेबल को प्रक्रिया के अंदर कॉन्फ़िगर करते हैं, जबकि पुराने पैकेज और मनमुताबिक़ सेटअप बाहरी औज़ारों या up और down स्क्रिप्ट पर निर्भर करते हैं। अगर लॉग किसी कमांड का नाम लेता है तो कोई बाहरी औज़ार शामिल है और जेल उसे छिपा रही है। अगर लॉग इसके बजाय अनुमति की त्रुटि दिखाता है तो समस्या खाते में है।
दूसरी रखरखाव है। कॉपी की गई बाइनरी वाली जेल को हर बार ताज़ा करना पड़ता है जब उन्हें देने वाला पैकेज अपग्रेड हो, वरना पहला अपग्रेड पीछे टूटा हुआ टनल छोड़ देता है। तीसरी यह है कि क्या कोई ख़ास नियंत्रण वास्तव में chroot मांगता है; अगर माँग असल में विशेषाधिकारों के अलगाव के बारे में है तो खाता बदलना अकेला ही काफ़ी हो सकता है।
| Signal in the log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create the node inside, or open it before the root change |
काम करने वाली जेल में क्या होना चाहिए
कमांड चलाने वाली जेल को बाइनरी, हर वह लाइब्रेरी जिससे वह लिंक होती है, और हर वह डिवाइस नोड चाहिए जिसे डेमॉन देर से खोलता है। हिस्से कॉपी करें और VPN के बिना उन्हें जाँचें:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
पहली कमांड निर्भरताएँ गिनाती है, और यही वह है जिसे लोग छोड़ देते हैं। कॉपी की गई बाइनरी जो लाइब्रेरी नहीं ढूँढ पाती, गायब बाइनरी से अलग संदेश के साथ विफल होती है, और दोनों क्लाइंट की ओर से पढ़ने पर OpenVPN की ख़राबी जैसी लगती हैं। जेल के अंदर कमांड हाथ से चलाना सेवा को फिर से शुरू किए बिना ख़राबी दोहराता है।
कॉन्फ़िगरेशन, प्रमाणपत्र और कोई भी CRL भी जेल में कॉपी करें, क्योंकि जिस फ़ाइल को डेमॉन शुरू होने के बाद दोबारा पढ़ने की उम्मीद करता है वह रूट बदलने के बाद नहीं मिलेगी। जो कॉपी किया उसे लिख लें, क्योंकि नेटवर्क पैकेज का अगला अपग्रेड मूल फ़ाइलों को बदल देता है और जेल को पुरानी कॉपी पर छोड़ देता है।
इसके बजाय सख़्ती घटाएँ
अगर जेल सिर्फ़ इसलिए मौजूद है कि किसी गाइड ने ऐसा कहा था, तो खाते के प्रतिबंध रखते हुए उस एक पंक्ति को हटाना बचाव योग्य नतीजा है। डेमॉन अपना फ़ाइल सिस्टम दृश्य रखता है और समस्या खो देता है, और विशेषाधिकारों की कमी लंबे समय तक चलने वाली प्रक्रिया से root फिर भी हटा देती है।
लिखें कि क्या बचता है, और क्यों। जिस कॉन्फ़िगरेशन ने चुपचाप बिना नोट के कोई नियंत्रण खो दिया, सख़्ती उसी तरह भटकती है, और अगला ऑडिट पूछेगा कि पंक्ति क्यों गायब हुई।
चुनने से पहले तीनों पंक्तियों को बाँटें
कॉन्फ़िगरेशन कॉपी करें, तीनों निर्देश बंद करें और पुष्टि करें कि क्लाइंट जुड़ता है और अपेक्षित रूट दिखते हैं। फिर केवल खाते की पंक्तियाँ फिर से चालू करें, और फिर chroot अकेला। जिस चरण पर टनल टूटता है वह सीमा बताता है، और आप ऐसी जेल दोबारा बनाने से बचते हैं जो कभी कारण नहीं थी।
जब यह फिर रूट करे, तो अधिक विस्तार के साथ एक क्लाइंट सत्र चलाएँ और वह पंक्ति पढ़ें जो कमांड या विफल अनुमति का नाम लेती है। वह पंक्ति उस टाइमआउट से अधिक क़ीमती है जो क्लाइंट अंत में बताता है।