ओएस कैसे जानता है कि एक कमांड को सूडो की जरूरत है।


16
  1. जब आप एक निष्पादन योग्य चलाते हैं, तो कभी-कभी ओएस आपकी अनुमति को अस्वीकार कर देगा। उदाहरण के लिए make install, उपसर्ग के साथ चल रहे सिस्टम पथ की आवश्यकता होगी sudo, जबकि उपसर्ग के साथ एक गैर-सिस्टम पथ होने के लिए नहीं कहा जाएगा sudo। ओएस कैसे तय करता है कि एक निष्पादन योग्य को चलाने के लिए एक उपयोगकर्ता की तुलना में अधिक विशेषाधिकार की आवश्यकता होगी, इससे पहले कि प्रोग्राम कुछ करता है?
  2. कभी-कभी, किसी प्रोग्राम को चलाने की अनुमति से इनकार नहीं किया जाएगा, लेकिन यदि इसे चलाया जाता है, तो प्रोग्राम अधिक काम करने में सक्षम होगा sudo। उदाहरण के लिए, जब duकुछ सिस्टम डायरेक्टरी पर चल रहे होते हैं, केवल इसके साथ ही sudoकुछ डायरेक्टरी को एक्सेस कर पाएंगे। ओएस ऐसे कार्यक्रम को चलाने की अनुमति से इनकार क्यों नहीं करता है, या कार्यक्रम को चलाने से पहले अधिक सूचित विशेषाधिकार को प्राथमिकता दी जाती है?
  3. क्या यह सच है कि जब भी काम करेगा sudo, तब suभी काम करेगा, और जब भी काम करेगा su, तब sudoभी काम करेगा? या के साथ su, एक उपयोगकर्ता के साथ और अधिक कर सकते हैं sudo? ओएस कब sudoकाम करता है, और कब suजरूरत है?

क्या आपके लिए इस प्रश्न का उत्तर दिया गया है, या आप अधिक जानकारी चाहेंगे?
बजे ctrl-alt-delor-

जवाबों:


14
  1. कभी-कभी "अनुमति से इनकार" संदेश, उदाहरण के लिए, आपको लिखने की अनुमति देने वाली फाइल सिस्टम अनुमतियों के कारण होता है। निष्पादन योग्य / उपकरण बस यह जांचता है कि क्या यह फाइल सिस्टम आपको वह करने के लिए पर्याप्त अनुमति देता है जो आप करने जा रहे हैं और यदि फाइल सिस्टम द्वारा अस्वीकार किया जाता है तो वह एक त्रुटि फेंकता है। दूसरी बार, टूल स्वयं को आपकी उपयोगकर्ता आईडी की जांच करने से पहले आपको इसका उपयोग करने की अनुमति देगा।
  2. जब आप अपने साथ कोई प्रोग्राम चलाते sudoहैं तो वह किसी अन्य उपयोगकर्ता के नाम से चल रहा होता है। यदि वह उपयोगकर्ता आपके उपयोगकर्ता की तुलना में "अधिक कार्य करने में सक्षम" है और sudoकॉन्फ़िगरेशन आपको इन चीजों को दूसरे उपयोगकर्ता की ओर से sudoकरने की अनुमति देता है तो हां, आपको और चीजें करने की अनुमति देगा। यह आवश्यक नहीं है, हालांकि। यदि आप केवल sudoकमांड लाइन की शुरुआत में sudoसौदा करते हैं root, तो आप वास्तव में जैसे हैं , वैसे ही आमतौर पर आप केवल मृत्यु दर से अधिक काम करने में सक्षम हैं।
  3. सबसे निश्चित रूप से नहीं। उपयोग करने के लिए sudoआपको अपने स्वयं के उपयोगकर्ता पासवर्ड की आपूर्ति करने की आवश्यकता होती है और फिर आपको लक्ष्य उपयोगकर्ता की ओर से कुछ चीजें करने की अनुमति होती है। उपयोग करने के लिए su, आपको लक्ष्य उपयोगकर्ता के पासवर्ड की आवश्यकता होती है और यदि आपके पास यह है, तो आप उस लक्षित उपयोगकर्ता बन जाते हैं जहाँ तक सिस्टम का संबंध है और उपयोगकर्ता कुछ भी कर सकता है।

यह सभी देखें


धन्यवाद। क्या "फाइलसिस्टम अनुमतियों से इनकार करते हुए आप एक्सेस लिखते हैं" = "फ़ाइल के एक्सेस मोड में उपयोगकर्ता के लिए कोई निष्पादन बिट सेट नहीं है, जिसे chmod द्वारा सेट किया जा सकता है"?
सभी

