2008-04-10

ezjailで遊ぶための自分用メモ

jailを使ってサーバ群を構成し直そうと、ezjailで遊んでみた。グリーンITも簡単(か)。

  1. FreeBSD 7.0 を入れる。/etc/rc.confでインタフェースのalias(例えば192.168.0.3としておく)を登録。
  2. ホスト側のプロセスがjailのアドレスでlistenしないようにする。
    • sshdのListenAddressをいじってアドレスを限定する。
    • syslogdに-bをつけてアドレスを限定する。
    • ntpdはそのまま。jailのアドレスでListenしても問題ない(はず)。
  3. sysutils/ezjail を入れる。ezjail_enableを設定。
  4. /usr/local/etc/ezjail.conf で、ezjail_jaildir をjail群用のでかいディスクに割り当てる(例えばTOPとしておく)。
    • ちょっとしたWEBサーバやメールサーバなら1個あたり何百MBで十分。
  5. ezjail-admin update -p
    • ソースツリーをビルドし直し、portsnap fetchしてjail用のportsツリーもportsnap updateしてくれる。
    • -Pならportsツリーのみ。jailが走っていても実行できる。
    • -iをつけるとbuildworldせずにinstallworldのみ。
    • 実行後はportsツリーも含めてTOP/basejailにインストールされる。basejailはjail内のbasejailにnullfsマウントされて、リンクされる。
    • TOP/newjailもbasejailへのリンク+αとして作成される。これをコピーしてちょっとフレーバーを加えてjailになる。
  6. フレーバーを作成。
    • TOP/flavours/defaultを適当な名前(例えばwebとしておく)でコピー。
    • web/etc/{master.passwd, resolv.conf, localtime, newsyslog.conf, ssh/sshd_config, ...} とか、web/root/.ssh/authorized_keyを用意しておく。
    • web/etc/rc.confやらweb/usr/local/etc/sudoersやらを必要ならいじっておく。
    • web/pkg/を作成し、pkg_addしてほしいパッケージを入れておく。
    • create時に走らせたいスクリプトがあればweb/ezjail.flavourをいじる。(デフォルトの処理内容はpkgがあればその中をインストールすることだけ)
  7. ezjail-admin create -i -s 1g -c eli -f web -r hoge hoge.example.com 192.168.0.3
    • TOP/hoge.example.comだと長すぎてdfが見づらいのでrootを短い名前で設定。
    • しばらく待ってgeliのパスフレーズを入力。暗号化しないなら-i -s 1g -c eliとかいらない。
    • ntpdが*:123で待ってると文句を言われるが、たぶん影響ないので無視。
  8. jailが動いてないときにjailのイメージをいじりたいときは、ezjail-admin config -i attach hoge.examle.comでできるが、attachがへたくそでdetachできないバグがある。すぐ直せる。
  9. /usr/local/etc/rc.d/ezjail.sh start hoge.example.com か startcrypto で、パスフレーズを入力するとjail開始。
  10. sshが設定できてるならそのままsshするとか、jlsして目的のJIDにjexec JID /bin/shするとか、あとは好きなように。
  • 電源が落ちたりして正常に終了できなかったときは、startcryptoする前に ezjail-admin config -i fsck hoge.example.com するべきかも。
ezjailは関係ないけど、当面気になるjailの制約まとめ:
  • domainnameが設定できない。ただし、ホストのdomainnameを参照することはできるので、同一ドメインでならjailでNIS(rpcbind, ypbind)を使うことは可能。ypservは不明。hostnameはjailごとにあるのに、NISなんてレガシーな技術はあんまりサポートしないという方向性か。
  • マウントができないのでNFSクライアントは無理。NFSサーバは試す気なし。
  • BPFがない。でも、net/isc-dhcp3-serverはsocket()あたりを使って動かせるっぽい。
  • localhostにbindできないので、setgidなsendmailを叩いてlocalhostで待ってるMTA(msp)を経由してメールを出すことができない。外部の指定したMTAに直接つなぎに行くか、rootにsetuidする必要がある。/etc/mail/README参照。
ともかく、
Happy jail life!

0 件のコメント: