खराब फ़ाइल पर रूट के खोल को सेट करने से पुनर्प्राप्त करना


23

मान लीजिए कि मैं चला गया हूं और एक मूर्खतापूर्ण काम किया है, जैसे कि 'chsh' का उपयोग करके रूट उपयोगकर्ता के शेल को खराब फ़ाइल पथ में बदलना। रूट खाते में भविष्य के लॉगिन अचानक / बिन / जो कुछ भी नहीं मिल रहा है, का हवाला देते हुए असफल हो जाएगा, और आपको लॉगिन स्क्रीन पर वापस बूट करेगा। एक रिकवरी मोड को छोड़कर या संपादित करने के लिए एक लाइवसीडी डालने / / पास, मेरे सिस्टम को वापस पाने के लिए मेरे पास क्या विकल्प हैं? चलिए मान भी लेते हैं (मजे के लिए?) कि पहिए में कोई दूसरा यूजर्स न हो। विचार?


क्या यह एक काल्पनिक स्थिति है जिसे आप प्रस्तावित कर रहे हैं?
क्रिस डाउन

मैं वास्तव में एक (अपेक्षाकृत ताजा) FreeBSD स्थापित पर यह किया था। इसके बाद से इसे फिर से स्थापित किया गया है, इसलिए मुझे लगता है कि यह अब कुछ हद तक काल्पनिक है, लेकिन मुझे इस बात को लेकर उत्सुकता है कि यदि मेरे पास वास्तव में पूर्ण प्रणाली मौजूद है, तो पुनर्प्राप्ति के लिए सबसे अच्छा मार्ग क्या होगा।
21

वहाँ किया गया था, कि टी शर्ट मिला है। लेकिन हर मशीन के परिणामस्वरूप मुझे लगता है कि मैं बैकअप रूट खाता रखता हूं, बस।
मार्क डी।

जवाबों:


30

जब बूटिंग, अपेंड init=/bin/bash(या किसी अन्य कार्यात्मक शेल के लिए एक पथ) आपके बूट विकल्पों के लिए - आप सीधे एकल उपयोगकर्ता शेल में गिरा दिए जाएंगे। आपको उस वातावरण में प्रविष्टि को mount -o remount,rw /संशोधित करने से पहले करने की आवश्यकता हो सकती /etc/passwdहै। उसके बाद, बस रिबूट या करो exec /sbin/init 3। बस Ctrl + D टाइप या प्रेस करें exit, क्योंकि इनका परिणाम कर्नेल पैनिक * होगा।

दो-चरण मोड (एक initrd छवि के साथ) में लोड किए गए कुछ सिस्टम पर इस पद्धति का एक अतिरिक्त परिवर्तन आवश्यक हो सकता है। यदि आप देखते हैं कि बूट विकल्प सम्‍मिलित हैं init=और सबसे महत्वपूर्ण बात यह है कि, real_init=पुट करने का स्थान /bin/bashबाद वाला पैरामीटर (यानी real_init=/bin/bash) होना चाहिए ।

* ऐसा इसलिए है क्योंकि उस वातावरण में, शेल को कर्नेल द्वारा init प्रोग्राम के रूप में देखा जाता है - जो कि कर्नेल को पता है कि यह एकमात्र प्रक्रिया है - यह कर्नेल की आंख के नीचे एक रनिंग सिस्टम का प्रतिनिधित्व करता है। सिस्टम को बंद करने के लिए कर्नेल को बताए बिना उस प्रक्रिया को अचानक समाप्त करने के परिणामस्वरूप, कर्नेल आतंक का परिणाम होना चाहिए। (क्या आप घबरा नहीं सकते अगर अचानक आपके आस-पास सब कुछ काला और चुप हो गया?)


के लिए अच्छा है exec, लेकिन मुझे लगता है कि पहले से माउंट पॉइंट्स के साथ बहुत ज्यादा गड़बड़ न करना बेहतर है।
स्टेफेन जिमेनेज

2
@ Stéph आपको यह करना है कि यदि आपका कर्नेल रूट रीड-राइट माउंट नहीं करता है। अन्यथा आप किसी भी फाइल (सहित /etc/passwd) को संशोधित करने में सक्षम नहीं होंगे ।
रोज़ज़ेट्रिएवेज़ेज़ सिप 18'11

अच्छी सोच! मैं एकल-उपयोगकर्ता मोड में आने में कामयाब रहा, लेकिन इसने मुझे नहीं मारा कि मुझे संशोधित / आदि को पढ़ने / लिखने के लिए रिमूव / राइट / राइटिंग करना था। धन्यवाद!
noffle

@roz ज़रूर, मैं यह कहने की कोशिश कर रहा था कि /init को अंजाम देने से पहले मैं बाकी सब को ध्यान में रख कर (माउंटेड ) हो सकता हूं ।
स्टेफेन जिमेनेज

@ स्टीफ माउंट के साथ कोई समस्या नहीं होनी चाहिए। ध्यान दें कि /bin/bashबिल्कुल बिंदु पर चलाया जाता है, फिर /sbin/initसामान्य बूट पर निष्पादित किया जाएगा। तो उस समय सिस्टम द्वारा कोई संभावित कार्रवाई नहीं की जा सकती है।
rozcietrzewiacz

10

