यह निर्धारित करता है कि किन लिनक्स कमांडों को रूट एक्सेस की आवश्यकता है?


23

यह निर्धारित करता है कि किन लिनक्स कमांडों को रूट एक्सेस की आवश्यकता है? मैं उन कारणों को समझता हूं कि यह वांछनीय क्यों है, जो कहते हैं, विशेषाधिकार की apt-getआवश्यकता होनी चाहिए root; लेकिन क्या इन आदेशों को बाकी से अलग करता है? क्या यह केवल स्वामित्व का मामला है और निष्पादन योग्य की अनुमतियों को निष्पादित करना है?


2
यह मुख्य रूप से एक फ़ंक्शन है कि वे किस फ़ाइल को स्पर्श करते हैं और वे किस फ़ंक्शन को कॉल करते हैं।
फेडेरिको क्लेज़ कुल्लोक

9
कुछ ऐप्स को रूट के स्वामित्व वाली फाइलों / dirs तक पहुंच की आवश्यकता होती है। इसलिए, वे सिर्फ कॉल करते हैं openऔर "अनुमति से इनकार" करते हैं। कुछ ऐप चेक करते हैं getuidऔर काम करना बंद कर देते हैं अगर उन्हें रूट से नहीं बुलाया जाता है। कुछ भौतिक रूप से जड़ के स्वामित्व में हैं और केवल मालिक ही उन्हें निष्पादित कर सकते हैं (देखें chmod)। यदि आप पूछ रहे हैं कि क्या ऐप हेडर में कुछ "जरूरतों की जड़" का निशान है - जवाब नहीं है। ऐसा कुछ नहीं है afaik
user996142

1
पीएस: कई syscalls (जैसे प्रसिद्ध बंदरगाह के लिए बाध्यकारी <1024) को रूट एक्सेस की भी आवश्यकता हो सकती है।
user996142

apt-get को रूट की आवश्यकता नहीं होती है। यह / usr / bin डायरेक्टरी में है, askubuntu.com/a/440791/169736 पर
Braiam

आप यहाँ "आवश्यकता" से क्या मतलब निकाल सकते हैं। क्या आपका मतलब है कि कार्यक्रम तब तक निष्पादित नहीं होगा जब तक कि आप रूट नहीं हैं (या sudo अनुमतियाँ हैं), या कि इसे ठीक से काम करने के लिए रूट होने की आवश्यकता है?
jamesqf

जवाबों:


15

लिनक्स में, रूट के विशेषाधिकार एक बिंदु पर "क्षमताओं" में विभाजित थे, इसलिए आप उस दस्तावेज को देखकर रूट के विशेष विशेषाधिकार की पूरी सूची प्राप्त कर सकते हैं man 7 capabilities:।

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

ध्यान दें कि कुछ कमांड जिन्हें रूट एक्सेस की आवश्यकता होती है, sudoउन्हें कुछ ऐसा करने की आवश्यकता नहीं है क्योंकि उनके निष्पादन में SUID बिट सेट है। यह बिट निष्पादन योग्य को मालिक (आमतौर पर रूट) के रूप में चलाने का कारण बनता है जब किसी के द्वारा निष्पादित किया जाता है जिसने पहुंच का निष्पादन किया है। एक उदाहरण sudoखुद ही है क्योंकि बदलते उपयोगकर्ता एक विशेषाधिकार प्राप्त कार्रवाई है जो इसे करने की आवश्यकता है।

संपादित करें: मैं आपके प्रश्न पर ध्यान देता हूं कि आपके पास यह विचार हो सकता है कि आप यह निर्धारित कर सकते हैं कि इसे चलाने से पहले कमांड को रूट एक्सेस की आवश्यकता होगी। ऐसी बात नहीं है। एक प्रोग्राम को कभी-कभी रूट विशेषाधिकारों और अन्य समयों की आवश्यकता होती है, और यह प्रोग्राम द्वारा किया गया निर्णय हो सकता है क्योंकि यह रनटाइम के दौरान प्रदान किए गए डेटा के कारण होता है। उदाहरण के लिए, कॉल करना vim, बिना किसी तर्क के, और फिर कुंजीपटों और चिपकाने की एक श्रृंखला के माध्यम से, इसे किसी फाइल में कुछ लिखने के लिए कहना, इसे लिखने की कोई अनुमति नहीं है, या शायद किसी अन्य आदेश को निष्पादित करने के लिए जिसे स्वयं रूट विशेषाधिकारों की आवश्यकता होगी। निष्पादित करने से पहले कमांड के बारे में कुछ भी संकेत नहीं दे सकता है कि इसे अंततः रूट एक्सेस की आवश्यकता होगी। यह कुछ ऐसा है जो केवल उस बिंदु पर निर्धारित किया जा सकता है जो कुछ ऐसा करने की कोशिश करता है जिसके लिए इसकी आवश्यकता होती है।