1
@ वास्तव में यह = "फ़ाइल के एक्सेस मोड में उपयोगकर्ता के लिए कोई राइट बिट सेट नहीं है "। और हाँ, यह निश्चित रूप से chmodआप या तो फ़ाइल के मालिक हैं या द्वारा remedied किया जा सकता है root
जोसेफ आर।

क्या सूडो की जरूरत है, पूरी तरह से और पूरी तरह से इस बात पर निर्भर करता है कि क्या उपयोगकर्ता के लिए निष्पादन बिट सेट नहीं है? देखें unix.stackexchange.com/q/147052/674
सभी के लिए StackExchange

@ समय स्पष्ट रूप से आपको निष्पादन की आवश्यकता है पहली जगह में निष्पादन योग्य चलाने में सक्षम होने के लिए।
जोसेफ आर।

1
@JosephR। स्वाभाविक नहीं। chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./helloएक अच्छा उत्पादन "हैलो, विश्व!" उत्पादन।
doneal24

24

आपके द्वारा वर्णित उद्देश्यों के लिए, ओएस यह तय नहीं करता है कि आपको शुरू में कार्यक्रम चलाने के लिए सूडो की आवश्यकता है या नहीं । इसके बजाय, प्रोग्राम चलने के बाद और फिर कुछ ऐसा करने की कोशिश करता है जो वर्तमान उपयोगकर्ता द्वारा अनुमति नहीं है (जैसे कि /usr/binएक नया कमांड स्थापित करने के लिए फ़ाइल लिखना ), ओएस फ़ाइल एक्सेस को रोकता है। इस स्थिति को लेने की कार्रवाई कार्यक्रम तक है; एक संदेश को प्रिंट करने के बाद makeचलना बंद हो जाता है लेकिन duअगली फ़ाइल / निर्देशिका के लिए आगे बढ़ेगा।

suऔर sudoआदेशों रूट विशेषाधिकारों के साथ एक कार्यक्रम चलाने के दो विभिन्न तरीके हैं। वे मामूली विवरणों में भिन्न हो सकते हैं जैसे कि नए प्रोग्राम को शुरू करते समय पर्यावरण की सामग्री, उपयोग किए गए विकल्पों के आधार पर। ओएस को यह तय करने की आवश्यकता नहीं है कि एक या दूसरे कब काम कर सकते हैं।


6

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

इसके साथ su, आपको लक्ष्य का पासवर्ड पता होना चाहिए, और एक बार प्रमाणित होने के बाद, आप उस उपयोगकर्ता के रूप में जो चाहें कर सकते हैं। में suस्थापित करके के उपयोग को प्रतिबंधित किया जा सकता SU_WHEEL_ONLYहै /etc/login.defs। यदि यह सेट है, तो समूह में केवल उपयोगकर्ता ही wheelउपयोग कर सकते हैं su, अन्यथा यह प्रतिबंधित नहीं है। इसके अलावा, suसभी या कुछ भी नहीं है।

sudoउस के संबंध में पूरी तरह से अलग है। अपने साथ sudoकाफी जटिल नीतियों को परिभाषित कर सकते हैं /etc/sudoersकि sudoer (कॉल करने वाला उपयोगकर्ता sudo) को क्या करने की अनुमति है। उदाहरण के लिए, आप उन नीतियों को परिभाषित कर सकते हैं जहाँ कुछ उपयोगकर्ता कुछ विशेष विशेषाधिकार वाले कुछ प्रोग्राम चला सकते हैं, जबकि अन्य उपयोगकर्ता अन्य विशेषाधिकारों के साथ अन्य प्रोग्राम चला सकते हैं।

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


2

tl; dr एक्सेस उस उपयोगकर्ता द्वारा निर्धारित किया जाता है जो एप्लिकेशन चला रहा है, और sudoविभिन्न उपयोगकर्ता के रूप में एप्लिकेशन चलाता है।

पूर्ण संस्करण:

ओएस कैसे जानता है कि एक कमांड को सूडो की जरूरत है।

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

आपके उदाहरणों के लिए:

  1. यदि उपयोगकर्ता के पास विशेष निर्देशिका तक पहुंच है, तो वे make installउस निर्देशिका में जा सकते हैं । अन्यथा वे ऐसा कर सकते हैं root- उपयोग करके sudo

  2. यदि आप किसी निर्देशिका में फ़ाइलों को एक्सेस नहीं कर सकते हैं, duतो आपके लिए चल रहा है या तो इसे एक्सेस नहीं कर सकता है। rootवस्तुतः हर फ़ाइल का उपयोग कर सकते हैं, इसलिए sudo du( duकी ओर से root) उन्हें भी एक्सेस कर सकते हैं।

