*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 -procをマウントする必要あり。 # chroot /chroot-dir mount -t proc none /proc **syslogについて -woodyのsysklogdはリモートログを収集しようがしまいがudp/514を開いてしまうため、親ルート側のsyslogのポートと競合してしまう。 -syslog-ngを使用することにより、ポートが開かなくなるため、この問題を回避できる。 -/chroot-dir/etc/syslog-ng/syslog-ng.confの内容は以下のとおり options { long_hostnames(off); sync(0); }; source src { unix-dgram("/dev/log"); internal(); }; destination loghost { udp("127.0.0.1" port(514)); }; log { source(src); destination(loghost); }; -親ルート側の/etc/syslog.confでリモートからログを受信するために/etc/init.d/sysklogd内でSYSLOGD="-r"と設定する。(woody/sid双方とも同様) **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 **興味深い記事 -[[How to break out of a chroot() jail:http://www.bpfh.net/simes/computing/chroot-break.html]] --work directoryをchroot後の"/"の位置にしてからchrootを実行する --結局、アプリケーションのprivilageをUID=0以外で動作するようにしなければ完全とはいえない