পাইপযুক্ত সুডো কমান্ডে পাসওয়ার্ড প্রবেশ করানো কেন কাজ করে?


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 cat; ব্যাশে, স্ট্যান্ডআউটের পাশাপাশি এটি পুনর্নির্দেশের চেষ্টা করুন

sudo cat /etc/resolv.conf |& less

এবং দেখুন প্রতিক্রিয়াটি কতটা আলাদা।


16
যদিও এই উত্তরটি ঠিক আছে যে sudoস্ট্যান্ডিন এখনও উদাহরণ কমান্ডের সাথে টার্মিনালের সাথে সংযুক্ত রয়েছে, এটি এটির পাসওয়ার্ড কীভাবে আসে তার সাথে এটি সরাসরি প্রাসঙ্গিক নয়: ডিফল্টরূপে sudoস্টিডিনের মাধ্যমে পাসওয়ার্ডগুলির অনুরোধ করবে না এবং এটির মাধ্যমে প্রম্পটটি প্রদর্শন করবে না stderr- আপনি এটি 2>/dev/nullনিশ্চিত করার চেষ্টা করতে পারেন পরিবর্তে, sudoসরাসরি tty অ্যাক্সেস।
বব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.