आसान chroot
नमस्ते, मैं अक्षम हूँ।
बस यह कि, किसी तरह, मैं क्लासिक वर्चुअलाइजेशन के इतिहास में पुराने chroot के साथ कुछ कर सकता हूँ।
इस बार, मैं 64G USB पर Arch स्थापित करूँगा।
ड्राइव तैयार करना
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 238.5G 0 disk
└─sda1 8:1 0 238.5G 0 part /var/lib/docker
/
sdb 8:16 1 57.8G 0 disk
└─sdb1 8:17 1 57.8G 0 part
$ sudo fdisk /dev/sdb
$ sudo mkfs.ext4 /dev/sdb1
$ sudo mkdir /mnt/arch
$ sudo mount /dev/sdb1 /mnt/arch
कर्नेल और अन्य की तैयारी
$ pacstrap /mnt/arch base linux linux-firmware man-db vim
bash: pacstrap: कमांड नहीं मिला
ओह
$ sudo pacman -S arch-install-scripts
$ sudo pacstrap /mnt/arch base linux linux-firmware man-db vim
arch-chroot करना
$ sudo arch-chroot arch
[alleycat /]# ls
bin boot dev etc home lib lib64 lost+found mnt opt proc root run sbin srv sys tmp usr var
[alleycat /]# date
Fri Nov 29 14:36:48 UTC 2024
[alleycat /]# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
[alleycat /]# date
Fri Nov 29 23:37:02 JST 2024
[alleycat /]# hwclock --systohc
[alleycat /]# date
Fri Nov 29 23:37:08 JST 2024
यह Devuan में भी लगता है।
arch-install-scripts/stable के बराबर इंस्टॉलेशन स्क्रिप्ट क्या है?
$ sudo apt search debian-installer
सॉर्ट किया जा रहा है... हो गया
पूर्ण पाठ खोज... हो गया
bf-utf-source/stable 0.08+nmu2 all
डेबियन इंस्टालर बनाने के लिए आवश्यक फोंट के लिए स्रोत
cpio-win32/stable 2.13+dfsg-7.1 all
GNU cpio -- फ़ाइलों के अभिलेखागार को प्रबंधित करने के लिए एक प्रोग्राम (win32 बिल्ड)
debian-installer/stable 20230607+deb12u8devuan1 amd64
Devuan का डेबियन इंस्टालर
ऐसा लगता है कि यह वास्तव में Devuan's debian installer है।
इसी तरह की व्यवस्था के साथ, debootstrap का उपयोग करके एक न्यूनतम वातावरण बनाना संभव लगता है।
mmdebstrap के साथ एक न्यूनतम रूट फ़ाइल सिस्टम बनाना
इस बार, मैं जानबूझकर chroot जेल का उपयोग कर रहा हूँ, आंशिक रूप से मनोरंजन के लिए, लेकिन यदि आप इस पूरे chroot वातावरण को एक पूर्ण निष्पादन वातावरण के रूप में स्थापित करते हैं और SSH अनुमतियाँ देते हैं, तो संसाधनों को आसानी से विभाजित करना संभव है, और विश्वविद्यालय में मेरे दोस्त भी मुफ्त में एक समृद्ध GNU/Linux निष्पादन वातावरण का उपयोग कर सकते हैं। हालांकि, SSH वातावरण chroot से बाहर नहीं निकल सकता है, इसलिए यह होस्ट मशीन के रूट डायरेक्टरी तक नहीं पहुँच सकता है। मैं इस बात को लेकर चिंतित था कि kvm के साथ निर्माण करना भी अच्छा है, लेकिन यह काफी जटिल हो सकता है, और यदि आप स्केल आउट नहीं कर रहे हैं तो क्या यह आवश्यक है? इसके अतिरिक्त, यदि मेरी एक विशिष्ट इच्छा है, जैसे कि किसी सेवा को एक अलग डिस्क पर बनाना जिसे मैं होस्ट OS डिस्क पर नहीं चलाना चाहता, तो यह chroot वातावरण काफी उपयोगी हो सकता है।
मूल रूप से, chroot जेल OpenBSD जैसे सुरक्षा उत्साही लोगों द्वारा भी समर्थित है, इसलिए यदि इसे उस वातावरण में ठीक से चलाया जाए तो यह एक मजबूत दोस्त है, लेकिन मुझे लगता है कि इसमें महारत हासिल करना काफी मुश्किल है। यह हमेशा मेरे दिमाग में था, और मैं कुछ समय से यह पता लगाने की कोशिश कर रहा था कि इसका उपयोग कैसे किया जाए, और अब मुझे लगता है कि मुझे कुछ उपयोग मिल रहे हैं, जैसे BUMP OF CHICKEN के 'टेंटाई कानसोकू' (खगोल विज्ञान) गीत का एक वाक्यांश।
वैसे, इसे स्थापित करने के बाद डिस्क पर शेष स्थान कुछ ऐसा है।
$ df -h
~~~
/dev/sdb1 57G 2.0G 52G 4% /mnt/arch
chroot सुरक्षित क्यों है?
उदाहरण के लिए, यदि होस्ट मशीन पर इस तरह की PID और शेल मौजूद हैं:
$ sleep 10000 & echo $$
[1] 21235
3936
यदि आप chroot वातावरण से इसे खत्म करने की कोशिश करते हैं (grep -v का उपयोग न करने के लिए क्षमा करें):
[alleycat /]# ps -ef | grep sleep
1000 21235 3936 0 00:30 ? 00:00:00 sleep 10000
root 21244 17618 0 00:31 ? 00:00:00 grep --colour=auto sleep
[alleycat /]# kill -9 21235
bash: kill: (21235) - ऐसी कोई प्रक्रिया नहीं है
[alleycat /]# kill -9 3936
bash: kill: (3936) - ऐसी कोई प्रक्रिया नहीं है
आप PID देख सकते हैं, लेकिन आप kill नहीं कर सकते। वैसे, इसका उल्टा संभव है।
इसलिए, यदि chroot के भीतर चल रही प्रक्रिया पर किसी तरह से हमला किया जाता है, तो यह होस्ट मशीन तक नहीं पहुँच सकती है, इसलिए यह सुरक्षित है। यह मेरी सरल समझ है।
क्या इसे Plan9 प्रोटोकॉल के साथ भी जोड़ा जा सकता है?
उदाहरण के लिए, यदि कोई डिस्क है जिसे आप chroot वातावरण से भी एक्सेस करना चाहते हैं, तो मुझे लगता है कि इसे साझा करना संभव है।
और इस तरह Windows का WSL बना।
WSL Windows और WSL के बीच फ़ाइलों को साझा करने के लिए 9P प्रोटोकॉल का उपयोग करता है
WSL अब है
Windows Subsystem for Plan9/GNU/Linux
WSPGL, है ना?