輕鬆 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
source for fonts needed to build Debian installers
cpio-win32/stable 2.13+dfsg-7.1 all
GNU cpio -- a program to manage archives of files (win32 build)
debian-installer/stable 20230607+deb12u8devuan1 amd64
Devuan's debian installer
看來它確實是Devuan's debian installer。
用類似的機制,似乎可以用debootstrap建立最小環境。
使用 mmdebstrap 建立最小根檔案系統
這次特意使用chroot監獄,一部分是為了好玩,但如果將整個chroot環境建立起來,並賦予SSH權限作為完整的執行環境,就可以輕鬆地劃分資源,讓上大學的朋友也能免費使用豐富的GNU/Linux執行環境,或許是這樣吧。畢竟,SSH進入的環境無法離開chroot內部,因此無法到達主機本身的root目錄。
我一直在思考,雖然用kvm建立也不錯,但感覺容易變得複雜,而且又不是要擴展,有必要做到那種程度嗎?
另外,如果我有一些小眾需求,例如想在單獨的磁碟上建立一些不想在主機作業系統磁碟上啟動的服務,那麼這個chroot環境就相當實用。
基本上,chroot監獄連像安全狂熱者一樣的OpenBSD也推薦,因此如果在該環境中正確運行,它是一個強大的朋友,但我感覺要完全掌握它相當困難。
雖然一直在我腦海中,但我在日常生活中摸索了一段時間,看看有沒有什麼用武之地,結果似乎找到了不少,這讓我說出了BUMP OF CHICKEN《天體觀測》般的歌詞。
順帶一提,這次安裝後,磁碟的剩餘空間如下。
$ df -h
~~~
/dev/sdb1 57G 2.0G 52G 4% /mnt/arch
chroot 為何安全
例如,如果主機上存在這樣的PID和shell:
$ 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) - No such process
[alleycat /]# kill -9 3936
bash: kill: (3936) - No such process
雖然可以看到PID,但無法kill。順帶一提,反過來是可行的。
所以,即使在chroot中運行的進程受到某種攻擊,也無法到達主機,所以是安全的,對吧。這是我簡單的理解。
也能與 Plan9 Protocol 結合嗎?
例如,如果有一個磁碟也想從 chroot 環境中存取,感覺也可以共享。
這就是 Windows 的 WSL 的由來吧。
WSL uses the 9P protocol to share files between Windows and WSL
WSL 已經是
Windows Subsystem for Plan9/GNU/Linux
WSPGL,對吧?