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 मात्र। जुन चरणमा टनेल टुट्छ त्यसले सीमा देखाउँछ, र कहिल्यै कारण नभएको जेल पुनः बनाउनबाट बच्नुहुन्छ।
यो फेरि रुट गर्न थालेपछि बढी विस्तृतसँग एउटा ग्राहक सत्र चलाउनुहोस् र आदेश वा असफल अनुमति नाम दिने पंक्ति पढ्नुहोस्। त्यो पंक्ति ग्राहकले अन्तमा रिपोर्ट गर्ने टाइमआउटभन्दा बढी मूल्यवान छ।