- 追加された行はこの色です。
- 削除された行はこの色です。
*Debian-chrootメモ
**メリット
*Debian-chrootメモ [#hd0f6f7f]
**メリット [#w0c0d2ef]
-立ち上げているサービス(SMTPやHTTPD)が攻撃され、万が一侵入されても、chrootされている仮想ROOT内のみ影響を受けることになり、他のサービスを含めシステム全体にまで影響を与えることがない。
-システムが小分けにして管理されるため、パスの検索等による待ち時間が短く、結果としてシステム全体が軽快に動作する。
**デメリット
**デメリット [#gd8e53ce]
-各chrootディレクトリ内でaptを実行しないといけなくなる。
-複数サービス同士がUNIXドメインソケットを使用する場合は双方のサービスを同じchroot環境に入れておかなければならない(デメリット、というほどのものではないが...)
-各chroot環境下にライブラリ、実行ファイルを置かないといけないため、それなりにディスク容量が必要になる。
**debootstrap
**debootstrap [#y38b5423]
-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
**ここまでできた時点で....
**ここまでできた時点で.... [#bb7740e3]
-tarで固めておいて、chroot-base-woody.tar.gzなどと名前を付けておけば、新しいサービスを導入するとき、chroot環境の構築の手間を省くことができるので、非常に便利。
**BindMount
**BindMount [#ca3927ea]
-PostfixやIMAP等でHomeディレクトリがchroot-jail内から見えないといけない場合、BindMountをしなければならない。
-chrootする前に実行する必要あり
# mount --bind /home /chroot-dir/home
**procfs
**procfs [#oa41b9e9]
-procをマウントする必要あり。
# chroot /chroot-dir mount -t proc none /proc
**syslogについて
**devpts [#od4c4295]
-sshによりchrootの領域に直接ログインするのであれば、/dev/ptsをマウントする必要がある。
# chroot /chroot-dir mount -t devpts none /dev/pts
**syslogについて [#o7382050]
-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
**init-script [#ue6d3b49]
-上記のことをふまえた上で、起動スクリプトは以下のような感じで。
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
**興味深い記事 [#h861eaa1]
-[[How to break out of a chroot() jail:http://www.bpfh.net/simes/computing/chroot-break.html]]
--work directoryをchroot後の"/"の位置にしてからchrootを実行する
--結局、アプリケーションのprivilageをUID=0以外で動作するようにしなければ完全とはいえない