chroot に関する備忘録

家に携帯を忘れたり、定期が切れててチャージが減り続けているのに気がつかなかったりしたとき、ふと空を見上げて気分を晴らしたいという需要があります。

例えばこんな感じの chroot する用のディレクトリ newroot があるとして、
(busyboxはstaticリンクしたものです)

# ls -lR newroot
newroot:
total 4K
drwxrwxr-x 2 root root 4096 Mar 13 17:52 bin

newroot/bin:
total 1944K
-rwxr-xr-x 1 root root 1984568 Mar 13 17:53 busybox
lrwxrwxrwx 1 root root       7 Mar 13 17:49 ls -> busybox
lrwxrwxrwx 1 root root       7 Mar 13 17:49 sh -> busybox

newroot に chroot してみます。

# pwd
/home/hirose31/work/chroot

# perl -e " chroot './newroot'; exec '/bin/sh' "
\$

そして上を見てみます。

\$ ls /
bin
\$ ls /../
bin
\$ ls ../
Dyna  Loader  libc.so  newroot

おお。明日はいい日になりそうです。

教訓

chroot(2)のmanにも書いてありますが、chroot はカレントワーキングディレクトリは変更しないので、chroot するときは忘れず chdir しましょう。

# perl -e " chroot './newroot'; chdir '/';  exec '/bin/sh' "
もしくは
# perl -e " chdir './newroot';  chroot '.'; exec '/bin/sh' "

あわせて読みたい

chroot + chdir しても、root 権限を持ったままだと chroot 環境から脱獄できてしまうので、なるはやで setuid(2), setgid(2) して root 権限を手放しましょう。

よい週末を!