क्यों sudo कमांड को रूट पासवर्ड की आवश्यकता नहीं है?


48

मैं अब थोड़ी देर के लिए लिनक्स का उपयोग कर रहा हूं और जब भी मैंने टाइप किया sudoमुझे लगा कि मैं कमांड के लिए रूट उपयोगकर्ता पर स्विच कर रहा हूं।

जाहिरा तौर पर यह सच नहीं है क्योंकि मुझे केवल मेरे उपयोगकर्ता खाते का पासवर्ड चाहिए। मैं अनुमान लगा रहा हूं क्योंकि मैंने कई उपयोगकर्ताओं के साथ काम नहीं किया है जिन्हें मैंने वास्तव में वास्तविक दुनिया में नहीं देखा है।

मैं अनिश्चित हूं कि उबंटू मेरा पहला खाता कैसे सेट करता है। क्या कोई रूट उपयोगकर्ता है? क्या मैं जड़ हूं? मैं अनुमान लगा रहा हूँ कि मैंने अभी स्थापना पर एक नया उपयोगकर्ता बनाया है, लेकिन इसने मुझे मूल विशेषाधिकार दिए हैं? बस यहाँ थोड़ा उलझन में है ...

तो मुझे अपने उपयोगकर्ता के पासवर्ड के साथ रूट कमांड चलाने की अनुमति क्यों है?


किस उपयोगकर्ता का उपयोग करने के लिए आपको पासवर्ड की आवश्यकता होती है और जिसमें आप नहीं करते हैं? आप कौन सी कमांड चला रहे हैं? याद रखें, उस sudo को आपके पासवर्ड को कुछ समय के लिए स्टोर करना है, इससे पहले कि आप उसे फिर से टाइप करें।
Braiam

11
sudo"सेट्युड" बिट सेट है। तो यह उस उपयोगकर्ता के रूप में चलता है जो इसका मालिक है (जो कि यदि मैं गलत नहीं हूं तो सभी मानक प्रणालियों पर मूल है), न कि इसे लॉन्च करने वाले उपयोगकर्ता को। sudoफिर /etc/sudoersफ़ाइल लोड करता है और जाँचता है कि इसे लॉन्च करने के आधार पर क्या अनुमति है।
LawrenceC


1
मुझे खेद है कि अगर मैं किसी और की बात को दोहरा रहा हूं, लेकिन मैं इसे नहीं पा सका। जवाब है: यह एक नीतिगत निर्णय है। प्रेरणा पर मेरा सबसे अच्छा अनुमान है, एक बड़ी स्थापना में जहां आपके पास sudoविशेषाधिकार वाले कई लोग हैं , शायद भौगोलिक रूप से वितरित स्थानों पर काम कर रहे हैं और 24 × 7 पारियों पर, आप तुरंत एक व्यक्ति के विशेषाधिकार प्राप्त उपयोग को रद्द करने में सक्षम होना चाहते हैं (जैसे, यदि आपको उसकी ईमानदारी पर शक है)। यदि हर कोई वन-एंड-ओनली रूट पासवर्ड का उपयोग कर रहा है, और आप बदलते हैं कि पूर्व समन्वय के बिना, अराजकता हो सकती है। …
जी-मैन का कहना है कि G मोनिका ’

1
@HagenvonEitzen मुझे पता है कि मैं एक दो दिन लेट हूँ, लेकिन यह हमारे सवाल का एक धोखा कैसे नहीं है?
स्ट्रगलर

जवाबों:


65

