জেল শিশু প্রসেসের নির্ভরযোগ্য উপায় using এনসেন্টার: using ব্যবহার করে `


15

আমি জানি যে লিনাক্স নেমস্পেসগুলি, অন্যান্য অনেক কিছুর মধ্যে, বাচ্চাদের প্রক্রিয়াজাতীয় ও ঝাঁকিয়ে পড়ার কোনও সম্ভাবনা ছাড়াই সুরক্ষিতভাবে সীমাবদ্ধকরণ এবং কারাগারে বন্দী করতে পরিচালনা করা যেতে পারে init। তবে বাস্তবায়নের বিবরণ নিয়ে আমি অস্পষ্ট। আমি কীভাবে util-linuxযেমন সরবরাহিত সরঞ্জামগুলি ব্যবহার করতে mountএবং nsenterদেখতে, নিরীক্ষণ করতে এবং নিশ্চিত করতে যে সমস্ত প্রক্রিয়া চালু হয়েছে তা অন্য প্রক্রিয়ার প্রত্যক্ষ নেমস্পেস বংশধর?

উত্তর:


19

একটি পিআইডি নেমস্পেস তৈরি করুন

এখানে সঠিক কমান্ডটি ব্যবহার করতে হবে unshare। নোট করুন যে এটি করার জন্য প্রয়োজনীয় বিকল্পগুলি কেবলমাত্র থেকে উপলব্ধ util-linux 2.23। আপনি যে প্রোগ্রামটি চালাচ্ছেন তার জন্য একটি নতুন পিআইডি নেমস্পেস তৈরি করার ধারণাটি হ'ল যে সমস্ত শিশুরাও এই নেমস্পেসে তৈরি হয়েছে। আপনি কেবল নতুন করে পিআইডি নেমস্পেসে কমান্ড চালাতে পারেন:

sudo unshare -fp some_command

শেল চালাতে, কমান্ডটি বাদ দিন। এটি এমন একটি প্রক্রিয়া তৈরি করবে যা তার বাচ্চাদের প্রত্যেকের সাথে পিতামাতার (সিস্টেম) নেমস্পেসের মধ্যে যথারীতি একটি পিআইডি রাখবে। তবে নতুন নেমস্পেসের মধ্যে এটির পিআইডি 1সহ initপ্রসেসের কয়েকটি বিশেষ বৈশিষ্ট্য থাকবে । সম্ভবত একটি তদারকি দৃষ্টিকোণ থেকে সর্বাধিক প্রাসঙ্গিক বৈশিষ্ট্যটি হ'ল যদি এর বংশধরদের মধ্যে কেউ এতিম হয় তবে তারা প্রকৃত initপ্রক্রিয়াটির পরিবর্তে এই প্রক্রিয়ায় পুনরায় পিতৃত্বপ্রাপ্ত হবে ।

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

মাউন্ট নেমস্পেসের সাথে একত্রিত করুন

তবে, আমরা যা করতে পারি না তা হ'ল পিআইডি-র প্রসঙ্গে প্রক্রিয়াটি পর্যবেক্ষণ করা যা এটি মনে করে যে এটি হয়েছে। এটি করার জন্য এবং বিশেষ psকরে নতুন নেমস্পেসের মধ্যে কমান্ডটি ব্যবহার করতে সক্ষম হতে আপনাকে procfsনেমস্পেসের জন্য একটি পৃথক ফাইল সিস্টেম মাউন্ট করতে হবে । এটি কেবলমাত্র অবস্থান যে যেহেতু অন্য সমস্যার পালা বিশালাকার মধ্যে psজন্য গ্রহণ procfsহয় /proc। একটি সমাধান chrootহ'ল জেল তৈরি করা এবং procfsসেখানে নতুন মাউন্ট করা । তবে এটি একটি জটিল দৃষ্টিভঙ্গি হিসাবে ন্যূনতমভাবে আমাদের যে কোনও বাইনারিগুলি নতুন রুটের উপর নির্ভর করে যে কোনও লাইব্রেরির সাথে আমরা ব্যবহার করতে ইচ্ছুক কোনও কপি করতে হবে (বা কমপক্ষে হার্ড লিঙ্ক)।

সমাধানটি হ'ল নতুন মাউন্ট নেমস্পেস ব্যবহার করা । এর মধ্যে আমরা নতুনভাবে procfsএমনভাবে মাউন্ট করতে পারি যা প্রকৃত মূল /procডিরেক্টরিটি ব্যবহার করে , পিআইডি নেমস্পেসের মধ্যে ব্যবহারযোগ্য হতে পারে এবং অন্য কোনও ক্ষেত্রে হস্তক্ষেপ করে না। এই প্রক্রিয়াটিকে খুব সহজ করার জন্য, unshareকমান্ডটি --mount-procবিকল্প দেয় :

sudo unshare -fp --mount-proc some_command

এখন psসম্মিলিত নেমস্পেসের মধ্যে চলমান কেবলমাত্র পিআইডি নামস্পেসের প্রক্রিয়াগুলি দেখায় এবং এটি পিআইডি থাকার শীর্ষ স্তরের প্রক্রিয়াটি দেখায় 1

কি হবে nsenter?

নামটি যেমন বোঝায়, nsenterইতিমধ্যে তৈরি করা একটি নেমস্পেস প্রবেশ করতে ব্যবহার করা যেতে পারে unshare। আমরা যদি অন্য কোনও সম্পর্কহীন স্ক্রিপ্ট থেকে কেবল নেমস্পেসের ভিতরে থেকেই তথ্য পেতে চাই তবে এটি দরকারী। সহজ উপায় হ'ল নেমস্পেসের মধ্যে চলমান যে কোনও প্রোগ্রামের পিআইডি দেওয়া access পরিষ্কার হওয়ার জন্য এটি যে নাম স্পেস থেকে nsenterচলছে তা লক্ষ্যমাত্রার প্রোগ্রামের পিআইডি হতে হবে (যেহেতু নেমস্পেসগুলি বাসা বাঁধতে পারে তাই একক প্রক্রিয়াতে অনেকগুলি পিআইডি থাকা সম্ভব)। লক্ষ্য পিআইডি / মাউন্ট নেমস্পেসে একটি শেল চালাতে, কেবল করুন:

sudo nsenter -t $PID -m -p

যদি এই নেমস্পেসটি উপরের মতো সেট আপ করা হয়, psতবে এখন কেবল সেই নেমস্পেসের মধ্যে কেবল প্রক্রিয়াগুলি তালিকাভুক্ত করা হবে।


ধন্যবাদ, গ্রীম এটি ইতিমধ্যে প্রশ্নের উত্তর দিয়েছে এবং আরও অনেক কিছু। প্রকৃতপক্ষে আমাকে যা জিজ্ঞাসা করা হয়েছিল তা হল / প্রোকে / পিআইডি / এনএস / * এর বিভিন্ন ফাইলে প্রোফস ম্যান পৃষ্ঠা থেকে নোটগুলি পড়া যা বলে যে: "এই ফাইলটি মাউন্ট করে রাখুন (মাউন্ট (2)) ফাইল সিস্টেমের অন্য কোনও জায়গায় রাখে ... পিড দ্বারা সুনির্দিষ্ট প্রক্রিয়াটির নামস্থানটি জীবিত থাকলেও বর্তমানে নামস্থানটিতে থাকা সমস্ত প্রক্রিয়া সমাপ্ত হয় "। খুব কমই একই প্রশ্ন, আমি জানি, তবে এটি ইতিমধ্যে খুব ভাল আমি ভেবেছিলাম যদি আপনি এটি প্রাসঙ্গিক মনে করেন তবে আপনি এটি যুক্ত করতে চাইতে পারেন lin linux.die.net/man/5/proc
মাইকসার্ভ

এটি শেষ বিভাগে এলডাব্লুএন নিবন্ধে আচ্ছাদিত (কেবলমাত্র বাইন্ড মাউন্ট অনুসন্ধান করুন)। আমি এর সত্যতা নিশ্চিত নই যদিও এটি পিআইডি নেমস্পেসকে বাঁচিয়ে রেখেছে তবে শীর্ষ স্তরের initস্টাইল প্রক্রিয়াটি মারা যাওয়ার পরে আপনি আর কোনওটি তৈরি করতে পারবেন না।
গ্রেম

হ্যাঁ, বাকিটাও আমি খুব বেশি নিশ্চিত নই। তবে এই উত্তরটি এবং manনিজের কাছে একটি সপ্তাহান্তে আমি এর সাথে আরও কিছুটা পরিচিত হওয়ার অর্থ familiar আবার ধন্যবাদ. নামপত্রে এটির আরও প্রাসঙ্গিকতা থাকতে পারে --user
মাইকজার্ভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.