फ़ाइल की अनुमति "रूट" उपयोगकर्ता के लिए कैसे काम करती है?


28

मेरे पास निम्न फ़ाइल है:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

मैंने उपयोगकर्ता को rootटर्मिनल में स्विच किया , और मैंने निम्नलिखित व्यवहारों पर ध्यान दिया है:

  • मैं इस फाइल को पढ़ सकता हूं और इसे लिख सकता हूं।

  • मैं इस फ़ाइल को निष्पादित नहीं कर सकता।

  • यदि मैं फ़ाइल xके उपयोगकर्ता अनुमतियों ( ---x------) या समूह अनुमतियों ( ------x---) या अन्य अनुमतियों ( ---------x) में थोड़ा सेट करता हूं , तो मैं इस फ़ाइल को निष्पादित कर पाऊंगा।

क्या कोई मुझे समझा सकता है या मुझे एक ट्यूटोरियल की ओर इशारा कर सकता है जो उन सभी नियमों की व्याख्या करता है जो लागू होते हैं जब rootउपयोगकर्ता फ़ाइलों और निर्देशिकाओं के साथ काम कर रहा होता है?

जवाबों:


38

फ़ाइलों और निर्देशिकाओं के लिए विशेषाधिकार प्राप्त वास्तव में क्षमताओं द्वारा निर्धारित किया जाता है, न कि केवल होने rootया न होने से। व्यवहार में, rootआमतौर पर सभी संभव क्षमताएं होती हैं, लेकिन ऐसी परिस्थितियां हैं जहां सभी / उनमें से कई को गिराया जा सकता है, या कुछ अन्य उपयोगकर्ताओं (उनकी प्रक्रियाओं) को दिया जा सकता है।

संक्षेप में, आपने पहले ही वर्णन किया है कि विशेषाधिकार नियंत्रण प्रक्रिया के लिए अभिगम नियंत्रण कैसे काम करता है। यहां बताया गया है कि विभिन्न क्षमताएं वास्तव में इसे कैसे प्रभावित करती हैं:

यहां मुख्य क्षमता हैCAP_DAC_OVERRIDE , एक ऐसी प्रक्रिया है जिसमें "चेक रीड, राइट, और अनुमति जांच को निष्पादित" बायपास किया जा सकता है। जिसमें किसी भी फाइल को पढ़ना और लिखना शामिल है, साथ ही निर्देशिका पढ़ना, लिखना और एक्सेस करना शामिल है।

यह वास्तव में निष्पादन योग्य के रूप में चिह्नित नहीं की गई फ़ाइलों को निष्पादित करने के लिए लागू नहीं होता है। में टिप्पणीgeneric_permission ( fs/namei.c), फ़ाइलों के लिए पहुँच चेकों से पहले का कहना है कि

पढ़ें / लिखें DAC हमेशा ओवररिएडेबल होते हैं। जब कम से कम एक निष्पादन बिट सेट होता है, तो निष्पादन योग्य डीएसीए अधिक होने योग्य होते हैं।

और xयदि आप फ़ाइल को निष्पादित करने का प्रयास कर रहे हैं तो कोड जाँचता है कि कम से कम एक बिट सेट है। मुझे संदेह है कि केवल एक सुविधा सुविधा है, गलती से रैंडम डेटा फ़ाइलों को चलाने और त्रुटियों या विषम परिणामों को रोकने के लिए।

वैसे भी, यदि आप अनुमति को ओवरराइड कर सकते हैं, तो आप केवल एक निष्पादन योग्य प्रतिलिपि बना सकते हैं और उसे चला सकते हैं। (हालांकि, यह एक प्रक्रिया के सेतु फ़ाइलों के लिए सिद्धांत में अंतर कर सकता है, फ़ाइल अनुमतियों को ओवरराइड करने में सक्षम था CAP_DAC_OVERRIDE), लेकिन अन्य संबंधित क्षमताओं ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID) नहीं था। लेकिन CAP_DAC_OVERRIDEसंपादन /etc/shadowऔर इस तरह से सामान की अनुमति देता है, इसलिए यह लगभग बराबर है। वैसे भी पूर्ण रूट का उपयोग करने के लिए।)

ऐसी CAP_DAC_READ_SEARCHक्षमता भी है जो किसी भी फाइल को पढ़ने और किसी भी निर्देशिका तक पहुंचने की अनुमति देती है, लेकिन उन्हें निष्पादित या लिखने के लिए नहीं; और CAP_FOWNERजो एक प्रक्रिया को सामान करने की अनुमति देता है जो आमतौर पर केवल फ़ाइल मालिक के लिए आरक्षित होती है, जैसे अनुमति बिट्स और फ़ाइल समूह को बदलना।

निर्देशिकाओं पर चिपचिपे बिट को ओवरराइड करने के तहत ही उल्लेख किया गया है CAP_FOWNER, इसलिए ऐसा लगता है कि इसे CAP_DAC_OVERRIDEअनदेखा करना पर्याप्त नहीं होगा। (यह आपको अनुमति देता है, लेकिन आमतौर पर चिपचिपी निर्देशिका में आपके पास वैसे भी होता है, और +tइसे सीमित करता है।)

(मुझे लगता है कि विशेष उपकरण यहां "फाइलों" के रूप में गिने जाते हैं। कम से कम generic_permission()केवल निर्देशिकाओं के लिए एक प्रकार की जांच होती है, लेकिन मैंने इसके बाहर की जांच नहीं की।)


बेशक, अभी भी ऐसी परिस्थितियाँ हैं जहाँ क्षमताएं भी फ़ाइलों को संशोधित करने में आपकी मदद नहीं करेंगी:

  • कुछ फाइलें /procऔर /sys, चूंकि वे वास्तव में वास्तविक फाइलें नहीं हैं
  • SELinux और अन्य सुरक्षा मॉड्यूल जो रूट को सीमित कर सकते हैं
  • chattrअपरिवर्तनीय +iऔर केवल +aझंडे को ext2 / ext3 / ext4 पर जोड़ते हैं , दोनों ही रूट को रोकते हैं, और रेनोवेटर को भी रोकते हैं आदि।
  • नेटवर्क फाइलसिस्टम, जहां सर्वर अपना एक्सेस कंट्रोल कर सकता है, जैसे root_squashकि NFS मैप रूट से लेकर कोई भी नहीं
  • FUSE, जो मुझे लगता है कि कुछ भी कर सकता है
  • केवल पढ़ने के लिए mounts
  • केवल पढ़ने के उपकरण

हैरानी की बात है कि स्रोत फ़ाइल टिप्पणी को capabilities(7)मैन पेज में प्रतिबिंबित नहीं किया गया है - एक बग रिपोर्ट दर्ज करने पर विचार करें!
टोबी स्पाईट

@ilkkachu यह दिखाया गया है के रूप में, rootहै rw-पर (लगभग) किसी भी फाइल अनुमति, और प्राप्त करने के लिए xअनुमति है, तो xथोड़ा फ़ाइल पर या तो उपयोगकर्ता / समूह / अन्य अनुमतियों पर सेट किया जाना चाहिए। लेकिन क्या निर्देशिका के बारे में, करता rootहै rwxकिसी एक निर्देशिका पर अनुमतियाँ (भले ही एक निर्देशिका में सभी की अनुमति न हो ( ----------))?
यूसुफ

@ जोसेफ, हाँ, CAP_DAC_OVERRIDEसभी निर्देशिका अनुमतियों को ओवरराइड करने की अनुमति देता है, इसलिए आप निर्देशिकाओं को पढ़ना, लिखना और एक्सेस करना चाहते हैं (जैसे कि सामग्री को सूचीबद्ध करें, फ़ाइलें बनाएँ और अनलिंक करें)। निष्पादन बिट के बारे में मैंने जो टिप्पणी की है, वह फाइलों (केवल) के संदर्भ में है।
ilkachachu

11

यह ठीक उसी तरह है जैसे आपने डिफ़ॉल्ट अनुमतियों के लिए देखा है:

  • पढ़ें और लिखें:
    डिफ़ॉल्ट रूप से, रूट उपयोगकर्ता सिस्टम में किसी भी फ़ाइल का उपयोग कर सकता है। आप यहाँ व्याख्या जैसे गुण बदलकर इस पहुँच को हटा सकते हैं: chattr । यह तो क्षमताओं से जुड़ा हुआ है।

  • निष्पादन:
    रूट उपयोगकर्ता के पास निष्पादन अनुमति नहीं है जब तक कि निष्पादन बिट्स में से कम से कम एक सेट न हो।


उन फ़ाइलों को रखना संभव है जो रूट लिख या हटा नहीं सकते हैं। इसलिए "रूट उपयोगकर्ता सिस्टम में किसी भी फ़ाइल का उपयोग कर सकता है।" गलत है।
लुकास बोर्स्मा

आप केवल पढ़ने के लिए फ़ाइल सिस्टम की तरह मतलब है? या आपके पास एक और मामला है?
केविन लेमेयर

