जवाबों:
वास्तव में, एक सामान्य मंगलाचरण 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 specifiedsudoउपयोग करने के लिए वापस गिर जाएगा stdinऔर stderrयहां तक कि अगर यह विशेष रूप से अनुरोध नहीं किया गया था। मदहैटर का उत्तर भी यहाँ लागू होगा।पाइप sudo catस्टडआउट को स्टडिन से जोड़ता है less, इसलिए sudo catस्टड अप्रभावित है, और पासवर्ड प्राप्त करने में सक्षम है।
संकेत के रूप में, यह बाहर जाता है sudo catstderr; कोलाहल में, पुन: निर्देशित करने का प्रयास करें कि stdout के साथ, का उपयोग करके
sudo cat /etc/resolv.conf |& less
और देखें कि प्रतिक्रिया कितनी अलग है।
sudoस्टैडेन अभी भी उदाहरण कमांड के साथ टर्मिनल से जुड़ा है, यह सीधे तौर पर प्रासंगिक नहीं है कि यह अपना पासवर्ड कैसे प्राप्त करता है: डिफ़ॉल्ट रूपsudoसे स्टड के माध्यम से पासवर्ड का अनुरोध नहीं करेगा और न ही इसके माध्यम से संकेत देगाstderr- आप इस बात की2>/dev/nullपुष्टि करने की कोशिश कर सकते हैं । इसके बजाय,sudoसीधे tty तक पहुँचता है।