एक सामान्य उपयोगकर्ता 'chown' को फाइल क्यों नहीं कह सकता?


75

chownकेवल कमांड रूट क्यों है ? नॉन-रूट यूजर्स chown का उपयोग उन फाइलों को खुद से दूर करने के लिए क्यों नहीं कर सकते?


खिचड़ी भाषा आपके प्रश्न को समझती है, जिसका उपयोग गैर रूट उपयोक्ता द्वारा भी किया जा सकता है
harish.venkat

शायद मैंने गलत डाल दिया। वैसे मेरे प्रोफ़सर का सटीक सवाल था: "यूनिक्स सिस्टम में एक सामान्य उपयोगकर्ता के अधिकारों की अनुमति क्यों नहीं दी जाती है?" ...
20

19
मुझे लगता है कि असली सवाल यह है: गैर-रूट उपयोगकर्ता उन फ़ाइलों chownको देने के लिए उपयोग क्यों नहीं कर सकते हैं जो उनके पास हैं। (मैंने फाइलसिस्टम विन्यास के आधार पर सिस्टम को देखा है, आप कर सकते हैं।)
कीथ थॉम्पसन

जवाबों:


96

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

इस प्रतिबंध का कारण यह है कि किसी अन्य उपयोगकर्ता को एक फ़ाइल देने से बुरी चीजें असामान्य रूप से हो सकती हैं, लेकिन फिर भी महत्वपूर्ण स्थिति। उदाहरण के लिए:

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

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

2
एक और अधिक महत्वपूर्ण मुद्दा यह है कि एक उपयोगकर्ता /bin/bashइसे कॉपी कर सकता है , इसे सेट कर सकता है, और फिर chownयह चाहे जो चाहे। अब उनके पास उस व्यक्ति के रूप में शेल एक्सेस है।
पैट्रिक

18
@Patrick chownहमेशा setuid और setgid बिट्स साफ करता है।
गाइल्स

1
@ गिल्स और अच्छे कारण के लिए ... यदि आप एक शेल बाइनरी को कॉपी कर सकते हैं, तो आप इसे कहीं भी एक्सेस कर सकते हैं, उस पर सेटिड / गिद बिट्स सेट कर सकते हैं, और इसे रूट कर सकते हैं (या कोई भी ऑर्डर जो आपको 6755/0: 0 पर मिलता है) / स्वामित्व) आप उस सिस्टम पर रूट प्राप्त कर सकते हैं। ओह, पैट्रिक की टिप्पणी बिल्कुल याद आती है।
हैनेटज़र

ठीक है, लेकिन अगर मेरे पास dir ( drwxr-xr-x ring0 ring0 .) है जिसमें रूट की एक नियमित फ़ाइल ( -rw-r--r-- root root file) है, तो मैं ऐसा क्यों नहीं कर सकता chown ring0 fileक्योंकि इसे वैसे भी करने की अनुमति है, जैसा कि ring0, cp file x ; rm file ; mv x file(और कुछ वैकल्पिक touch sometime file...)?
रिंग Ø

15

लिनक्स पर, आपको chown करने के लिए CAP_CHOWN क्षमता की आवश्यकता है। रूट को ऐसी अनुमति दी जाती है। स्पष्टीकरण के लिए देखें: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html यदि आप CAP_CHOWN क्षमता देने का इरादा रखते हैं, तो अपने कोड का निर्माण libcap-ng या libcap के साथ करें जैसा कि: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Andentication_Modules_programming_example.html जहाँ आपको CAP_AUDIT_WITE की जगह सरल बनाना है CAP_CHOWN के साथ।


1
+1 करने के लिए आपको रूट नहीं होना चाहिए। क्योंकि आपको कोई और जड़ नहीं बनना है।
ctrl-alt-delor

1
कभी-कभी, आपको CAP_CHOWN की भी आवश्यकता नहीं होती है: unix.stackexchange.com/questions/399975/… कर्नेल स्रोत के मेरे पढ़ने से, प्रत्येक फाइलसिस्टम कार्यान्वयन को चांस के लिए अनुमतियों की जाँच करने का काम सौंपा गया है। और ऐसा लगता है कि एनएफएस के साथ, सर्वर साइड पर अनुमतियों की जांच की जाती है। और अगर सर्वर ... अजीब है ... तो यह संभव है।
माइक एस

0

आप कमांड लॉन्च कर सकते हैं लेकिन अगर आप रूट नहीं हैं तो यह काम नहीं करेगा। यह आसान है: एक उपयोगकर्ता की कल्पना करें जो एक सॉफ्टवेयर को रूट उपयोगकर्ता में बदल सकता है। यह setuid बिट जोड़ सकते हैं और, voilà, आदमी जड़ है! तो, उपयोग chmod के साथ थोड़ा जोड़ सकते हैं, लेकिन फ़ाइलों के मालिक को बदलने का कोई मौका नहीं।


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

मुझे लगता है कि डोम के उत्तर की बात यह है: यदि आप कर सकते हैं तो कल्पना कीजिए। तब परेशानी होती। आपकी बात, जो आप नहीं कर सकते, सही है। लेकिन ओपी पूछ रहा है "क्यों?" सेट्युड बिट को साफ करना एक और सुरक्षा विशेषता है जो फिर से सवाल पूछता है "क्यों?" जिसके बाद मैं डॉम के उत्तर का उल्लेख करूंगा: यदि कोई उपयोगकर्ता धोखा दे सकता है, और यदि कोई उपयोगकर्ता सेट कर सकता है, तो वह कॉम्बो विनाशकारी होगा। मुझे लगता है कि वह एक अच्छा बिंदु बनाता है, भले ही वह थोड़ा गायब हो।
माइक एस।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.