कैसे सूडो तय करता है कि क्या पासवर्ड के लिए पूछना है, जब एक आदेश दिया जाता है जिसे वास्तव में `सुडो` की आवश्यकता नहीं होती है?


10

जब sudoवास्तव में जरूरत नहीं है जो एक आदेश के लिए आवेदन sudo,

  • कभी-कभी यह मुझसे मेरा पासवर्ड नहीं मांगता। मेरी तहत उदाहरण के लिए $HOME, sudo ls

  • लेकिन मुझे याद है कि यह कुछ अन्य कमांड के लिए करता है, हालांकि मैं भूल जाता हूं कि कौन सा है।

तो मैं सोच रहा था कि यह कैसे sudoतय किया जाए कि क्या पासवर्ड के लिए पूछा जाए, जब एक कमांड दी जाए जो वास्तव में ज़रूरत नहीं है sudo? क्या /etc/sudoersनिर्दिष्ट करने में कुछ नियम है?

मेरी वास्तविक समस्या यह है कि जब मैं उपयोग करता हूं du, तो यह कभी-कभी कुछ निर्देशिकाओं के लिए "अनुमति से वंचित" दिखाता है, और कभी-कभी नहीं, शायद इसलिए क्योंकि मुझे कुछ निर्देशिकाओं की अनुमति नहीं है? मैं लागू sudoकरने के लिए duपरवाह किए बिना, और सोचा था कि मैं अपने ही निर्देशिका पर नहीं पासवर्ड के लिए कहा जाएगा परवाह किए बिना, लेकिन वास्तव में।


15
यह तय करना कि क्या कोई प्रोग्राम कुछ ऐसा करने का प्रयास करेगा, जो केवल रूट ही कर सकता है, या एक ऐसी फ़ाइल तक पहुँच प्राप्त कर सकता है, जिसे लागू करने वाले उपयोगकर्ता को एक्सेस करने के लिए मना किया जाता है, वास्तव में प्रोग्राम को चलाने के बिना, भेष में समस्या हल करना है। तो आप यह सुनिश्चित कर सकते हैं कि सूडो क्या कर रहे हैं।
zwol

2
+1 क्योंकि यह प्रश्न एक गलत धारणा पर आधारित है, इसलिए लक्षणों को स्पष्ट रूप से समझाया गया है, और इसका एक स्पष्ट उत्तर है।
dcorking

जवाबों:


22

एक सामान्य कॉन्फ़िगरेशन में, कमांड अप्रासंगिक है। आपको अपना पासवर्ड पहली बार दर्ज करने की आवश्यकता है जब आप sudo का उपयोग करते हैं, और आपको अगले 15 मिनट के लिए उस विशेष शेल में अपने पासवर्ड की आवश्यकता नहीं है।

कंप्यूटर के नजरिए से, "कमांडो की जरूरत है जो सूडो" जैसी कोई चीज नहीं है। कोई भी उपयोगकर्ता किसी भी कमांड को चलाने का प्रयास कर सकता है। परिणाम कुछ भी नहीं हो सकता है, लेकिन एक त्रुटि संदेश जैसे कि "अनुमति अस्वीकृत" या "ऐसी कोई फ़ाइल या निर्देशिका" नहीं है, लेकिन यह हमेशा कमांड को चलाने के लिए संभव है।

उदाहरण के लिए, यदि आप duएक निर्देशिका ट्री पर चलते हैं जिसमें ऐसी सामग्री है जिसे आपको एक्सेस करने की अनुमति नहीं है, तो आपको अनुमति त्रुटियां मिलेंगी। यही "अनुमति से इनकार" का मतलब है। यदि आप चलाते हैं sudo du, तो sudo duरूट के रूप में चलता है, इसलिए आपको अनुमति त्रुटियाँ नहीं मिलती हैं (यह मूल खाते की बात है: root¹ की हमेशा अनुमति होती है)। जब आप दौड़ते हैं sudo du, तो duजड़ के रूप में चलता है, और शुरू sudoहोने के बाद बिल्कुल भी शामिल नहीं होता है du। क्या सूडो कैसे संचालित होता है, क्या डु मुठभेड़ों की अनुमति की त्रुटियां पूरी तरह से अप्रासंगिक हैं।

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

