উত্তর:
নিজেকে বোঝানোর উপায় হিসাবে যে sudo
কেবল প্রথম কমান্ডটি ব্যবহার করে এটি চালিত হয় এবং প্রথম পাইপটি পরে সমস্ত কিছু আপনার মূল ব্যবহারকারী আইডি হিসাবে চালানো হয় আপনি এটি দেখার জন্য এই নিরর্থক শৃঙ্খলা ব্যবহার করতে পারেন।
$ sudo whoami > file1 | whoami > file2 | whoami > file3
তারপরে আপনি যখন cat
এই ফাইলগুলি দেখতে পাবেন তখন নীচের ব্যবহারকারীর নামগুলি:
$ cat file{1..3}
root
saml
saml
তবে আপনি যদি একটি সাবশেল চালান:
$ sudo sh -c 'whoami > file4 | whoami > file5 | whoami > file6'
তারপরে আপনি cat
এই ফাইলগুলি যখন দেখবেন নীচের ব্যবহারকারীর নামগুলি:
$ cat file{4..6}
root
root
root
আপনার মন্তব্যটি sudo foo1 | sudo foo2 ...
কখনই কাজ করবে না, যেহেতু আউটপুটটি sudo foo1
খাওয়ানো হবে sudo foo2
। আমার whoami
উদাহরণগুলি ব্যবহার করে এটি দেখায় যে কমান্ডগুলির শৃঙ্খলা কিছুই করে না।
$ sudo whoami | sudo whoami | sudo whoami
root
প্রথম জন দৌড়েছে, তবে ইনপুট নিতে সজ্জিত না হওয়ায় ২ য় এবং তৃতীয় কোনও কিছুই করবে না। বরং আমি মনে করি আপনি এরকম কিছু লিখতে চেয়েছিলেন:
$ sudo whoami;sudo whoami;sudo whoami
root
root
root
এটি 3 টি বিভিন্ন কমান্ড প্রম্পটে 3 বার চালানোর সমতুল্য। অথবা এটা:
$ sudo whoami && sudo whoami && sudo whoami
root
root
root
তবে কখনও এই শেষটি করবেন না। এটি পরের অংশে অন্তর্ভুক্ত।
এগুলি আমার সেরা কাজ নয় তবে অন্যান্য উপায় যা আপনি আমাকে একাধিক কমান্ড ব্যবহার করে দেখতে পেয়েছেন sudo
। আমি তাদের এখানে কেবলমাত্র পড়ানোর জন্য দেখাই যাতে অন্যরা প্রয়োজনীয়ভাবে তাদের কাজ করে!
$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh
কিভাবে এটা কাজ করে?
ডাবল উদ্ধৃতিগুলির মধ্যে ইকো প্রোগ্রামটি সুডোর কারণে মূল হিসাবে চলছে, তবে ইকোর আউটপুটটিকে কেবলমাত্র রুট-ফাইলের মধ্যে পুনঃনির্দেশ করছে যে শেলটি এখনও আপনার মতো চলছে। আপনার বর্তমান শেলটি sudo
শুরু হওয়ার আগে পুনর্নির্দেশটি করে ।
$ sudo tee /proc/sys/vm/drop_caches <<<1
কিভাবে এটা কাজ করে?
এই পদ্ধতিটি tee
প্রোগ্রামটিকে মূল হিসাবে চালিত করে এবং এখানে স্ট্রিং থেকে ইনপুট নেয় যা কমান্ডটি sudo
চাওয়ার আগে চলে tee
।
# this way
$ sudo -s -- 'whoami'
# or this way
sudo -s -- sh -c 'whoami;whoami'
কিভাবে এটা কাজ করে?
এগুলি দেখতে অন্যরকম হতে পারে তবে তারা সত্যই একই জিনিস করছে। -s
স্যুইচটি ব্যবহার করার সময় , sudo
একটি একক কমান্ড চালাবে। এটি থেকে বাঁচার কোনও উপায় আছে কিনা তা আমি কখনই বুঝতে পারি না। এগুলির মতো কিছুই কাজ করবে না।
# this
$ sudo -s -- 'whoami;whoami'
# or this
$ sudo -s -- 'whoami\;whoami'
তবে ম্যান পৃষ্ঠাটি দেখার জন্য, -s
স্যুইচটি বলেছে যে এটি /etc/passwd
ফাইলটির ব্যবহারকারীদের প্রবেশের শেলটিতে একটি কমান্ড দেবে pass সুতরাং আমরা দ্বিতীয় রূপে একটি কৌশল ব্যবহার করি, প্রধানত শেলটি পাস করে, অন্য শেল ( sh -c
) যা আমরা চালাতে আমাদের কমান্ডগুলির স্ট্রিং "ব্যাকডোর" করি।
আরও আছে তবে আমি এখানেই থামব। এগুলি কেবলমাত্র যদি আপনি জিনিসগুলি বুঝতে পারেন তবে আপনি কী করতে পারবেন তা দেখানোর জন্য, তবে কেবল একসাথে চেইন জাঙ্ক করা উচিত নয় কারণ আপনি যা করতে পারেন, আপনার কোড প্রগমাসটিকে যৌক্তিক স্তরের হিসাবে বোঝা উচিত যাতে অন্যরা বুঝতে এবং সমর্থন করতে পারে ভবিষ্যতে তাদের।