वैसे भी, यहां रूट के विशेषाधिकारों के संदर्भित मैनपेज से बहुत कम उदाहरण हैं:

  • यूआईडी (सेटुइड (2), सेट्रेयुड (2), सेट्रेसिड (2), सेटफ्यूसिड (2)) की मनमाने ढंग से जोड़तोड़ करें;
  • बायपास फ़ाइल पढ़ने, लिखने और अनुमति जांच को निष्पादित करती है। (डीएसी "विवेकाधीन अभिगम नियंत्रण" का एक संक्षिप्त नाम है।)
  • सिग्नल भेजने के लिए बायपास की अनुमति की जाँच करें (देखें किल (2))। इसमें ioctl (2) KDSIGACCEPT ऑपरेशन का उपयोग शामिल है।
  • विभिन्न नेटवर्क से संबंधित ऑपरेशन करें:
    • इंटरफ़ेस विन्यास;
    • आईपी ​​फ़ायरवॉल, मास्किंग, और अकाउंटिंग का प्रशासन;
    • रूटिंग तालिकाओं को संशोधित करें;
  • इंटरनेट डोमेन विशेषाधिकार प्राप्त बंदरगाहों (1024 से कम पोर्ट संख्या) के लिए एक सॉकेट बांधें।
  • लोड और अनलोड कर्नेल मॉड्यूल (देखें init_module (2) और delete_module (2));
  • सेट सिस्टम घड़ी (सेसमोफ़ेडे (2), स्टाइम (2), एडजाइमेक्स (2)); वास्तविक समय (हार्डवेयर) घड़ी सेट करें।
  • सिस्टम प्रशासन संचालन की एक श्रृंखला निष्पादित करें जिसमें शामिल हैं: quotactl (2), माउंट (2), umount (2), swapon (2), swapoff (2), sethostname (2), और setdomainname (2);
  • रिबूट (2) और kexec_load (2) का उपयोग करें।
  • चिरोट (2) का प्रयोग करें।
  • अच्छा मूल्य (अच्छा (2), सेटपैरिटी) (2)) उठाएँ और मनमानी प्रक्रियाओं के लिए अच्छा मूल्य बदलें;

32

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

  • 1024 के नीचे एक पोर्ट पर एक सुनने वाला टीसीपी सॉकेट खोलना
  • सिस्टम कॉन्फ़िगरेशन बदलना (जैसे कुछ भी /etc)
  • विश्व स्तर पर सुलभ पुस्तकालयों ( /libऔर /usr/lib) या बायनेरिज़ ( /bin, /usr/bin) को जोड़ना
  • उस उपयोगकर्ता के स्वामित्व वाली कोई भी फ़ाइल नहीं छूना जो स्पर्श कर रहा हो जिसके पास पर्याप्त रूप से अनुमेय मोड नहीं है
  • अन्य उपयोगकर्ताओं की फ़ाइलों का स्वामित्व बदलना
  • प्रक्रिया को प्राथमिकता देना (जैसे renice)
  • अधिकांश सेवाओं को शुरू करना या रोकना
  • कर्नेल कॉन्फ़िगरेशन (जैसे स्वैग को समायोजित करना)
  • फाइलसिस्टम कोटा समायोजित करना
  • "पूर्ण" डिस्क पर लिखना (अधिकांश फाइल सिस्टम रूट उपयोगकर्ता के लिए कुछ स्थान आरक्षित करता है)
  • अन्य उपयोगकर्ताओं के रूप में कार्य करना

4
"परिवर्तन प्रक्रिया प्राथमिकताएं" गैर-रूट उपयोगकर्ता अधिक अच्छा होने के लिए, बारीकियों को बदल सकते हैं। केवल एक चीज जो वे नहीं कर सकते हैं वह है कम अच्छा होना।
ब्रायम

1
मुझे पता है कि यह सूची पूर्ण नहीं है, लेकिन मुझे एक बहुत ही महत्वपूर्ण कार्य लगता है जो केवल सुपरयूजर कर सकता है वह है - या अन्य उपयोगकर्ताओं के रूप में लॉग इन करना
फ़िहग

मैंने प्रक्रिया प्राथमिकताओं के बारे में बुलेट बिंदु को समायोजित किया है, और "अन्य उपयोगकर्ताओं के रूप में कार्य करना" जोड़ा है। उम्मीद है कि पर्याप्त समय और टिप्पणी के साथ, यह सूची और अधिक व्यापक हो जाएगी।
डोपघोटी

0

मुझे लगता है कि यह अनुमतियों को सत्यापित करने के लिए उपयोगकर्ता की पहचान के अनुसार है, न कि अनुमतियों को विभाजित करने के आदेश के अनुसार। फ़ाइलें और उपयोगकर्ता विशेषाधिकार प्राप्त हैं और आदेशों को विभाजित नहीं किया जाना चाहिए।


3
मुझे अशिष्टता से मतलब नहीं है, और मैं समझता हूं कि अंग्रेजी आपकी पहली भाषा नहीं हो सकती है, लेकिन मैं इस जवाब को बिल्कुल भी नहीं समझता हूं, जैसे कि यह कहना चाह रहा है। "अनुसार" का अर्थ है "समझौता" या "अनुरूपता"; मैं यह नहीं देख सकता कि इसे "उपयोगकर्ता की पहचान" के साथ कैसे उपयोग किया जा सकता है। आपका क्या मतलब है "अनुमतियों को विभाजित करने का आदेश"? "विभाजित" का अर्थ है "अलग होना"। किसका "आदेश"? "निजीकृत" फाइलें कैसे होती हैं जब वे कुछ ऐसी नहीं होती हैं जो किसी भी निजीकृत का उपयोग करने के लिए कार्य कर सकती हैं? मुझे लगता है कि मैं इस प्रश्न के संदर्भ में "आदेशों को विभाजित नहीं किया जाना चाहिए" समझ सकता है, लेकिन यह है। जैसा है, यह अप्राप्य है।
जोएल

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