1
मैं इस तरह के मामलों के बारे में बात कर रहा हूं: अनिर्धारित फाइलें , अनिर्धारित फाइलें
लुकास

5

myFile.txtद्वारा प्राप्त किया जाता chmod 000 myFile.txt

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

--------- उपयोगकर्ता, समूह और अन्य के लिए कोई अनुमति नहीं है।

रूट उपयोगकर्ता के पास इस फाइल को संशोधित करने के लिए अप्रतिबंधित क्षमता है। पढ़ने / लिखने की अनुमति दी गई है। इस फ़ाइल को निष्पादित करने के लिए रूट उपयोगकर्ता को वैसे भी निष्पादन योग्य बनाने की आवश्यकता होती है। (चामोद १००, ०१० या ००१)


2

Execute मोड को अन्य मोड से थोड़ा अलग माना जाता है।

सुरक्षा नीतियों को लागू करने के लिए पढ़ने और लिखने की अनुमति का उपयोग किया जाता है। rootउपयोगकर्ता आम तौर पर सुरक्षा प्रतिबंधों (कुछ अपवाद, अपरिवर्तनीय फ़ाइलों की तरह हैं, और क्षमताओं की तरह आधुनिक सुविधाओं यह अधिक परिष्कृत बना दिया है), जिसके कारण इस खाते के लिए एक और नाम "सुपर उपयोगकर्ता" है से प्रतिरक्षा है।

अनुमति निष्पादित भेद कि क्या फ़ाइल है, एक सलाहकार मोड के अधिक है इरादा निष्पादन योग्य होने के लिए या सिर्फ डेटा है। इस वजह से, रूट उपयोगकर्ता भी इसका पालन करता है - डेटा फ़ाइल को निष्पादित करने का कोई मतलब नहीं है। यदि कोई भी निष्पादित अनुमति सेट नहीं है, तो रूट फ़ाइल को निष्पादित नहीं कर सकता है; अगर उनमें से कोई भी सेट है, तो वह कर सकता है। बेशक, चूंकि रूट के पास किसी भी फाइल की अनुमतियों को बदलने की अनुमति है, तो खाता तब तक निष्पादन योग्य बना सकता है जब वह चाहता है (जब तक कि फाइल सिस्टम केवल-पढ़ने के लिए न हो)।

BTW, स्क्रिप्ट इस में एक दिलचस्प मामला है। लिपियों प्रासंगिक दुभाषिया के लिए डेटा फ़ाइलें हैं। यदि स्क्रिप्ट में एक #!पंक्ति है, तो आप इसे एक कार्यक्रम के रूप में निष्पादित कर सकते हैं - शेबंग में नामित दुभाषिया एक तर्क के रूप में स्क्रिप्ट फ़ाइल नाम के साथ चलाया जाता है। लेकिन यह केवल तभी किया जाएगा जब निष्पादन की अनुमति निर्धारित हो। दूसरी ओर, आप बस दुभाषिया को सीधे चला सकते हैं, जैसे /bin/bash scriptname। दुभाषिए केवल देखभाल करते हैं यदि वे फ़ाइल पढ़ सकते हैं, तो वे निष्पादन अनुमतियों की जांच नहीं करते हैं।


1

मैं तुम्हें सैद्धांतिक रूप से समझाता हूं।

रूट उपयोगकर्ता ऑपरेटिंग सिस्टम का राजा है।

यदि किसी फ़ाइल या निर्देशिका के पास निष्पादन के लिए X जैसी कोई अनुमति है, लेकिन और कुछ और जैसे स्टीव उपयोगकर्ता के पास फ़ाइल नहीं है, तो रूट भी फ़ाइल को निष्पादित कर सकता है।

हमेशा याद रखें, लिनक्स रूट में कुछ भी कर सकते हैं, रूट पर कोई प्रतिबंध नहीं है।


कुछ भी नही। यदि किसी फ़ाइल में एक अपरिवर्तनीय विशेषता है, उदाहरण के लिए, तो रूट भी इसे बदल नहीं सकता है (जब तक कि वह स्पष्ट रूप से उस विशेषता को हटा नहीं देता है)।
रुस्लान

@Ruslan हाँ, लेकिन यह बहुत ही असाधारण मामला है वह नया है इसलिए मैं उसे एक बुनियादी के रूप में समझाता हूं, डिफ़ॉल्ट रूप से इस तरह के गुण नहीं होते हैं।
हसन सोहेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.