SELinux रूट पासवर्ड रीसेट करता है


12

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

मैं हाल ही में SELinux का उपयोगकर्ता हूं, लेकिन हाल ही में मैं इसके संपर्क में अधिक रहा हूं। एक पल था जब किसी ने मुझसे पूछा कि मैं इसे भूलने के मामले में रूट पासवर्ड कैसे रीसेट कर सकता हूं।

इसलिए मैंने अपने CentOS को बूट किया, ग्रब प्रविष्टि को कुछ इस तरह से संपादित किया

linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash

मैं भाग गया passwdऔर बाद में भाग गया syncऔर रिबूट को मजबूर किया। रिबूट के बाद, नए पासवर्ड के साथ लॉगिंग को अस्वीकार कर दिया गया था और साथ ही पुराने के साथ।

फिर से रिबूट किया और कर्नेल को SELinux ( selinux=0) को निष्क्रिय करने के लिए पैरामीटर पास किया । नए पासवर्ड के साथ लॉगिंग की कोशिश की और यह काम कर गया। बाद में मैंने एक fs ऑटो रिलेबेल (फ़ाइल के माध्यम से .autorelabel) को मजबूर किया और SELinux सक्रिय के साथ अब लॉग इन करना संभव हो गया।

मेरा सवाल है: ऐसा क्यों होता है? जब उपयोगकर्ताओं और वस्तुओं का नहीं, केवल पासवर्ड का परिवर्तन हुआ था, तो रीब्लिंग लॉग को क्यों प्रभावित करता है?

ध्यान देने के लिए धन्यवाद।

TL; DR: सामान्य रूट पासवर्ड रीसेट SELinux में काम नहीं करता है। क्यों?

संपादित करें: यह एक आभासी मशीन पर परीक्षण किया गया था जो केवीएम के साथ सेंट्रो 7 के रूप में चल रहा था।


1
क्या आप सुनिश्चित हैं कि यह काम नहीं करता है? दुबारा प्रयास करें। यह शायद ठीक काम करेगा। मुझे संदेह है कि आपके पास कुछ फ़ाइलों पर गलत फ़ाइल संदर्भ थे, जिससे सभी लॉगिन विफल हो गए। इस प्रकार ऑटोरेलैब वास्तव में समस्या को ठीक कर रहा था।
माइकल हैम्पटन

@Michael Hampton मैंने अभी-अभी अपने सभी चरणों को फिर से किया और SELinux सक्रिय के साथ फिर से लॉग इन नहीं कर सका। इसे अक्षम करने के बाद मैं बिना किसी समस्या के लॉग इन कर सकता था। अगर मैं गलत हूं तो मुझे सही करें लेकिन पासवर्ड बदलना फ़ाइल संदर्भों को सही नहीं बदलना चाहिए?
जॉर्ज हेलीनो

1
नहीं यह नहीं होना चाहिए। आप कुछ अजीब और अप्रत्याशित खोज रहे हैं।
माइकल हैम्पटन

जवाबों:


17

मैं इस मुद्दे को नए सिरे से स्थापित CentOS 7.5 सिस्टम में डुप्लिकेट करने में सक्षम था।

यहाँ क्या हो रहा है:

जब आप init=/bin/bashदो मुद्दों के साथ बूट करते हैं तो आप इसमें भाग ले सकते हैं:

  • रूट फाइल सिस्टम को आसानी से माउंट किया जा सकता है। इस मामले passwdमें एक की शिकायत करेंगे Authentication token manipulation error

    यह बहुत स्पष्ट है: यदि फ़ाइल-सिस्टम पठन-लेखन को माउंट नहीं किया गया है, तो इसे लिखना संभव नहीं है।

  • SELinux नीति लोड नहीं हो सकती है। इस मामले passwdमें सफलतापूर्वक पासवर्ड बदल जाएगा, लेकिन आपको ऊपर दिए गए मूल प्रश्न में वर्णित समस्या होगी: कोई भी व्यक्ति लॉग इन नहीं कर पाएगा।

    पासवर्ड हैश /etc/shadowफ़ाइल में संग्रहीत हैं । इस फ़ाइल में सामान्य रूप से SELinux टाइप है shadow_t। हालाँकि, कोई भी SELinux नीति लोड नहीं होने पर फ़ाइल को बदलने से SELinux प्रकार फ़ाइल से हटा दिया जाता है, इसे छोड़ दिया जाता है unlabeled_t। इस प्रकार, जो सेवाएं लॉगिन को प्रमाणित करने के लिए फ़ाइल को पढ़ने की कोशिश करती हैं, वे अब इसे पढ़ने में सक्षम नहीं हैं।

