Debian-chrootメモ †
メリット †
- 立ち上げているサービス(SMTPやHTTPD)が攻撃され、万が一侵入されても、chrootされている仮想ROOT内のみ影響を受けることになり、他のサービスを含めシステム全体にまで影響を与えることがない。
- システムが小分けにして管理されるため、パスの検索等による待ち時間が短く、結果としてシステム全体が軽快に動作する。
デメリット †
- 各chrootディレクトリ内でaptを実行しないといけなくなる。
- 複数サービス同士がUNIXドメインソケットを使用する場合は双方のサービスを同じchroot環境に入れておかなければならない(デメリット、というほどのものではないが...)
- 各chroot環境下にライブラリ、実行ファイルを置かないといけないため、それなりにディスク容量が必要になる。
debootstrap †
- Debianでchroot環境を構築するツール。
# debootstrap woody ./chroot-dir
を実行することにより、パッケージがダウンロードされchroot環境が作成される。
- Debootstrapにより作成された環境は、余計なパッケージも多く含まれているため、
# chroot /chroot-dir apt-get remove --purge hogehoge
によりできるだけ削除するのがよいと思われる。
ちなみにインストールは
# chroot /chroot-dir apt-get install hogehoge
- ちなみに僕が調べてみた最小構成(依存関係で怒られない状態)は以下のとおり(woodyの場合)
apt
base-files
base-passwd
bash
bsdutils
debianutils
diff
dpkg
e2fsprogs
fileutils
findutils
grep
gzip
hostname
libc6
libcap1
libdb3
libncurses5
libpam-modules
libpam-runtime
libpam0g
libstdc++2.10-
login
mawk
mount
ncurses-base
ncurses-bin
perl-base
sed
shellutils
slang1
sysvinit
tar
textutils
util-linux
ここまでできた時点で.... †
- tarで固めておいて、chroot-base-woody.tar.gzなどと名前を付けておけば、新しいサービスを導入するとき、chroot環境の構築の手間を省くことができるので、非常に便利。
BindMount? †
- PostfixやIMAP等でHomeディレクトリがchroot-jail内から見えないといけない場合、BindMount?をしなければならない。
- chrootする前に実行する必要あり
# mount --bind /home /chroot-dir/home
procfs †
# chroot /chroot-dir mount -t proc none /proc
devpts †
- sshによりchrootの領域に直接ログインするのであれば、/dev/ptsをマウントする必要がある。
# chroot /chroot-dir mount -t devpts none /dev/pts
syslogについて †
init-script †
- 上記のことをふまえた上で、起動スクリプトは以下のような感じで。
ROOT=/chroot-dir
case "$1" in
start)
mount --bind /home $ROOT/home
# change working directory
cd $ROOT
chroot $ROOT mount -t proc none /proc
chroot $ROOT /etc/init.d/syslog-ng start
chroot $ROOT /etc/init.d/postfix start
;;
stop)
.....
esac
興味深い記事 †