お手軽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、かな?