अब तक, मैं जो इकट्ठा कर सकता हूं वह यह है कि फ़ेकरूट का उपयोग किसी फ़ाइल को स्वामित्व देने के लिए किया जाता है जिसे रूट करने की आवश्यकता होती है जब यह अनज़िप / टार्ड होता है। मेरा सवाल यह है कि आप सिर्फ चांस के साथ ऐसा क्यों नहीं कर सकते?
क्योंकि आप ऐसा नहीं कर सकते chown
, कम से कम एक गैर-रूट उपयोगकर्ता के रूप में नहीं। (और यदि आप रूट के रूप में चल रहे हैं, तो आपको इसकी आवश्यकता नहीं है fakeroot
।) इसका पूरा बिंदु है fakeroot
: उन प्रोग्रामों को अनुमति देने के लिए जो रूट के रूप में सामान्य उपयोगकर्ता के रूप में चलाने की अपेक्षा करते हैं, जबकि रूट-आवश्यकता वाले ऑपरेशन सफल होते हैं।
इसका उपयोग आमतौर पर एक पैकेज का निर्माण करते समय किया जाता है, ताकि स्थापित किए जा रहे पैकेज की स्थापना प्रक्रिया त्रुटि के बिना आगे बढ़ सकती है (भले ही यह चलता है chown root:root
, या install -o root
, आदि)। fakeroot
नकली स्वामित्व को याद करता है जिसे उसने फाइलें देने का ढोंग किया था, इसलिए स्वामित्व को देखने वाले बाद के संचालन इसे वास्तविक के बजाय देखते हैं; यह tar
उदाहरण के लिए फ़ाइलों को रूट के स्वामित्व में संग्रहीत करने की अनुमति देता है ।
फ़ाक्सकूट लिनक्स पर अवांछित विशेषाधिकार वृद्धि को कैसे रोकता है? अगर fakeroot एक फ़ाइल बनाने में टार कर सकता है जो रूट के स्वामित्व में थी, तो SUID के साथ कुछ ऐसा क्यों नहीं किया गया?
fakeroot
tar
कुछ भी करने में छल नहीं करता है , यह उन परिवर्तनों को सुरक्षित रखता है जो निर्माण को उन परिवर्तनों को प्रभावित किए बिना बनाना चाहते हैं जो निर्माण की मेजबानी करने वाले सिस्टम पर प्रभाव डालते हैं। आपको fakeroot
रूट और suid के स्वामित्व वाली फ़ाइल वाली टारबॉल का उत्पादन करने की आवश्यकता नहीं है ; यदि आपके पास एक बाइनरी है evilbinary
, तो एक tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
नियमित उपयोगकर्ता के रूप में चल रहा है , एक टारबॉल युक्त होगा evilbinary
, जो रूट के स्वामित्व में है, और सुसाइड करेगा। हालाँकि, आप उस टारबॉल को निकालने और उन अनुमतियों को संरक्षित करने में सक्षम नहीं होंगे, जब तक आप ऐसा नहीं करते हैं: जब तक कि यहां कोई विशेषाधिकार नहीं है। fakeroot
एक विशेषाधिकार डी है-संक्रमण उपकरण: यह आपको एक नियमित उपयोगकर्ता के रूप में एक बिल्ड को चलाने की अनुमति देता है, जबकि बिल्ड के प्रभाव को संरक्षित करते हुए यदि इसे रूट के रूप में चलाया गया होता है, तो उन प्रभावों को बाद में फिर से चलाने की अनुमति मिलती है। प्रभाव "वास्तविक के लिए" हमेशा जड़ विशेषाधिकारों की आवश्यकता होती है; fakeroot
उन्हें प्राप्त करने का कोई तरीका प्रदान नहीं करता है।
fakeroot
अधिक विस्तार से उपयोग को समझने के लिए , विचार करें कि एक सामान्य वितरण बिल्ड में निम्न ऑपरेशन (कई अन्य के बीच) शामिल हैं:
- रूट द्वारा स्वामित्व वाली फ़ाइलें स्थापित करें
- ...
- उन फ़ाइलों को संग्रहीत करें, जो अभी भी रूट के स्वामित्व में हैं, ताकि जब उन्हें निकाला जाए, तो वे रूट के स्वामित्व में होंगे
यदि आप रूट नहीं हैं तो पहला भाग स्पष्ट रूप से विफल रहता है। हालांकि, जब fakeroot
एक सामान्य उपयोगकर्ता के रूप में चल रहा है , तो प्रक्रिया बन जाती है
- रूट के स्वामित्व वाली फ़ाइलें स्थापित करें - यह विफल रहता है, लेकिन
fakeroot
दिखावा करता है कि यह सफल होता है, और बदले हुए स्वामित्व को याद रखता है
- ...
- उन फ़ाइलों को संग्रहित करें, जो अभी भी रूट के स्वामित्व में हैं - जब
tar
(या जो भी अभिलेखागार का उपयोग किया जा रहा है) सिस्टम से पूछता है कि फ़ाइल का स्वामित्व क्या है, fakeroot
पहले दर्ज की गई स्वामित्व से मेल खाने के उत्तर को बदल देता है
इस प्रकार आप रूट के बिना एक पैकेज बिल्ड को चला सकते हैं, जबकि यदि आप वास्तव में रूट के रूप में चल रहे थे तो वही परिणाम प्राप्त करेंगे। उपयोग करना अधिक fakeroot
सुरक्षित है: सिस्टम अभी भी कुछ भी नहीं कर सकता है जो आपका उपयोगकर्ता नहीं कर सकता है, इसलिए एक दुष्ट इंस्टॉलेशन प्रक्रिया आपके सिस्टम को नुकसान नहीं पहुंचा सकती है (आपकी फ़ाइलों को छूने से परे)।
डेबियन में, बिल्ड टूल्स में सुधार किया गया है ताकि इसे और अधिक की आवश्यकता न हो, और आप बिना पैकेज का निर्माणfakeroot
कर सकें । यह dpkg
सीधे Rules-Requires-Root
निर्देश (देखें rootless-builds.txt
) के साथ समर्थित है ।
के उद्देश्य fakeroot
और जड़ के रूप में चलने के सुरक्षा पहलुओं को समझने के लिए , यह पैकेजिंग के उद्देश्य पर विचार करने में मदद कर सकता है। जब आप सिस्टम-वाइड के उपयोग के लिए स्रोत से सॉफ़्टवेयर का एक टुकड़ा स्थापित करते हैं, तो आप निम्नानुसार आगे बढ़ते हैं:
- सॉफ्टवेयर का निर्माण (जो विशेषाधिकारों के बिना किया जा सकता है)
- सॉफ़्टवेयर स्थापित करें (जिसे रूट के रूप में करने की आवश्यकता है, या कम से कम उपयोगकर्ता को उपयुक्त सिस्टम स्थानों पर लिखने की अनुमति दी जाए)
जब आप सॉफ़्टवेयर का एक टुकड़ा पैकेज करते हैं, तो आप दूसरे भाग में देरी कर रहे हैं; लेकिन ऐसा सफलतापूर्वक करने के लिए, आपको अभी भी सिस्टम में सिस्टम के बजाय सॉफ्टवेयर को "इंस्टॉल" करने की आवश्यकता है। इसलिए जब आप सॉफ्टवेयर पैकेज करते हैं, तो यह प्रक्रिया बन जाती है:
- सॉफ़्टवेयर का निर्माण करें (कोई विशेष विशेषाधिकार नहीं)
- सॉफ़्टवेयर स्थापित करने का दिखावा (फिर से कोई विशेष विशेषाधिकार नहीं)
- पैकेज (डिट्टो) के रूप में सॉफ्टवेयर इंस्टालेशन पर कब्जा
- पैकेज उपलब्ध करें (डिट्टो)
अब एक उपयोगकर्ता पैकेज को स्थापित करके प्रक्रिया को पूरा करता है, जिसे रूट (या फिर, उपयुक्त स्थानों पर लिखने के लिए उपयुक्त विशेषाधिकारों वाला उपयोगकर्ता) के रूप में किया जाना चाहिए। यह वह जगह है जहां देरी विशेषाधिकार प्राप्त प्रक्रिया का एहसास होता है, और इस प्रक्रिया का एकमात्र हिस्सा है जिसे विशेष विशेषाधिकार की आवश्यकता होती है।
fakeroot
हमें सॉफ़्टवेयर इंस्टॉलेशन प्रक्रियाओं को चलाने और रूट के रूप में चलने के बिना, उनके व्यवहार को पकड़ने की अनुमति देकर उपरोक्त चरणों 2 और 3 के साथ मदद करता है।