轻松chroot

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

你好,我是无能。

只是想看看在经典的虚拟化历史中,古老的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 协议结合使用?

例如,如果有一个磁盘也想从chroot环境访问,感觉也可以共享。
这就是Windows WSL的由来吧。
WSL uses the 9P protocol to share files between Windows and WSL

WSL 难道是
Windows Subsystem for Plan9/GNU/Linux
WSPGL,对吗?

Related Posts