RHEL / CentOS 7 पर रूट पासवर्ड बदलने के लिए, आपको इस प्रक्रिया का पालन करने की आवश्यकता है:

  1. init=/bin/bashग्रब में कर्नेल कमांड लाइन के अंत में जोड़ें , जैसा आपने पहले किया था।
  2. बैश प्रॉम्प्ट पर, SELinux पॉलिसी को लोड करें /usr/sbin/load_policy -i
  3. रूट फाइलसिस्टम को माउंट-रीड-राइट के साथ रखें mount -o remount,rw /
  4. अब पासवर्ड बदलें, और यह सफल होगा। passwd root
  5. बदलाव करने के लिए फाइल सिस्टम को आसानी से पढ़ें और अगले बूट पर एक साफ फाइल सिस्टम रखें mount -o remount,ro /
  6. शेल से बाहर निकलें या सिस्टम को पुनरारंभ करें exec /sbin/init 6

अब आप बदले हुए रूट पासवर्ड से लॉग इन कर सकते हैं।

एक इस प्रक्रिया के अधिक व्याख्या की रेड हैट (सदस्यता) की आवश्यकता से उपलब्ध है।


समस्या उन नीतियों पर थी जो लोड नहीं थीं। वे लोड क्यों नहीं करते? SELinux को कर्नेल स्तर पर काम करना चाहिए ताकि init सिस्टम की आवश्यकता न हो।
जॉर्ज हेलीनो

4
@JorgeHeleno SELinux कर्नेल शुरू होने पर वास्तव में डिफ़ॉल्ट रूप से चालू या बंद होता है, लेकिन उपयोगकर्ता पॉलिसी तय करने के लिए ज़िम्मेदार होता है कि कौन सी नीतियाँ लोड की गई हैं। कर्नेल यह तय नहीं कर सका, क्योंकि कुछ इंस्टॉलेशन अलग-अलग नीतियां (जैसे लक्षित, सख्त, mls) चाहते हैं। यह बूट प्रक्रिया में जल्दी होता है, लेकिन जब आप चलते हैं तो आप इसे बायपास करते हैं init=/bin/bash
माइकल हैम्पटन

1
यदि कोई नीति लोड नहीं है, तो passwd"सफल क्यों होता है"?
एंड्रयू सविनाख

और अगर यह सफल नहीं हुआ, तो पुराने पासवर्ड के साथ लॉग इन करना अभी भी विफल क्यों है?
लाइट ऑक्ट्स रेस ऑर्बिट

2
@ जॉर्ज हेलेन: आपकी व्याख्या लगभग पूरी हो चुकी है। बिंदु passwdअर्थात् /etc/passwdऔर द्वारा बदल फ़ाइलें हैं /etc/shadow। यदि passwdभरी हुई नीति के बिना चल रहा है , तो यह उचित सेलिनक्स संदर्भ में नहीं चलता है, और परिवर्तित फाइलें एक अलग सेलिनक्स संदर्भ के साथ समाप्त होती हैं। जब selinux के साथ बूटिंग सक्षम है, और पासवर्ड चेक सक्रिय करता है, तो अनुचित फ़ाइल संदर्भ के कारण पासवर्ड की जाँच विफल हो जाती है, और wrong passwordत्रुटि के कारण नहीं । /.autorelabelलोड करने की नीति के बिना पासवर्ड बदलते समय, उस समस्या को ठीक करके उस समस्या को हल कर सकते हैं।
hargut
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.