लिनक्स 'init = / bin / bash' की अनुमति क्यों देता है?


51

मुझे हाल ही में पता चला है कि अगर मैं बूट करने से पहले GRUB को संपादित करता हूं और मैं rw init=/bin/bashएक मूल शेल के साथ समाप्त करता हूं।

एक ऐसी स्थिति में होने के नाते कि मैं हर चीज को समझना चाहता हूं जो मैं जानना चाहता हूं कि ऐसा क्यों होता है। मेरा मतलब है कि यह एक बग है? क्या यह एक विशेषता है? क्या यह चीजों को ठीक करने में मदद करने के लिए है क्योंकि यह केवल तभी काम करता है जब आपके पास कंप्यूटर तक भौतिक पहुंच हो?

क्या यह GRUB या वास्तविक कर्नेल द्वारा प्रदान किया गया है?


12
यदि आप इसे "ठीक" करना चाहते हैं, तो GRUB और अपने BIOS को पासवर्ड से लॉक करें और अपनी हार्ड डिस्क को पहले बूट क्रम में रखें। अगर किसी और के पास भौतिक पहुँच है और वह (गैर-एन्क्रिप्टेड) ​​हार्ड डिस्क को किसी अन्य कंप्यूटर में डाल सकता है, तो आप किसी भी तरह से हार गए हैं
जोफेल

जवाबों:


44

यह एक सुविधा है, और सिस्टम मेंटेनेंस के लिए उपयोग किया जाता है: यह एक सिसडमिन को सिस्टम को गड़बड़ करने वाली आरंभिक फ़ाइलों से पुनर्प्राप्त करने या एक भूल गए पासवर्ड को बदलने की अनुमति देता है।

Red Hat मेलिंग सूची में यह पोस्ट कुछ बातें समझाती है:

यूनिक्स जैसी प्रणालियों में, init को चलाने की पहली प्रक्रिया है, और सभी प्रक्रियाओं के अंतिम पूर्वज कभी भी चलते हैं। यह सभी init स्क्रिप्ट को चलाने के लिए जिम्मेदार है।

आप लिनक्स कर्नेल को सिस्टम इनिट के बजाय / बिन / बैश को इनिट के रूप में चलाने के लिए कह रहे हैं। [...]

इस प्रकार, आप कुछ भी शोषण नहीं कर रहे हैं, आप केवल एक मानक कर्नेल सुविधा का उपयोग कर रहे हैं।

इसके अलावा, जैसा कि एक टिप्पणी में उल्लेख किया गया है, rwध्वज से अलग है init=, यह सिस्टम को रूट फाइल सिस्टम को पढ़ने-लिखने के रूप में माउंट करने के लिए कहता है (इसलिए आप गलत फाइल को संपादित कर सकते हैं या पासवर्ड बदल सकते हैं)।


2
इसके अलावा, rwपूरी तरह से अलग है init=। पूर्व बस कर्नेल को रूट फाइलसिस्टम को पढ़ने-लिखने के लिए बताता है।
एलेक्सिओस

19

आपके सिस्टम में रनिंग और डिबगिंग (init पैरामीटर की तरह) के लिए तंत्र हैं और अवांछित उपयोगकर्ताओं को उनका लाभ लेने से रोकने के लिए इसमें सुरक्षा तंत्र हैं। ये विशेषताएं हैं, बग नहीं।

बूटलोडर OS शुरू करने के लिए जिम्मेदार है। OS सुरक्षा स्पष्ट रूप से उस बिंदु पर लागू नहीं होती है। आप बस एक अलग कर्नेल, initrd, रूट fs लोड कर सकते हैं या विभिन्न विकल्प सेट कर सकते हैं (जैसे init पाथ)। यदि आप उपयोगकर्ताओं को ऐसा करने से रोकना चाहते हैं, तो इसे बूटलोडर पर किया जाना चाहिए।

आपका सिस्टम (शायद एक पीसी, इसलिए BIOS) बूटलोडर को लोड करता है और इसलिए, जाहिर है, बूटलोडर सुरक्षा उस पर लागू नहीं होती है। यदि आप उपयोगकर्ताओं को USB या इस तरह से बायोस बूट बनाने से रोकना चाहते हैं, तो आपको उस स्तर पर करने की आवश्यकता है।