क्या सूडो आपका पासवर्ड मांगता है, यह दो बातों पर निर्भर करता है।

  1. कॉन्फ़िगरेशन के आधार पर, सूडो तय करता है कि आपको प्रमाणित करने की आवश्यकता है या नहीं। डिफ़ॉल्ट रूप से, sudo को एक पासवर्ड की आवश्यकता होती है। इसे कई तरीकों से बंद किया जा सकता है, जिसमें authenticateविकल्प को गलत पर सेट करना और NOPASSWDटैग के साथ लागू नियम शामिल है ।
  2. यदि sudo को आपके पासवर्ड की आवश्यकता होती है, तो यह कैश्ड मान का उपयोग करने के लिए सामग्री हो सकती है। यह ठीक है क्योंकि सूडो को आपके पासवर्ड की आवश्यकता होती है, यह प्रमाणित करने के लिए नहीं है कि इसे किसने कॉल किया है (सूडो को पता है कि उपयोगकर्ता ने इसे क्या आमंत्रित किया है), लेकिन यह पुष्टि करने के लिए कि यह अभी भी आज्ञाओं पर है और आपके कीबोर्ड पर नियंत्रण रखने वाला कोई व्यक्ति नहीं है। डिफ़ॉल्ट रूप से, sudo यह मानने को तैयार है कि आप अभी भी कमांड्स पर हैं यदि आपने 15 मिनट से कम समय पहले अपना पासवर्ड दर्ज किया है (इसे timeoutविकल्प के साथ बदला जा सकता है)। आपको उसी टर्मिनल में पासवर्ड दर्ज करना होगा (ताकि यदि आप एक टर्मिनल पर लॉग इन रहें तो उस टर्मिनल को अप्राप्य छोड़ दें और फिर किसी अन्य टर्मिनल का उपयोग करें, कोई भी कर सकता है 'tty_tickets

¹ लगभग, लेकिन यह इस धागे के दायरे से परे है।


ऐसी फाइलें हो सकती हैं जिनमें निष्पादन योग्य बिट केवल रूट के लिए सेट हो, दूसरों के लिए नहीं। यह असम्बद्ध हो सकता है "निष्पादित करने के लिए रूट की आवश्यकता है"। (बस
नाइटपिटिंग

@ Pa @loEbermann मैंने लिखा है कि " (दुर्लभ) मामले के बारे में कोई भी उपयोगकर्ता नटपैकिंग से बचने के लिए किसी भी कमांड को चलाने का प्रयास कर सकता है "। वहाँ हमेशा एक नाइटपिकर होता है :(
गाइल्स 'एसओ- बुराई को रोकना'

45

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

यदि आप डिफ़ॉल्ट डेबियन कॉन्फ़िगरेशन का उपयोग कर रहे हैं, तो उत्तरार्द्ध सबसे अधिक संभावना है कि यहां क्या शामिल है: sudoआपके पासवर्ड के लिए आपसे पहली बार किसी भी टर्मिनल में इसका उपयोग करने के लिए कहेंगे, तो यह एक निश्चित समय के लिए प्रमाणीकरण टोकन रखेगा। यदि आप sudoउस समय सीमा के भीतर एक ही टर्मिनल में फिर से उपयोग करते हैं , तो यह आपको पासवर्ड के लिए संकेत नहीं देगा।


धन्यवाद। क्या आपका मतलब है कि sudo du /path/to/some/dirया तो हमेशा मेरे पासवर्ड की आवश्यकता होनी चाहिए, या कभी नहीं, चाहे कुछ भी हो /path/to/some/dir?
टिम

12
हाँ। इसे हमेशा आपके पासवर्ड (या नहीं) की आवश्यकता होगी। स्पष्ट रूप से, अगर इसे आपके पासवर्ड की आवश्यकता है, लेकिन इसे पहले ही कैश में संग्रहीत किया गया है, तो यह आपको इसे दर्ज करने के लिए संकेत नहीं देगा।
dr_

5
कड़ाई से बोलते हुए यह मार्ग पर निर्भर हो सकता है, क्योंकि /etc/sudoersआदेश और उनके तर्क निर्दिष्ट कर सकते हैं। हालाँकि, अगर आपने ऐसा कुछ भी नहीं जोड़ा है sudoers(और यदि आपके पास है, तो मुझे आशा है कि आप इसके बारे में जानते होंगे), तर्क मायने नहीं रखेगा (न ही अगर आपके पास रूट के माध्यम से सामान्य पहुंच है, तो कमांड देगा sudo)।
स्टीफन किट

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

6

जो वास्तव में sudo की जरूरत नहीं है एक कमांड के लिए

ऐसा नहीं है कि किसी कमांड को सूडो की जरूरत है या नहीं । जब तुम दौड़ते हो

sudo -u user command

सिस्टम के commandरूप में निष्पादित करता है user

आह्वान सफल है या नहीं और पासवर्ड पूछा जाए या नहीं, यह सुरक्षा नीति sudoers(आमतौर पर कॉन्फ़िगर किया गया /etc/sudoers) पर निर्भर करता है ।

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