फ़ाइलों और निर्देशिकाओं के लिए विशेषाधिकार प्राप्त वास्तव में क्षमताओं द्वारा निर्धारित किया जाता है, न कि केवल होने 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)मैन पेज में प्रतिबिंबित नहीं किया गया है - एक बग रिपोर्ट दर्ज करने पर विचार करें!