আমি এখানে যা করেছি তা হ'ল init
প্রক্রিয়াটির মূল (পিআইডি 1) বর্তমান প্রক্রিয়ার মূলের মতো কিনা তা পরীক্ষা করা । যদিও /proc/1/root
সর্বদা এর লিঙ্ক হয় /
(যদি না init
নিজেই আঁকানো থাকে তবে এটি আমার পক্ষে যত্নবান নয়), এটি অনুসরণ করে "মাস্টার" মূল ডিরেক্টরিতে পরিচালিত হয়। এই কৌশলটি ডেবিয়ানের কয়েকটি রক্ষণাবেক্ষণ স্ক্রিপ্টগুলিতে ব্যবহৃত হয়, উদাহরণস্বরূপ ক্রোট ইনস্টল করার পরে ইউদেব শুরু করা বাদ দেওয়া।
if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then
echo "We are chrooted!"
else
echo "Business as usual"
fi
(যাইহোক, chroot
ক্রোটযুক্ত প্রক্রিয়াটিতে রুট অ্যাক্সেস থাকলে সুরক্ষার জন্য কেন এটি অনর্থক এটির এটি আরও একটি উদাহরণ Non নন-রুট প্রক্রিয়াগুলি পড়তে পারে না /proc/1/root
, তবে /proc/1234/root
পিআইডি 1234 এর মতো চলমান প্রক্রিয়া যদি চলমান থাকে তবে তারা অনুসরণ করতে পারে) ব্যবহারকারী।)
যদি আপনার কাছে রুট অনুমতি না থাকে তবে আপনি লিনাক্স কার্নেল ডকুমেন্টেশনে সংক্ষিপ্তভাবে নথিভুক্ত করতে পারেন /proc/1/mountinfo
এবং দেখতে পারেন । এই ফাইলটি বিশ্ব-পঠনযোগ্য এবং ফাইল সিস্টেমের প্রক্রিয়াটির দৃশ্যে প্রতিটি মাউন্ট পয়েন্ট সম্পর্কে প্রচুর তথ্য রয়েছে। সেই ফাইলের পাথগুলি ক্রোট দ্বারা পাঠক প্রক্রিয়াটিকে প্রভাবিত করে, যদি কোনও হয় তা দ্বারা সীমাবদ্ধ। প্রক্রিয়া পাঠটি যদি এমন কোনও ফাইল সিস্টেমে ক্রোয়েটেড হয় যা গ্লোবাল রুট থেকে পৃথক হয় (ধরে নিই যে পিড 1 এর মূলটি গ্লোবাল রুট), তবে কোনও প্রবেশের জন্য উপস্থিত হবে না । প্রক্রিয়া পাঠটি যদি গ্লোবাল রুট ফাইল সিস্টেমের কোনও ডিরেক্টরিতে ক্রোটযুক্ত হয় তবে তার জন্য একটি এন্ট্রি প্রদর্শিত হবে তবে ভিন্ন মাউন্ট আইডি রয়েছে। ঘটনাচক্রে, মূল ক্ষেত্র (/proc/$$/mountinfo
filesystems/proc.txt
/proc/1/mountinfo
/
/proc/1/mountinfo
/proc/1/mountinfo
/
/proc/1/mountinfo
$4
) ক্রোটটি তার মাস্টার ফাইল সিস্টেমে কোথায় রয়েছে তা নির্দেশ করে।
[ "$(awk '$5=="/" {print $1}' </proc/1/mountinfo)" != "$(awk '$5=="/" {print $1}' </proc/$$/mountinfo)" ]
এটি একটি খাঁটি লিনাক্স সমাধান। এটি পর্যাপ্তরূপে অনুরূপ অন্যান্য ইউনিক্স রূপগুলিতে সাধারণীকরণযোগ্য হতে পারে /proc
(সোলারিসের একটি একইরকম রয়েছে /proc/1/root
বলে আমি মনে করি, তবে তা নয় mountinfo
)।