ব্যস্তবক্স কমান্ডগুলি কি সত্যই অন্তর্নির্মিত?


28

আমি বিখ্যাত ইউনিক্স রিকভারি কিংবদন্তিটি পড়ছিলাম এবং অবাক হয়ে আমার কাছে এটি ঘটে:

যদি আমার একটি ব্যাসিবক্স শেল খোলা থাকে এবং বুসিবক্স বাইনারি নিজেই মুছে ফেলা হয়, তবে আমি কি এখনও ব্যাসিবক্স বাইনারি অন্তর্ভুক্ত সমস্ত কমান্ড ব্যবহার করতে সক্ষম হব?

স্পষ্টতই আমি অন্য চলমান শেল যেমন commands কমান্ডগুলির বিবি সংস্করণটি ব্যবহার করতে সক্ষম হব না bash, যেহেতু ব্যাসিবক্স ফাইল নিজেই bashখোলার জন্য এবং চালনার জন্য অনুপলব্ধ । তবে ব্যাসিবক্সের চলমান দৃষ্টান্তের মধ্যে থেকে আমার কাছে মনে হয় দুটি উপায় থাকতে পারে যার মাধ্যমে বিবি কমান্ড চালাবেন:

  1. এটি ব্যাসিবক্সের একটি নতুন উদাহরণকে কাঁটাচামচ ও কার্যকর করতে পারে, উপযুক্ত নামটি দিয়ে এটি কল করে — তা করার জন্য ডিস্ক থেকে ব্যাসিবক্স ফাইলটি পড়তে পারে।
  2. নির্দিষ্ট কমান্ডটি চালানোর জন্য এটি কিছু অভ্যন্তরীণ যুক্তি কাঁটাচামচ ও সম্পাদন করতে পারে (উদাহরণস্বরূপ, এটি ফাংশন কল হিসাবে চালিয়ে)।

যদি (১) যদি ব্যাসিবক্স কাজ করে তবে আমি আশা করব যে বিবি বাইনারি মোছার পরে কিছু ব্যাসিবক্স-সরবরাহ কমান্ডগুলি বিবির চলমান উদাহরণের মধ্যে থেকে অনুপলব্ধ হয়ে উঠবে।

যদি (২) এটি কীভাবে কাজ করে তবে বিসি নিজেই মুছে ফেলা হয়েছে এমন একটি সিস্টেমের পুনরুদ্ধারের জন্যও ব্যাসিবক্স ব্যবহার করা যেতে পারে - তবে এখানে যদি ব্যাসিবক্স অ্যাক্সেসযোগ্য কোনও চলমান দৃষ্টান্ত না থাকে।

এই কোথাও নথিভুক্ত করা হয়? যদি তা না হয় তবে নিরাপদে এটি পরীক্ষা করার কোনও উপায় আছে কি?


2
is there a way to safely test it?জেনেরিক x86 openwrtচিত্রটি ডাউনলোড করুন এবং চিত্রটিকে একটি নতুন ভার্চুয়ালবক্স মেশিনে সংযুক্ত করুন
বেসিন

2
এবং এটি প্রশ্ন উত্থাপন করে, কীভাবে বুসবক্স কমান্ডগুলি PATHসেট না করে পরে কাজ করা চালিয়ে যায় ? এটি কি একটি ডিফল্ট মান ধরে PATH?
মুড়ু

2
@ মুরু: উত্স কোড থেকে (কমপক্ষে এটির ছাই ক্লোনটির জন্য) দেখে মনে হচ্ছে এটি কোনও আনসেট পাথকে যেমন খালি স্ট্রিংয়ের মতো আচরণ করে, তাই এটি বর্তমান ডিরেক্টরিটি অনুসন্ধান করে এবং কেবল এটিই।
হেনিং মাখোলম

@ হেনিংমখোলম ওয়েল, আমার মন্তব্যটির জিলস জবাব দিয়েছিল। তবে এটি জেনে রাখা ভাল - আমি কেবল বিল্টিনদের কাজ করার আশা করতাম।
মুড়ু

উত্তর:


33

ডিফল্টরূপে, ব্যাসিবক্স এটি তৈরি করা অ্যাপলেটগুলি (এর সাথে তালিকাভুক্ত কমান্ডগুলি busybox --help) সম্পর্কিত বিশেষ কিছু করে না ।