आपका सिस्टम कहीं डेस्क पर हो सकता है। यदि आप उपयोगकर्ताओं को कॉप्यूटर को खोलने से रोकना चाहते हैं और स्वयं के लिए एचडीडी को स्विच करना चाहते हैं या ड्राइव को अपनी मशीनों में माउंट करने के लिए हटा रहे हैं, तो आपको इसे भौतिक स्तर पर करने की आवश्यकता है। और यह उन्हें पूरे डेस्क को उठाने और उनकी भगदड़ वैन में दूर जाने से नहीं रोकेगा ...

जिस तरह से सुरक्षा है। हाथी सभी तरह से नीचे।


अच्छा सारांश। वैन के खिलाफ एक संभावित जवाब के रूप में, उस के लिए hdd एन्क्रिप्शन जोड़ना चाह सकते हैं।
20

11

जब कंप्यूटर शुरू होता है, तो यह "इनिट" नामक एक कार्यक्रम चलाता है, जो आमतौर पर /bin/initया में पाया जाता है /sbin/init। यह कार्यक्रम सभी सिस्टम स्टार्टअप और एक उपयोगी वातावरण बनाने के लिए जिम्मेदार है।

निर्दिष्ट करना init=/bin/bashकर्नेल को /bin/bashबजाय चलाने के लिए कहता है (जो एक शेल है)। निर्दिष्ट करता rwहै कि कर्नेल को केवल-पढ़ने के लिए मोड के बजाय हार्ड डिस्क के साथ रीड-राइट मोड में बूट करें। परंपरागत रूप से कर्नेल डिस्क के साथ रीड-ओनली मोड में शुरू होता है और एक प्रक्रिया बाद में डिस्क पर रीड-राइट पर जाने से पहले डिस्क की अखंडता की जांच करती है।



1

यह कर्नेल की एक विशेषता है: यह इसके "कॉलर", यानी बूट लोडर, महान लचीलेपन की अनुमति देता है। ग्रब आपको बूटिंग के दौरान इस लचीलेपन का उपयोग करने के साधन प्रदान करता है, लेकिन यह आपको इस तरह की छेड़छाड़ को प्रतिबंधित करने का साधन भी प्रदान करता है । यह उन मामलों में विशेष रूप से समझ में आता है जहां अनधिकृत उपयोगकर्ता बूट प्रक्रिया को पकड़ सकते हैं, लेकिन अन्यथा हार्ड ड्राइव तक पहुंच से वंचित हैं।


1

init=किसी भी निष्पादन योग्य ले जा सकते हैं

init=शेल स्क्रिप्ट सहित कोई भी निष्पादन योग्य ले सकते हैं ।

उदाहरण के लिए मैं यह प्रदर्शित करता हूं कि एक मनमाना न्यूनतम सी कैसे बनाया जाए init: संकलित कैसे करें एक कस्टम लिनक्स डिस्ट्रो जो सिर्फ एक प्रोग्राम चलाता है और कुछ नहीं?

तो यह सभी चीजों के लिए क्यों स्वीकार नहीं किया जाएगा /bin/bash, जो सिर्फ एक नियमित निष्पादन योग्य है, और वास्तव में उपयोगी हो सकता है? :-)

इसके बाद, आपको यह समझने की कोशिश करनी चाहिए कि आपके रेगुलर initया सिस्टमबॉक्स जैसे ट्रेड-ऑफ क्या होंगे?

मूल रूप से, एक कच्चे के साथ /bin/bash, आप:

बिजीबॉक्स इनिट और अन्य समान इनिट्स पर जॉब कंट्रोल को फिर से शुरू किया जा सकता -है inittab:

tty3::respawn:-/bin/sh

inittabयदि आप Ctrl + D करते हैं तो अधिक सामान्य प्रविष्टियाँ, जो लॉगिन का उपयोग करती हैं और स्पैनिंग गोले रखती हैं:

::respawn:/sbin/getty -L ttyS0 0 vt100

जो gettyनिष्पादन योग्य, लेकिन TODO का उपयोग करते हैं : मैं खुद को उन बिजीबॉक्स के बिना स्पॉन करने में सक्षम नहीं हुआ init: कमांड लाइन से गेटी शुरू करें?

आप इस सेटअप का उपयोग इसके साथ खेलने के लिए कर सकते हैं और उपरोक्त निष्कर्ष तक पहुँच सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.