একটি সেট আপ করার আগে একটি মাউন্ট নেমস্পেস প্রবেশ করানো chroot
, আপনাকে অতিরিক্ত মাউন্টগুলির সাথে হোস্টের নেমস্পেসকে বিশৃঙ্খলা এড়াতে দেয়, উদাহরণস্বরূপ /proc
। আপনি chroot
একটি মাউন্ট নেমস্পেসের ভিতরে একটি সুন্দর এবং সাধারণ হ্যাক হিসাবে ব্যবহার করতে পারেন ।
আমি বোঝার সুবিধাগুলি আছে বলে মনে করি pivot_root
, তবে এটির কিছুটা শেখার বক্ররেখা রয়েছে। ডকুমেন্টেশন সব কিছু পুরোপুরি ব্যাখ্যা করে না ... যদিও এর ব্যবহারের উদাহরণ রয়েছে man 8 pivot_root
(শেল কমান্ডের জন্য)। man 2 pivot_root
(সিস্টেম কলের জন্য) এটি একইভাবে করা থাকলে আরও পরিষ্কার হতে পারে এবং এর মধ্যে সি প্রোগ্রাম অন্তর্ভুক্ত রয়েছে।
পিভট_রোট কীভাবে ব্যবহার করবেন
মাউন্ট নেমস্পেসে প্রবেশের সাথে সাথেই আপনার প্রয়োজন mount --make-rslave /
বা সমতুল্য। অন্যথায়, আপনার সমস্ত মাউন্ট পরিবর্তনগুলি মুল নাম সহ স্থান সহ মাউন্টগুলিতে প্রচার করে pivot_root
। আপনি এটা চান না :)।
আপনি যদি unshare --mount
কমান্ডটি ব্যবহার করেন তবে নোট করুন এটি mount --make-rprivate
ডিফল্টরূপে প্রয়োগ করার জন্য ডকুমেন্টেড । আফিক্স এটি একটি খারাপ ডিফল্ট এবং আপনি উত্পাদন কোডে এটি চান না। যেমন এই মুহুর্তে, এটি eject
হোস্ট নেমস্পেসে মাউন্ট করা ডিভিডি বা ইউএসবিতে কাজ করা বন্ধ করবে । ডিভিডি বা ইউএসবি ব্যক্তিগত মাউন্ট ট্রি এর ভিতরে মাউন্ট থাকবে এবং কার্নেল আপনাকে ডিভিডি বের করতে দেবে না।
একবার এটি হয়ে গেলে আপনি মাউন্ট করতে পারেন যেমন আপনি যে /proc
ডিরেক্টরিটি ব্যবহার করবেন সেটি। আপনার জন্য একইভাবে chroot
।
যখন আপনি ব্যবহার ভিন্ন chroot
, pivot_root
প্রয়োজন যে আপনার নতুন মূল ফাইল সিস্টেম মাউন্ট-পয়েন্ট হয়। যদি ইতিমধ্যেই নয়, আপনি কেবল একটি বাঁধাই করা মাউন্ট প্রয়োগের দ্বারা এই সন্তুষ্ট করতে পারেন: mount --rbind new_root new_root
।
ব্যবহারের pivot_root
- এবং তারপর umount
বয়সী রুট ফাইল সিস্টেম, সঙ্গে -l
/ MNT_DETACH
বিকল্প। ( আপনার দরকার নেই umount -R
, যা বেশি সময় নিতে পারে ))
প্রযুক্তিগতভাবে, pivot_root
সাধারণত ব্যবহারের chroot
পাশাপাশি জড়িত থাকা প্রয়োজন ; এটি "হয়-না" হয় না।
হিসাবে man 2 pivot_root
, এটি কেবল মাউন্ট নেমস্পেসের মূলটি অদলবদল হিসাবে সংজ্ঞায়িত করা হয়েছে। প্রক্রিয়া রুটটি কোন শারীরিক ডিরেক্টরিতে নির্দেশ করছে তা পরিবর্তনের জন্য এটি সংজ্ঞায়িত হয়নি। বা বর্তমান কার্যকারী ডিরেক্টরি ( /proc/self/cwd
)। এটা যে এটা করে , তাই না, কিন্তু এই হাতল কার্নেল থ্রেড করার জন্য একটি হ্যাক হয়। ম্যানপেজটি বলে যে এটি ভবিষ্যতে পরিবর্তন হতে পারে।
সাধারণত আপনি এই ক্রমটি চান:
chdir(new_root); // cd new_root
pivot_root(".", put_old); // pivot_root . put_old
chroot("."); // chroot .
chroot
এই অনুক্রমের পোস্টটি আরও একটি সূক্ষ্ম বিশদ । যদিও পয়েন্টটি pivot_root
হ'ল মাউন্ট নেমস্পেসটি পুনরায় সাজানো, কার্নেল কোডটি প্রতি-প্রক্রিয়া রুটের দিকে তাকিয়ে রুট ফাইল সিস্টেমটি সন্ধান করতে পারে বলে মনে হয়, যা chroot
সেট করে।
পিভট_রোট কেন ব্যবহার করবেন
নীতিগতভাবে, এটি pivot_root
সুরক্ষা এবং বিচ্ছিন্নতার জন্য ব্যবহার করা বোধগম্য । আমি ক্ষমতা-ভিত্তিক সুরক্ষা তত্ত্ব সম্পর্কে ভাবতে চাই । আপনি প্রয়োজনীয় নির্দিষ্ট সংস্থানগুলির একটি তালিকায় পাস করেছেন এবং প্রক্রিয়াটি অন্য কোনও সংস্থান অ্যাক্সেস করতে পারে না। এই ক্ষেত্রে আমরা একটি মাউন্ট নেমস্পেসে পাস হওয়া ফাইল সিস্টেমগুলি সম্পর্কে কথা বলছি। এই ধারণাটি সাধারণত লিনাক্স "নেমস্পেস" বৈশিষ্ট্যের ক্ষেত্রে প্রযোজ্য, যদিও আমি সম্ভবত এটি খুব ভালভাবে প্রকাশ করছি না।
chroot
কেবলমাত্র প্রক্রিয়াটি রুট সেট করে তবে প্রক্রিয়াটি এখনও পুরো মাউন্ট নেমস্পেসকে বোঝায়। যদি কোনও প্রক্রিয়া সম্পাদন করার অধিকার বজায় রাখে chroot
, তবে এটি ফাইল সিস্টেমের নেমস্পেসটিকে ব্যাক আপ করতে পারে। এতে বিশদ হিসাবে বলা হয়েছে man 2 chroot
, "সুপারভাইজার একটি 'ক্রুট জেল' থেকে পালাতে পারে ..."।
পূর্বাবস্থা আরেকটি চিন্তার উদ্দীপক ভাবে chroot
হয় nsenter --mount=/proc/self/ns/mnt
। এটি নীতিটির পক্ষে সম্ভবত আরও দৃ argument় যুক্তি। nsenter
/ setns()
অবশ্যই মাউন্ট নেমস্পেসের মূল থেকে প্রক্রিয়াটির মূলটি পুনরায় লোড করে ... যদিও সত্য যে এটি যখন কাজ করে যখন দুটি পৃথক শারীরিক ডিরেক্টরি উল্লেখ করে তখন কার্নেল বাগ হিসাবে বিবেচিত হতে পারে। (প্রযুক্তিগত দ্রষ্টব্য: মূলটিতে একে অপরের শীর্ষে মাউন্ট করা একাধিক ফাইল সিস্টেম থাকতে পারে; setns()
শীর্ষটি ব্যবহার করে, সম্প্রতি একটি মাউন্ট করা হয়েছে))
এটি একটি "পিআইডি নেমস্পেস" এর সাথে মাউন্ট নেমস্পেসের একত্রিত করার একটি সুবিধা চিত্রিত করে। একটি পিআইডি নেমস্পেসের অভ্যন্তরে থাকা আপনাকে একটি অপির্ধারিত প্রক্রিয়ার মাউন্ট নেমস্পেসে প্রবেশ করতে বাধা দিতে পারে। এটি আপনাকে একটি অসমর্থিত প্রক্রিয়া ( /proc/$PID/root
) এর গোড়ায় প্রবেশ করতে বাধা দেয় । এবং অবশ্যই একটি পিআইডি নেমস্পেস আপনাকে এর বাইরে যে কোনও প্রক্রিয়া মেরে ফেলতে বাধা দেয় :-)।
pivot_root
এবং এর মধ্যে পার্থক্য সম্পর্কেchroot
: আমি ডকার উত্সগুলি একবার দেখেছিলাম এবং দেখেছি যে এটি কার্যকর করতে ব্যর্থ হলে এটিpivot_root
আবার পড়ে যায়chroot
, অর্থাত্ এই প্রক্রিয়াগুলি কনটেইনারাইজেশনের উদ্দেশ্যে কার্যত কার্যত কমপক্ষে অনুরূপ বলে বিবেচিত হয়।