যাইহোক, যদি সংকলনের সময় FEATURE_SH_STANDALONEএবং FEATURE_PREFER_APPLETSঅপশনগুলি সক্ষম করা হয়, তবে বুসিবক্স শ যখন একটি কমান্ড যা একটি পরিচিত অ্যাপলেট নাম কার্যকর করে, এটি সাধারণ লকউইচ করে না PATH, পরিবর্তে শর্টকাটের মাধ্যমে বিল্ট-ইন অ্যাপলেটগুলি চালায়:

  • উত্স কোডে "নোেক্সেক" হিসাবে ঘোষিত অ্যাপলেটগুলি একটি কাঁটাযুক্ত প্রক্রিয়াতে ফাংশন কল হিসাবে কার্যকর করা হয়। Busybox 1.22 এর হিসাবে, নিম্নলিখিত অ্যাপলেট noexec আছেন: chgrp, chmod, chown, cksum, cp, cut, dd, dos2unix, env, fold, hd, head, hexdump, ln, ls, md5sum, mkfifo, mknod, sha1sum, sha256sum, sha3sum, sha512sum, sort, tac, unix2dos
  • উত্স কোডে "নফোরক" হিসাবে ঘোষিত অ্যাপলেটগুলি একই প্রক্রিয়াতে ফাংশন কল হিসাবে কার্যকর করা হয়। Busybox 1.22 এর হিসাবে, নিম্নলিখিত অ্যাপলেট nofork আছেন: [[, [, basename, cat, dirname, echo, false, fsync, length, logname, mkdir, printenv, printf, pwd, rm, rmdir, seq, sync, test, true, usleep, whoami, yes
  • অন্যান্য অ্যাপলেটগুলি সত্যই সম্পাদিত হয় ( forkএবং এর সাথে execve), তবে অনুসন্ধানের পরিবর্তে PATHব্যাসিবক্স কার্যকর হয় /proc/self/exe, যদি পাওয়া যায় (যা সাধারণত লিনাক্সের ক্ষেত্রে হয়), এবং অন্যথায় সংকলনের সময় সংজ্ঞায়িত একটি পথ।

এটি আরও কিছুটা বিশদে ডকুমেন্টেড docs/nofork_noexec.txt। অ্যাপলেট ঘোষণাগুলি include/applets.src.hসোর্স কোডে রয়েছে।

সর্বাধিক ডিফল্ট কনফিগারেশনগুলি এই বৈশিষ্ট্যগুলি বন্ধ করে দেয়, যাতে ব্যাসিবক্স অন্য শেলের মতো বাহ্যিক কমান্ড কার্যকর করে। দেবিয়ান তার busyboxএবং busybox-staticপ্যাকেজ উভয় ক্ষেত্রেই এই বৈশিষ্ট্যগুলি চালু করে।

সুতরাং আপনার যদি একটি ব্যাসিবক্স নির্বাহযোগ্য FEATURE_SH_STANDALONEএবং এর সাথে সংকলিত থাকে FEATURE_PREFER_APPLETS, তবে এক্সিকিউটেবল মুছে ফেলা সত্ত্বেও আপনি বুসিবক্স শেল থেকে সমস্ত বুসিবক্স কমান্ড সম্পাদন করতে পারেন (উপরের তালিকাভুক্ত নয় এমন অ্যাপলেট ব্যতীত যদি /proc/self/exeউপলব্ধ না থাকে তবে)।

¹ আসলে আছে "SH" busybox মধ্যে দুটি বাস্তবায়নের - ছাই এবং নিস্তব্ধতা - কিন্তু তারা এ ব্যাপারে একই ভাবে আচরণ।


1
@ উইল্ডকার্ড FEATURE_PREFER_APPLETSএবং FEATURE_SH_STANDALONEবৈশিষ্ট্যগুলি সক্ষম বা অক্ষম করার জন্য টাইম ফ্ল্যাগগুলি সংকলন করে। অ্যাপলেটগুলি চিহ্নিত করা হয়েছে noforkএবং noexecনির্ধারিত যাই হোক না কেন পতাকা ব্যবহার করা হয়েছিল। এই জাতীয় চিহ্নিতকরণগুলির কোনও প্রভাব রয়েছে কিনা তা FEATURE_PREFER_APPLETSসক্ষম হওয়ার উপর নির্ভর করে । অতএব, তিনটি সম্ভাব্য আচরণ: 1. FEATURE_PREFER_APPLETSঅক্ষম, 2. FEATURE_PREFER_APPLETSসক্ষম এবং অ্যাপলেট nofork, 3. FEATURE_PREFER_APPLETSসক্ষম এবং অ্যাপলেট noexec। ডক্সের তৃতীয় প্যারা এটি সুন্দরভাবে ব্যাখ্যা করেছে। এবং শেষ বিভাগে সম্ভাব্য কেসগুলি দেখায়।
মুড়ু

1
@ উইল্ডকার্ড FEATURE_SH_STANDALONE(যার প্রয়োজন FEATURE_PREFER_APPLETS) noforkদরকার নেই সহ FEATURE_SH_STANDALONE, /proc/self/exeযেখানে প্রযোজ্য সেখানে ব্যবহৃত হয়, সুতরাং এটি বিবি মুছে ফেলা হলেও কার্যকর হবে । আপনি এটি যে কোনও ডেবিয়ান বা আর্চ লিনাক্স সিস্টম, রান busybox ash, এবং unset PATHবেসিনের কমান্ডগুলি করতে মোটামুটি ন্যূনতম ঝুঁকি নিয়ে পরীক্ষা করতে পারেন । এটা ভাল কাজ করে।
মুড়ু

3
একটি উবুন্টু 14.04.1 এলটিএস সিস্টেমে ব্যাসিবক্স অ্যাপলেট পছন্দ করতে কনফিগার করা হয়েছে। যেহেতু তন্ন তন্ন catনা chmodExec-ing একটি পথনাম প্রয়োজন, আপনি thusly এক্সিকিউটেবল পুনরুদ্ধার করতে পারেন: cat /proc/self/exe > busybox; chmod 755 busybox
বেয়ারফুট আইও

1
@ ফরেস্টের মধ্যে একটি বিশাল পার্থক্য রয়েছে: tacহয় একটি সন্ধানযোগ্য ইনপুট ফাইলের দরকার হয় যা সর্বদা পাওয়া যায় না, বা সম্পূর্ণ ইনপুট মেমরির মধ্যে পড়ে। catএর ইনপুটটি শুরু থেকে শেষ পর্যন্ত পড়তে পারে, এটি ইতিমধ্যে কীভাবে প্রক্রিয়া করা হয়েছে তা এড়িয়ে যায়। এটি প্রয়োগ করা অনেক সহজ এবং এটি আরও সাধারণভাবে ব্যবহৃত হয়, সুতরাং এটিরটিকে আরও অনুকূল করে তোলা আরও বোধগম্য।
এইচডিভি

1
@ উইল্ডকার্ড নফর্ক এবং নোেক্সেক প্রতিটি অ্যাপলেটটিতে সূচকগুলি সেট করা হয়। FEATURE_xxxসামগ্রিকভাবে ব্যাসিবক্সের জন্য একটি সংকলন-সময় বিকল্প। নফোর্ক এবং নেক্সেক ইঙ্গিতগুলি কেবল FEATURE_PREFER_APPLETSতখনই সক্রিয় থাকে (কমপক্ষে শেলের মধ্যে একটি কমান্ড কার্যকর করার উদ্দেশ্যে, সেগুলি অন্য কয়েকটি প্রসঙ্গেও ব্যবহৃত হয়)।
গিলস 'এ-অশুভ হওয়া বন্ধ করুন'

8

is there a way to safely test it? জেনেরিক x86 ওপেনর্ট চিত্র সহ:

vbox স্ক্রিনশট

বেশিরভাগ কমান্ডগুলি অন্তর্নির্মিত নয়, তবে কিছুগুলি লাইক echoএবং থাকে printf। যথেচ্ছ বিষয়বস্তু সহ একটি বাইনারি ফাইল ব্যবহার করে তৈরি করা যেতে পারে printfতবে chmod +xসমস্যা হবে but


মজাদার; আপনি নিজেই এটি ব্যস্তবক্সের মধ্যে থেকে চালাচ্ছেন, বা অন্য কোনও শেল?
ওয়াইল্ডকার্ড

4
(এছাড়াও, আপনি কী স্ক্রিনশটের পরিবর্তে পাঠ্যে আটকানো মনে করবেন?)
ওয়াইল্ডকার্ড

@Wildcard /bin/ash -> busybox
বেসিন

1
গিলসের জবাব অনুসারে, যদি FEATURE_SH_STANDALONEসক্ষম করা থাকে তবে আপনি এই আচরণটি পাবেন না। দ্বিতীয়টি mvপুরোপুরি সূক্ষ্মভাবে কাজ করবে।
মুড়ু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.