विवरण में यह निम्नलिखित तरीके से काम करता है:

  1. /usr/bin/sudoनिष्पादन योग्य फ़ाइल के पास बिट सेट है, इसलिए किसी अन्य उपयोगकर्ता द्वारा निष्पादित किए जाने पर भी, यह फ़ाइल स्वामी की उपयोगकर्ता आईडी (उस स्थिति में रूट) के साथ चलता है।

  2. sudo/etc/sudoersफ़ाइल में जांचें कि आपके पास क्या विशेषाधिकार हैं और क्या आप कमांड को चलाने की अनुमति दे रहे हैं। सीधे शब्दों में कहें, /etc/sudoersएक फाइल है जो परिभाषित करती है कि कौन से उपयोगकर्ता sudoतंत्र का उपयोग करके चला सकते हैं ।

    यह है कि कैसे फ़ाइल मेरे Ubuntu पर देखो:

    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    
    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL
    

    तीसरी पंक्ति वह है जो संभवतः आपके हित में है। यह "sudo" समूह में किसी को भी किसी भी उपयोगकर्ता के रूप में किसी भी कमांड को निष्पादित करने की अनुमति देता है।

    जब उबंटू स्थापना के दौरान पहला खाता स्थापित करता है तो यह उस खाते को "sudo" समूह में जोड़ता है। आप देख सकते हैं कि कौन से समूह groupकमांड के साथ संबंधित हैं ।

  3. sudoआपसे पासवर्ड मांगता है। इस तथ्य के बारे में कि इसे उपयोगकर्ता के पासवर्ड की आवश्यकता है, न कि रूट के एक, जो कि sudoers मैनुअल का एक अंश है :

    प्रमाणीकरण और लॉगिंग

    Sudoers सुरक्षा नीति के लिए आवश्यक है कि अधिकांश उपयोगकर्ता sudo का उपयोग करने से पहले स्वयं को प्रमाणित कर लें। यदि इनवोकिंग उपयोगकर्ता रूट के रूप में है, तो लक्ष्य उपयोगकर्ता की आवश्यकता नहीं है, यदि टारगेट उपयोगकर्ता चालान उपयोगकर्ता के समान है, या यदि नीति ने उपयोगकर्ता या कमांड के लिए प्रमाणीकरण को अक्षम कर दिया है। Su (1) के विपरीत, जब sudoers को प्रमाणीकरण की आवश्यकता होती है, तो यह उपयोगकर्ता के क्रेडेंशियल्स को मान्य करता है, न कि लक्ष्य उपयोगकर्ता (या रूट) के क्रेडेंशियल्स को। इसे बाद में वर्णित rootpw, targetpw और runaspw झंडे के माध्यम से बदला जा सकता है।

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

    %sudo   ALL=(ALL:ALL) NOPASSWD: ALL
    
  4. प्रमाणीकरण के बाद, sudoबच्चे की प्रक्रिया को नियंत्रित करता है जो कि आह्वान किया हुआ आदेश चलाता है। बच्चा अपने माता-पिता से रूट यूजर आईडी प्राप्त करता है - sudoप्रक्रिया।


इसलिए, आपके प्रश्नों का सटीक उत्तर देना:

मुझे लगा कि मैं कमांड के लिए रूट उपयोगकर्ता पर स्विच कर रहा हूं।

तुम सही थे। प्रत्येक कमांड sudoरूट यूजर आईडी के साथ चलता है।

क्या कोई रूट उपयोगकर्ता है?

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

क्या मैं जड़ हूं?

नहीं, तुम जड़ नहीं हो। आपको केवलsudo ऊपर वर्णित तंत्र का उपयोग करके, एक रूट के रूप में व्यक्तिगत कमांड चलाने का विशेषाधिकार है

तो मुझे अपने उपयोगकर्ता के पासवर्ड के साथ रूट कमांड चलाने की अनुमति क्यों है?

आपको केवल sudoआंतरिक सुरक्षा तंत्र के कारण उपयोगकर्ता का पासवर्ड दर्ज करना होगा । इसे आसानी से बंद किया जा सकता है। आप अपनी मूल शक्तियों को निर्धारित करते हैं /usr/bin/sudo, क्योंकि आपके द्वारा दर्ज किए गए किसी भी पासवर्ड के कारण नहीं।


6
जवाब वास्तव में सेतु के हिस्से से शुरू होना चाहिए, क्योंकि यही कारण है कि यह वास्तव में संभव है। / etc / sudoers, sudo कमांड के लचीलेपन का कारण है।
डेनियल कुल्मन

दिलचस्प। मुझे नहीं पता था कि आप निर्दिष्ट कर सकते हैं कि sudoमेरे पासवर्ड को इनपुट किए बिना चलाया जा सकता है। बहुत बढ़िया जवाब!
jwir3

1
ध्यान दें कि rootpwफ्लैग इन के साथ रूट पासवर्ड पूछने के लिए sudo को कॉन्फ़िगर किया जा सकता है sudoers
मोनिका - एम। श्रोडर

2
आप मूल उपयोगकर्ता के रूप में वास्तव में लॉगिन कर सकते हैं : sudo su - rootबस यही करेंगे और आपको रूट टर्मिनल देंगे। हालाँकि आप रूट के रूप में आसानी से डेस्कटॉप सत्र में प्रवेश नहीं कर सकते हैं।
jmiserez

1
मूल रूप sudoसे अपने आप में मूल विशेषाधिकार है, और यह तय करता है कि क्या आपको कॉन्फ़िगरेशन फ़ाइल के आधार पर प्रदान करना है।
सियुआन रेन

15
  • इसका पूरा मतलब sudoयह है कि आप किसी और के विशेषाधिकार (आमतौर पर रूट) इस दूसरे खाते के पासवर्ड (विपरीत su) के लिए पूछे बिना प्रदान करें ।

  • sudo आपके पासवर्ड के लिए यहाँ पूछ रहा है कि यह सुनिश्चित करने के लिए कि कोई राहगीर आपके अनलॉक टर्मिनल का दुरुपयोग नहीं करेगा।

  • उबंटू और कई अन्य लिनक्स और यूनिक्स ओएस इंस्टॉलेशन समय पर बनाए गए प्रारंभिक खाते को किसी भी कमांड को चलाने का अधिकार प्रदान कर रहे हैं root

  • जबकि rootअभी भी लिनक्स के तहत एक खाता है, प्रत्यक्ष rootलॉगिन एक बेहतर सुरक्षा और पता लगाने की क्षमता के लिए डिफ़ॉल्ट रूप से अक्षम कर रहे हैं।


7
यद्यपि प्रत्यक्ष रूट लॉगिन वास्तव में डिफ़ॉल्ट रूप से अक्षम है, फिर भी उबंटू के साथ एक रूट खाता है। यह कम से कम सोलारिस पर एक खाता नहीं है जहां यह डिफ़ॉल्ट रूप से एक भूमिका है।
जुलैग्रे

बहुत बहुत धन्यवाद - मैं हमेशा सोचता था कि यह कैसे काम करता है, और यह अब बहुत अधिक समझ में आता है।
mikeserv

5

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

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

कुछ बिंदु पर, थोड़ा अधिक अभिगम नियंत्रण जोड़ा गया: उपयोग करने के लिए su, आपको wheelसमूह का सदस्य होना चाहिए । लेकिन जब से आप अभी भी किसी भी कमांड को निष्पादित कर सकते हैं, तब भी यह समझ में आता है कि आपको उनका पासवर्ड जानना आवश्यक है।

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

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

यह आवश्यकता सुपरसुअर के लिए माफ कर दी गई है - यह खाता सिस्टम का उपयोग किए बिना लगभग कुछ भी कर सकता है sudo, इसलिए इसे अतिरंजित माना गया। कॉन्फ़िगरेशन फ़ाइल में यह निर्दिष्ट करना भी संभव है कि उपयोगकर्ताओं को एक पासवर्ड दर्ज करने की आवश्यकता नहीं है - कुछ संगठन इसका उपयोग तब करते हैं जब वे मानते हैं कि उनके कार्य केंद्र के वातावरण की भौतिक सुरक्षा दुरुपयोग को रोकने के लिए पर्याप्त है।


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

बस sudo को /var/log/auth.log में लॉग-इन करने के साथ-साथ चीन से कुछ IP सहित कई अन्य सामान मेरे सिस्टम पर रूट ssh एक्सेस प्राप्त करने की कोशिश कर रहा है - इसलिए, यदि आप केवल sudo देखना चाहते हैं, तो आपको फ़िल्टर करना होगा यह grep या इसी तरह के माध्यम से।
जो

सही बात। suभी लॉग करता है, लेकिन चूंकि यह सिर्फ एक नया शेल शुरू करता है, यह सिर्फ इस तथ्य को लॉग करता है कि किसी ने इसे चलाया था।
बारमर 25/14

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

1
@richard चूंकि sudoआपको यह प्रतिबंधित करने की अनुमति देता है कि उपयोगकर्ता किस कमांड को निष्पादित कर सकता है, आप यह सुनिश्चित करने का प्रयास कर सकते हैं कि आप उन्हें उन कमांड तक पहुंच नहीं देते हैं जो लॉग को अधिलेखित कर देंगे।
बमर

3

आपके प्रश्न का उत्तर है:

जब आप sudo के साथ कमांड चलाते हैं , तो आप एलिवेटेड प्राइवेटिलिजेस के साथ कमांड चलाते हैं , जो रूट प्राइवेटलीजेस है । आपको केवल अपना सामान्य उपयोगकर्ता पासवर्ड टाइप करना होगा क्योंकि आप (उपयोगकर्ता) को sudoers फ़ाइल में जोड़ा गया है जो आपको रूट प्राइवेटलीजेस देता है ।


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

1
@aragilar हाँ sudoहमेशा एलिवेटेड विशेषाधिकार नहीं देती है, लेकिन यह उन्नत विशेषाधिकारों पर चलती है, अपनी चीज़ करने के बाद (प्रमाणीकरण की जाँच करके, यह विशेषाधिकार छोड़ सकती है)। उपयोगकर्ता को बदलने में सक्षम होने के लिए इन उन्नत विशेषाधिकार की आवश्यकता होती है।
ctrl-alt-delor

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

1

सबसे पहले, किसी खाते को अक्षम करना आमतौर पर एन्क्रिप्टेड पासवर्ड को * पर सेट करके किया जाता है, जो किसी भी स्ट्रिंग का एन्क्रिप्टेड मूल्य नहीं है। मैं अभी जाँच नहीं कर सकता, लेकिन मेरा मानना ​​है कि उबंटू जड़ के लिए भी यही करता है। तो तकनीकी रूप से, उबंटू पर कोई रूट पासवर्ड नहीं है।

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


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