एक गैर-रूट उपयोगकर्ता रूट द्वारा बनाई गई फ़ाइलों को क्यों हटा सकता है?


24

एक गैर-रूट उपयोगकर्ता "जोशुआ" को देखते हुए, रूट के रूप में मैंने जोशुआ के होम डायरेक्टरी (/ होम / जोहुसा /) में "फू" नामक एक फाइल बनाई; यह इस तरह दिखता है:

-rw-r--r--  1 root   root       0 12-19 21:00 foo

और फिर इसे joshua के रूप में हटा दें, मैं इसे सफलतापूर्वक हटा सकता हूं।

मुझे उम्मीद है कि joshua के पास इसे हटाने की पर्याप्त अनुमति नहीं है। क्या यह किसी प्रकार की inher अनुमतियां विरासत ’है? मेरा मंच डेबियन 5.0.7 है।


1) यह ऑफ टॉपिक है। 2) मुझे बहुत संदेह है कि आप इसे गैर-रूट उपयोगकर्ता के रूप में sudoया अन्य विशेषाधिकार वृद्धि के बिना हटाने में सक्षम थे । आपने शायद कुछ अनदेखी की है।
DarkDust

16
@DarkDust एक फ़ाइल अपने मूल निर्देशिका में एक प्रविष्टि है। यदि आपके पास एक निर्देशिका में राइट्स हैं, तो आप इसमें फ़ाइलों को हटा सकते हैं, भले ही फाइलों का मालिक कौन हो (जब तक कि निर्देशिका में चिपचिपा बिट भी सेट
न हो

@ एनोस: मुझे मूर्खतापूर्ण, आप सही कह रहे हैं।
DarkDust

1
इसकी मूल निर्देशिका में एक प्रविष्टि एक फ़ाइल का संदर्भ है। यह फ़ाइल ही नहीं है। (अन्यथा, एक फाइल को एक से अधिक निर्देशिका से कैसे जोड़ा जा सकता है?)
डेविड श्वार्ट्ज

@DavidSchwartz यह सच है, लेकिन निर्देशिका से फ़ाइल हटाना निर्देशिका संरचना में संदर्भ को हटाने के बारे में है।
mc0e

जवाबों:


43

उपयोगकर्ता ने फ़ाइल को नहीं हटाया, सिस्टम ने किया। उपयोगकर्ता ने केवल अपनी निर्देशिका से फ़ाइल को हटा दिया। सिस्टम ने फ़ाइल को हटा दिया क्योंकि इसकी संदर्भ संख्या शून्य पर गिर गई। यह सिर्फ ऐसा होता है कि निर्देशिका से फ़ाइल को हटाने वाला उपयोगकर्ता अपनी संदर्भ संख्या को शून्य पर गिरा देता है। (यदि फ़ाइल को किसी अन्य निर्देशिका से लिंक किया गया था या फ़ाइल के लिए एक हैंडल खोला गया था, तो उसे हटाया नहीं गया।)

सिस्टम स्वचालित रूप से फ़ाइलों को हटा देता है जब उनका संदर्भ शून्य पर गिर जाता है। फ़ाइल का स्वामी कोई फर्क नहीं पड़ता। ऐसे कई तरीके हैं जो किसी फ़ाइल के स्वामी के अलावा किसी अन्य व्यक्ति द्वारा फ़ाइल के संदर्भ गणना को शून्य पर गिरा सकते हैं।

एक निर्देशिका से एक फ़ाइल को निकालना (जिसे 'अनलिंकिंग' कहा जाता है) निर्देशिका पर एक ऑपरेशन है। किसी फ़ाइल को अनलिंक करने से उसकी संदर्भ संख्या कम हो जाती है।

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


1
और निश्चित रूप से rmकमांड पानी को थोड़ा कम करता है, क्योंकि rm"हटाएं" का एक संक्षिप्त नाम है, और उपयोगकर्ताओं को rm"हटाएं" ऑपरेशन के रूप में सोचने के लिए प्रशिक्षित किया जाता है । कई उपयोगकर्ता rmहर दिन यह जानते हुए भी उपयोग करते हैं कि यह वास्तव में जो ऑपरेशन करता है वह "अनलिंक" है, न कि "डिलीट"। नतीजतन, यह वास्तव में आश्चर्यजनक नहीं होना चाहिए कि कई उपयोगकर्ता इस व्यवहार को आश्चर्यचकित करते हैं जब वे पहली बार सामना करते हैं।
डैनियल प्राइडेन

यह निश्चित रूप से कई लोगों के लिए आश्चर्य की बात है। कम से कम rmकमांड वास्तव में एक निर्देशिका से एक फ़ाइल या निर्देशिका को हटाता है। यह विंडोज पर खराब है जहां कमांड कहा जाता है del, क्योंकि यह एक फाइल को हटाने के लिए इस्तेमाल किया गया था लेकिन आधुनिक विंडोज मशीनों पर (NT4 के बाद से), यह एक अनलिंक ऑपरेशन भी है।
डेविड श्वार्ट्ज

"उपयोगकर्ता ने फ़ाइल को नहीं हटाया, सिस्टम ने किया" इससे कोई मतलब नहीं है। "सिस्टम" उन परिवर्तनों को नहीं कर सकता है जिनके लिए अप्रभावी उपयोगकर्ता की ओर से विशेषाधिकार प्राप्त करने की आवश्यकता होती है। जैसे, यह उत्तर यह समझाने में विफल होगा कि क्यों वही उपयोगकर्ता वही नहीं कर सकता है यदि वर्तमान निर्देशिका के स्वामित्व में था + जड़ से। @Kerrek द्वारा नीचे दिया गया उत्तर सटीक और संक्षिप्त है।
फ्रैक्टलस्पेस

@ फ्रैक्टलस्पेस हुह? सिस्टम परिवर्तन कर सकता है जिसके लिए एक अप्रभावी उपयोगकर्ता की ओर से विशेषाधिकार प्राप्त करने की आवश्यकता होती है और वह हर समय ऐसा करता है। उदाहरण के लिए, डिस्क पर बाइट्स बदलने के लिए विशेषाधिकार प्राप्त उपयोग की आवश्यकता होती है। हालाँकि, यदि कोई उपयोगकर्ता किसी फ़ाइल को संशोधित कर सकता है, तो सिस्टम डिस्क पर कुछ बाइट्स को संशोधित करने का निर्णय करेगा, भले ही उपयोगकर्ता के पास स्वयं उन बाइट्स को संशोधित करने की अनुमति न हो। एक उपयोगकर्ता कर्नेल मेमोरी को संशोधित नहीं कर सकता है, लेकिन उपयोगकर्ता की ओर से निष्पादित करते समय कर्नेल कर सकता है। सिस्टम अपने उपयोगकर्ताओं को सीधे अधिकृत करने के लिए ऑपरेशन करने का निर्णय लेकर काम करते हैं।
डेविड श्वार्ट्ज

हाँ। और अंततः सब कुछ "सिस्टम" द्वारा किया जाता है। लेकिन उस विशेष "उपयोगकर्ता स्थान" के लिए निर्धारित सख्त विशेषाधिकार अलगाव नियमों से गुजरने से पहले नहीं। इस परिदृश्य में, उदाहरण के लिए, "सिस्टम" एक सामान्य नियम के रूप में कार्रवाई नहीं कर रहा है, लेकिन यह "मूल निर्देशिका" पर निर्धारित अनुमतियों का पालन कर रहा है। ओपी प्रश्न में इस मुद्दे का प्रमुख हिस्सा।
फ्रैक्टलस्पेस

0

पहला अनुमान: किसी फ़ाइल को हटाने के लिए आपको युक्त फ़ोल्डर पर लिखने की अनुमति चाहिए। तो ट्राई / होम / जोहुसा / फू / बार, फू को 755 और बार को 644 दें।

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