Простой chroot
Здравствуйте, я некомпетентен.
Речь идет о том, можно ли сделать что-то с помощью старого 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, наверное?