सवाल मैं रूट के बिना अपनी होम निर्देशिका में रूट द्वारा स्वामित्व वाली फ़ाइल को हटाने में सक्षम क्यों था?


तो मैं आज पहले अपने सर्वर पर कुछ रखरखाव कर रहा था और देखा कि मैं अपनी होम निर्देशिका में रूट द्वारा स्वामित्व वाली फाइल को हटाने में सक्षम था।

मैं एक नमूना पुन: पेश करने में सक्षम था:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

मेरा सवाल यह है कि मैं रूट के स्वामित्व वाली फ़ाइल को कैसे हटा सकता हूं और अनुमतियां हैं -rw-r--r--, जबकि मैं जड़ नहीं हूँ?


38
2017-10-05 21:07


मूल


आप ऐसा कर सकते हैं निर्देशिका में प्रविष्टि को हटा दें जो फ़ाइल को इंगित करता है क्योंकि आपके पास निर्देशिका में लेखन पहुंच है। आप फ़ाइल को जरूरी नहीं हटा सकते हैं; फाइल कहीं और एक और मुश्किल लिंक हो सकता है। - immibis
मजेदार एक्सटेंशन: आप फ़ाइल का नाम बदल सकते हैं, या इसके कठिन लिंक बना सकते हैं। - peterh
कृपया स्वीकृत उत्तर के लिए अपनी पसंद पर पुनर्विचार करें, क्योंकि वर्तमान वाला एक भयानक भ्रामक है: आप हैं नहीं को अनुमति दी निर्देशिका की अनुमतियों के आधार पर इसके भीतर सामग्री को चींटी करने के लिए कुछ भी करें। - Cthulhu
@ कथुलु हो गया! इस प्रश्नोत्तर को सभी टिप्पणियों के लिए सभी को धन्यवाद, निश्चित रूप से यहां बहुत उपयोगी जानकारी है! - Carl Bennett


जवाब:


अनुमतियां, सामग्री और सभी विशेषताएँ इनोड का हिस्सा हैं। नाम निर्देशिका प्रविष्टि में है। अनुमतियों को विरासत में विरासत में नहीं मिला है।

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

जब आप खाली नहीं होने वाले फ़ोल्डर को हटाते हैं तो आपको उस फ़ोल्डर पर लिखने की अनुमति की आवश्यकता होती है जिसे आप हटा रहे हैं और उसके माता-पिता।


32
2017-10-05 22:30



तो अनुमति इनोड या अनुमतियों पर हैं लिंक पर इनोड में, और मैं बस उस लिंक को हटा रहा हूं (और इस प्रकार इसका एकमात्र लिंक हटा दिया गया है, इसलिए इनोड अस्तित्व में है)? - Carl Bennett
अनुमति इनोड पर हैं। यह फ़ाइल के लिए एक कठिन लिंक बनाकर, उस पर अनुमतियों को बदलकर और फिर मूल पर अनुमतियों की जांच करके आसानी से सत्यापित किया जाता है। - Wouter Verhelst
लेकिन मान लें कि इसमें एक निर्देशिका है और इसमें एक फ़ाइल रूट से संबंधित है, निर्देशिका उपयोगकर्ता के स्वामित्व वाली निर्देशिका में है। आप तब उन्हें हटाने में सक्षम नहीं होंगे, है ना? - njzk2
यह ext2, ext3, और ext4 के लिए विशिष्ट विशेषता है। उदाहरण: sudo touch test_file;sudo chattr +i test_file;rm -f test_file देख: man chattr - Mircea Vutcovici
अपरिवर्तनीय विशेषता रूट से भी किसी भी बदलाव के लिए फ़ाइल की सुरक्षा करती है। - Mircea Vutcovici


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


19
2017-10-05 21:10



बिल्कुल नहीं। उदाहरण के लिए, ओपी उस रूट-स्वामित्व वाली फ़ाइल को संशोधित करने में सक्षम नहीं होगा। बात यह है कि, फाइल को हटाया जा रहा है नहीं है फ़ाइल पर एक ऑपरेशन माना जाता है लेकिन निर्देशिका पर (फ़ाइल में पॉइंटर को हटा रहा है) और यही कारण है कि निर्देशिका पर अनुमतियां mattered। - Cthulhu
@Cthulhu तो क्या आप रूट स्वामित्व वाली फ़ाइल को हटा सकते हैं, और उसी नाम के साथ एक नया संशोधित एक बना सकते हैं? - KDEx
@Morgoroth हाँ आप कर सकते हैं, लेकिन यह अब एक ही फाइल नहीं होगी। किसी अन्य (शायद अधिक स्पष्ट) उदाहरण के लिए, यदि आप रूट से संबंधित हैं और केवल उसका स्वामी इसे पढ़ सकता है तो आप अपनी निर्देशिका में फ़ाइल को पढ़ने में सक्षम नहीं होंगे। - Cthulhu
@inetknght यह स्पष्ट किया जाना चाहिए। मैं समझता हूं कि आप फ़ाइलों के रूप में स्वयं को फाइलों में हेरफेर करने का प्रयास कर रहे हैं, लेकिन यह स्पष्ट नहीं है। उदाहरण के लिए, आप इसकी सामग्री को संशोधित करने में सक्षम नहीं हैं। और आप उन गुणों का उल्लेख नहीं करते हैं जो निर्देशिका अनुमतियों को ट्रम्प कर सकते हैं। - Mike S
@captcha ऐसा इसलिए है vi फ़ाइल को अस्थायी प्रतिलिपि में पहले सहेजता है, फिर मूल फ़ाइल को हटा देता है और प्रतिलिपि को मूल में बदलता है (या ऐसा कुछ)। - Cthulhu