*Debian-chrootメモ [#hd0f6f7f]
**メリット [#w0c0d2ef]
-立ち上げているサービス(SMTPやHTTPD)が攻撃され、万が一侵入されても、chrootされている仮想ROOT内のみ影響を受けることになり、他のサービスを含めシステム全体にまで影響を与えることがない。
-システムが小分けにして管理されるため、パスの検索等による待ち時間が短く、結果としてシステム全体が軽快に動作する。

**デメリット [#gd8e53ce]
-各chrootディレクトリ内でaptを実行しないといけなくなる。
-複数サービス同士がUNIXドメインソケットを使用する場合は双方のサービスを同じchroot環境に入れておかなければならない(デメリット、というほどのものではないが...)
-各chroot環境下にライブラリ、実行ファイルを置かないといけないため、それなりにディスク容量が必要になる。

**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 [#ca3927ea]
-PostfixやIMAP等でHomeディレクトリがchroot-jail内から見えないといけない場合、BindMountをしなければならない。
-chrootする前に実行する必要あり

 # mount --bind /home /chroot-dir/home

**procfs [#oa41b9e9]
-procをマウントする必要あり。

 # chroot /chroot-dir mount -t proc none /proc

**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 [#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以外で動作するようにしなければ完全とはいえない

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS