पासवर्ड पाइप से काम करने वाले कमांडो में क्यों प्रवेश करता है?


25

यदि मैं करता हूँ:

sudo cat /etc/resolv.conf | less

यह मुझे पासवर्ड के लिए संकेत देगा, भले ही कम (संभवतः) स्टड लेता है। पासवर्ड किस प्रॉम्प्ट पर दिखाया गया है और उसे इनपुट कैसे वापस मिलता है?

जवाबों:


48

वास्तव में, एक सामान्य मंगलाचरण sudoपासवर्ड को बिल्कुल भी नहीं पढ़ता है stdin। इसके बजाय, sudoसीधे नियंत्रण टर्मिनल ( ttyया pty, /dev/ttyविशेष फ़ाइल के माध्यम से ) तक पहुंच प्राप्त करेगा और शीघ्र आउटपुट और वर्णों को सीधे पढ़ेगा। इसे स्रोत tgetpass.cमें फ़ाइल में देखा जा सकता है sudo

कुछ अन्य परिदृश्य हैं:

  • यदि कोई askpassप्रोग्राम निर्दिष्ट है, उदाहरण के लिए -Aपरम में, उस प्रोग्राम को लागू किया जाएगा।
  • अन्यथा, यदि आप विशेष रूप sudoसे झंडे के stdinसाथ पढ़ने का अनुरोध करते हैं , -Sऔर यह भी संकेत लिखेगा stderr। यह वह मामला है जहां मदहैटर का उत्तर लागू होता है।
  • अन्यथा, यदि कोई ttyउपलब्ध नहीं है
    • यदि पासवर्ड प्रतिध्वनि अक्षम है (यह डिफ़ॉल्ट रूप से, visiblepwध्वज द्वारा नियंत्रित है sudoers), sudoत्रुटि की रिपोर्ट करेगा:no tty present and no askpass program specified
    • अन्यथा, sudoउपयोग करने के लिए वापस गिर जाएगा stdinऔर stderrयहां तक ​​कि अगर यह विशेष रूप से अनुरोध नहीं किया गया था। मदहैटर का उत्तर भी यहाँ लागू होगा।

10

पाइप sudo catस्टडआउट को स्टडिन से जोड़ता है less, इसलिए sudo catस्टड अप्रभावित है, और पासवर्ड प्राप्त करने में सक्षम है।

संकेत के रूप में, यह बाहर जाता है sudo catstderr; कोलाहल में, पुन: निर्देशित करने का प्रयास करें कि stdout के साथ, का उपयोग करके

sudo cat /etc/resolv.conf |& less

और देखें कि प्रतिक्रिया कितनी अलग है।


16
हालांकि यह उत्तर सही है कि sudoस्टैडेन अभी भी उदाहरण कमांड के साथ टर्मिनल से जुड़ा है, यह सीधे तौर पर प्रासंगिक नहीं है कि यह अपना पासवर्ड कैसे प्राप्त करता है: डिफ़ॉल्ट रूप sudoसे स्टड के माध्यम से पासवर्ड का अनुरोध नहीं करेगा और न ही इसके माध्यम से संकेत देगा stderr- आप इस बात की 2>/dev/nullपुष्टि करने की कोशिश कर सकते हैं । इसके बजाय, sudoसीधे tty तक पहुँचता है।
बॉब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.