आप suनिष्पादित करने के लिए एक शेल का उपयोग कर सकते हैं और निर्दिष्ट कर सकते हैं (मुझे यकीन नहीं है कि यदि आप इसका अर्थ लगाने की कोशिश कर रहे हैं तो यह आपके नोट के साथ संभव नहीं है कि किसी अन्य उपयोगकर्ता के बारे में wheel):

su -c /bin/bash

अन्यथा आप कुछ ऐसा ही कर सकते हैं यदि आपका ssh डेमन रूट में लॉगिन करने की अनुमति देता है:

ssh root@localhost /bin/bash

आप अपने बूटलोडर में अपने init के रूप में एक शेल भी सेट कर सकते हैं, उदाहरण के लिए, init=/bin/kshया समान।


1
अच्छे विचार। =) जैसा कि आपको संदेह था, कोई अन्य उपयोगकर्ता 'सु' का उपयोग नहीं कर सकता है। sshd में रूट लॉगिन अक्षम भी है।
21

6

यदि आपका बूटलोडर कर्नेल मापदंडों के लाइव संपादन की अनुमति देने के लिए कॉन्फ़िगर किया गया है, तो एक समाधान को रिबूट और इनिट प्रक्रिया के रूप में शेल का उपयोग करना है, जैसे init=/bin/bash। फिर, हाथ से जो कुछ भी माउंट करने की आवश्यकता है उसे माउंट करें, और संपादित करें /etc/passwdsyncऔर अपने सामान्य के साथ फिर से बूट करें init


वाह, मैंने अभी देखा कि आपने एक ही मिनट में एक ही उत्तर पोस्ट किया है अपने आप को :-)
rozcietrzewiacz

6

यदि आपके प्रश्न का सार यह है कि आपने रूट बनने के सभी तरीकों को बंद कर दिया है, तो परिभाषा के अनुसार आप रूट नहीं बन सकते।

यूनिक्स प्रणाली पर रूट बनने के लिए तीन तरीकों की अनुमति देना आम है:

  • rootलॉगिन प्रॉम्प्ट पर दर्ज करके और रूट पासवर्ड टाइप करके रूट के रूप में लॉग इन करें। इससे जड़ का खोल चलता है।
  • एक साधारण उपयोगकर्ता के रूप में लॉग इन करें, फिर suरूट पासवर्ड चलाकर और लिखकर रूट बनें । कुछ प्रणालियों पर, इसके लिए एक विशेष समूह (अक्सर कहा जाता है wheel) में होने की आवश्यकता होती है ; अन्य प्रणालियों पर, जो कोई भी रूट पासवर्ड जानता है वह रूट बन सकता है। प्रमाणीकरण के लिए PAM का उपयोग pam_wheelकरने वाले सिस्टम व्हील समूह को प्रबंधित करने के लिए उपयोग करते हैं यदि उनके पास एक है। यदि आप एक कमांड निर्दिष्ट करते हैं su -c, तो इसे रूट के शेल के माध्यम से निष्पादित किया जाता है।
  • एक साधारण उपयोगकर्ता के रूप में लॉग इन करें, फिर sudoअपना पासवर्ड चलाकर और टाइप करके रूट बनें । उपयोगकर्ता खाते को किसी व्यवस्थापक द्वारा sudo शक्तियाँ दी गई होंगी। जब तक sudoersफ़ाइल में प्रतिबंधित न हो , आप रूट के शेल की परवाह किए बिना किसी भी कमांड को चला सकते हैं।

रूट के शेल के अनुपलब्ध होने से बचाने के लिए एक पारंपरिक तरीका यूआईडी 0 और एक अलग शेल ( toorएक पारंपरिक नाम) के साथ एक अन्य खाते को परिभाषित करना है । उदाहरण के लिए, यदि रूट का शेल गतिशील रूप से जुड़ा हुआ निष्पादन योग्य (मेमोरी को संरक्षित करने के लिए एक अच्छा विचार) है और लाइब्रेरी अपग्रेड गलत हो जाता है, तो रूट का शेल अनुपयोगी हो सकता है। वैकल्पिक रूट खाते में एक सांख्यिकीय रूप से जुड़ा निष्पादन योग्य होगा, जो संभवतः व्यस्त उपयोगिताओं जैसे कि अंतर्निर्मित बॉक्स के साथ हो सकता है


5

उपरोक्त उत्तर बहुत अच्छे हैं और मैंने उन्हें पढ़ना सीखा। यदि आपको इन दृष्टिकोणों का विवरण याद नहीं है और रिबूट करने में कोई आपत्ति नहीं है, तो आप हमेशा लाइव सीडी डिस्ट्रो का उपयोग करके अपने सिस्टम को बूट कर सकते हैं, / विभाजन को माउंट कर सकते हैं और फिर / etc / passwd और रिबूट को संपादित कर सकते हैं। उपरोक्त समाधानों की तरह सुरुचिपूर्ण नहीं, लेकिन याद रखना आसान है।


आपको /etc/passwdफ़ाइल को मैन्युअल रूप से संपादित करने के साथ जुड़े जोखिमों को इंगित करना चाहिए । इसके अलावा, अच्छी बात - मैं सिर्फ अपने उत्तर में वही सुझाव जोड़ना चाहता था।
rozcietrzewiacz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.