क्या यह सच है कि जब भी sudo काम करेगा, su भी काम करेगा, और जब भी su काम करेगा, sudo भी काम करेगा?

हां और ना। हां, अगर कार्यक्रम वास्तव में चलाया जाता है, तो इसे दोनों के तहत समान व्यवहार करना चाहिए sudoऔर su। हालाँकि, यह sudoअधिक महीन दाने के नियंत्रण की अनुमति देता है , जो /etc/sudoersफाइल में संग्रहीत नियमों के सेट द्वारा चला सकता है । suअधिक सरल है - यदि आप लक्ष्य उपयोगकर्ता के पासवर्ड को जानते हैं, तो आप उस उपयोगकर्ता की ओर से प्रोग्राम चला सकते हैं।

अंतिम नोट: आवेदन किस तरह से उपयोग से इनकार करता है (यह गर्भपात करता है या उपयोगकर्ता को अनदेखा करता है या चेतावनी देता है) आवेदन पर निर्भर है।


1

किसी के पास अभी तक कोई ✓ नहीं है, इसलिए मैंने एक उत्तर दिया है जिसमें वह सब कुछ है जो मैं सोच सकता था।

1 जब आप एक निष्पादन योग्य चलाते हैं, तो कभी-कभी ओएस आपकी अनुमति को अस्वीकार कर देगा। उदाहरण के लिए, रनिंग मेक उपसर्ग के साथ स्थापित होता है, सिस्टम पथ को सूडो की आवश्यकता होगी, जबकि उपसर्ग के साथ गैर-सिस्टम पथ सूडो के लिए नहीं पूछा जाएगा। ओएस कैसे तय करता है कि एक निष्पादन योग्य को चलाने के लिए एक उपयोगकर्ता की तुलना में अधिक विशेषाधिकार की आवश्यकता होगी, इससे पहले कि प्रोग्राम कुछ करता है?

नहीं जब एक निष्पादन योग्य शुरू किया जाता है तो यह नहीं किया जाता है। यह तब किया जाता है जब निष्पादन योग्य कुछ करने की कोशिश करता है।

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

2 कभी-कभी, किसी प्रोग्राम को चलाने की अनुमति से इनकार नहीं किया जाएगा, लेकिन अगर यह सूडो के साथ चलाया जाता है, तो प्रोग्राम अधिक काम करने में सक्षम होगा। उदाहरण के लिए, कुछ सिस्टम डाइरेक्टरी पर डु चलने पर, केवल सुडो के साथ यह कुछ डायरेक्टरी को एक्सेस कर पाएगा। ओएस ऐसे कार्यक्रम को चलाने की अनुमति से इनकार क्यों नहीं करता है, या कार्यक्रम को चलाने से पहले अधिक सूचित विशेषाधिकार को प्राथमिकता दी जाती है?

ओएस यह नहीं जान सकता कि कार्यक्रम क्या करेगा। इसलिए यह शुरू होने से पहले अनुमतियों की जांच करने और क्या करना है यह तय करने के लिए कार्यक्रम पर निर्भर है। हालांकि यह ऐसा करने के लिए नहीं है।

नोट: एंड्रॉइड पर एक मैनिफ़ेस्ट है, इसमें एप्लिकेशन यह घोषित करता है कि वह किन विशेषाधिकारों का उपयोग कर सकता है। ओएस किसी भी एप्लिकेशन को मार देगा जो विशेषाधिकार का उपयोग करने की कोशिश करता है जिसे वह घोषित नहीं करता है, और ओएस हमेशा यह गारंटी नहीं देता है कि विशेषाधिकार को सम्मानित किया जा सकता है। उदाहरण के लिए नेटवर्क एक्सेस उपलब्ध नहीं हो सकता है।

2 क्या यह सच है कि जब भी sudo काम करेगा, su भी काम करेगा, और जब भी su काम करेगा, sudo भी काम करेगा? या su के साथ, एक उपयोगकर्ता sudo से अधिक कर सकता है? जब sudo काम करता है, और su की आवश्यकता होती है, तो OS कैसे तय करता है?

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

su मूल उपकरण था, इसके लिए आपको उस उपयोगकर्ता / समूह का पासवर्ड दर्ज करना होगा जिसे आप बदल रहे हैं।

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

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