गैर sudo उपयोगकर्ता ने संदेश के साथ संकेत दिया कि "rm: राइट-प्रोटेक्टेड रेगुलर खाली फ़ाइल को हटा दें" बजाय अनुमति से इनकार कर दिया


1

मैंने एक Linux सर्वर में एक अतिरिक्त डिस्क जोड़ी है।

मैंने निम्नलिखित लाइन को fstab में जोड़ा:

UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1          ext4    defaults 0 0

मैंने तब एक माउंट पॉइंट / डिस्क 1 बनाया और उसे माउंट किया

 sudo mkdir /disk1
 sudo mount /disk1

मैंने तब एक खाली फ़ाइल touch1.txt को उपयोगकर्ता "हरि" के रूप में बनाया और इसकी अनुमति निम्नानुसार थी

sudo touch test1.txt

-rw-rw-r-- 1 hari hari     0 Sep 12 18:23 test1.txt

अब जब मैं किसी अन्य उपयोगकर्ता के रूप में लॉग इन करता हूं और test1.txt फ़ाइल को हटाता हूं तो यह वास्तव में मुझसे पूछता है और फिर "अनुमति अस्वीकृत" कहने के बजाय मुझे अस्वीकार कर देता है। ऐसा क्यों हैं? और मैं इसे "सामान्य" की तरह कैसे व्यवहार कर सकता हूं

hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file test2.txt’? y
rm: cannot remove test2.txt’: Operation not permitted

जवाबों:


5

निकालने की कार्रवाई के लिए यूनिक्स अनुमतियाँ थोड़ी अजीब हैं।

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

इस कारण से, किसी फ़ाइल को "हटाने" के लिए उपयोग किए जाने वाले वास्तविक सिस्टम कॉल को कहा जाता है unlink। हालांकि, शेल कमांड उपयोगिता जो अनलिंक को पूरा करती है उसे कहा जाता है rm, जो "हटाने" के लिए एक महामारी है।

चूंकि अनलिंक ऑपरेशन निर्देशिका को संशोधित करता है (निर्देशिका प्रविष्टि को हटाकर) और फ़ाइल नहीं, इसलिए ऑपरेशन के लिए आवश्यक अनुमति निर्देशिका पर लिखने की अनुमति है । फ़ाइल पर अनुमतियाँ स्वयं अप्रासंगिक हैं।

हालाँकि, जैसा कि यह पता चला है, एक फ़ाइल को हटाने की कोशिश करना एक सामान्य गलती है जो वास्तव में उस निर्देशिका से आपका संबंध नहीं रखता है जिसमें आपने अनुमति लिखी है। (अधिक सटीक रूप से, स्थिति सामान्य नहीं है, लेकिन उन मामलों में जहां यह मौजूद है, फ़ाइल को हटाने के लिए गलती से प्रयास करना कुछ हद तक सामान्य है।)

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

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

दुर्भाग्यपूर्ण परिणाम यह है कि यदि आप ऐसी फ़ाइल को हटाने का प्रयास करते हैं जिसके लिए आपके पास उस निर्देशिका से लिखने की अनुमति नहीं है, जिसमें आपके पास rmलिखित अनुमति नहीं है, तो यह निरर्थक रूप से आपसे पूछेगा कि क्या आगे बढ़ना है और फिर विफलता की रिपोर्ट करें।

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