お手軽chroot
4 min read
こんにちは、無能です。
かくかくしかじかで、古典的な仮想化の歴史で古い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
で建てるとかも良いんだけど割と複雑化しやすいようにも思えてスケールアウトするわけでもないのにそこまでする必要あるかな?という。
追加で言えば、例えばホスト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) - 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、かな?