Простой chroot

7 min

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

Здравствуйте, я некомпетентен.
Речь идет о том, можно ли сделать что-то с помощью старого chroot из истории классической виртуализации.
На этот раз я установлю Arch на USB-накопитель объемом 64 ГБ.

Подготовка диска

$ 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, поэтому она не может достичь корневого каталога самой хост-машины.
Я беспокоился о том, что хотя создание с помощью kvm тоже хорошо, оно, как мне кажется, имеет тенденцию к усложнению, и нет необходимости заходить так далеко, если нет масштабирования.
Кроме того, если у меня есть нишевое желание создать сервис, который я не хочу запускать на диске хост-ОС, на отдельном диске, то эта среда chroot может быть довольно полезной.

В принципе, "тюрьма" chroot рекомендуется даже такими фанатиками безопасности, как OpenBSD, поэтому, если ее правильно использовать в этой среде, она является надежным другом, но освоить ее довольно сложно.
Эта мысль давно сидела у меня в голове, и я некоторое время продолжал свою повседневную жизнь, ища, где бы ее применить, и вот теперь у меня возникает фраза, похожая на "Tenmon Kansoku" (Астрономические наблюдения) 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) - No such process
[alleycat /]# kill -9 3936 
bash: kill: (3936) - No such process

PID виден, но kill не работает. Кстати, обратное возможно.

Таким образом, если процесс, работающий внутри chroot, будет атакован каким-либо образом, он не сможет достичь хост-машины, поэтому это безопасно. Таково мое простое понимание.

Можно ли комбинировать с протоколом Plan9?

Например, если есть диск, к которому вы хотите получить доступ из среды chroot, я думаю, его можно будет совместно использовать.
Вот так и появился WSL в Windows.
WSL uses the 9P protocol to share files between Windows and WSL

WSL теперь
Windows Subsystem for Plan9/GNU/Linux
WSPGL, наверное?

Related Posts