devfs in jail でお困りのこと。

Since: 2003/9/24
Last Update: 2004/2/1

2004/2/1 更新
devfs の ruleset が jail 環境に適用されない件(下の方)ですが、とある方よりご指摘いただき解決しました。
/etc/rc.conf に

jail_www_devfs_enable="YES"
とした場合、 /etc/defaults/devfs.rules の
[devfsrules_jail=4]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
こういった jail 用の default ruleset が適用されます。
...いつできたよ、こんなの... ゲフンゲフン。
つまり、このルールで支障がなければわざわざルールを作る必要はありません。
もしカスタマイズしたルールを適用したい場合、 jail_example_devfs_ruleset にはルールセットナンバーではなくルールセット名を指定する必要があります。
jail_www_devfs_ruleset="11"
  ↓
jail_www_devfs_ruleset="devfsrules_jail_www"
わざわざ /etc/rc.d/jail や /etc/rc.subr の挙動がおかしいんじゃないかと調整してデバックメッセージを仕込んで再起動したりとか、 ルールセットを適用するスクリプトを書いたりする必要なんか無いわけです。
そんな必要なかったわけです。
まるで無駄だったわけです。
(つД`)




FreeBSD-5.0 から導入された devfs 。従来の /dev 以下はデバイスファイルがなければ自分で sh MAKEDEV hoge で作るのがあたりまえでしたが、 devfs では認識されたデバイスに必要なデバイスファイルが自動で「生えて」くるのです。
カコイイ! カコイイヨ!

jail とは、ホスト環境からディレクトリもプロセスも隔離した、もう一つの環境。
jail環境が汚染されても、ホスト環境には被害は及びません。しかもリソースの許す限りいくらでも環境を増殖できます。
それもイイ! イイヨ!

しかしここで、妙なところで妙なこだわりを持つ当サイト管理者が妙な事態に...



インターネットに情報発信しようと思い、折角なら自分でサーバを作ろう、とマシンも用意してOSからインストールしたわけです。
まぁ、使い慣れている FreeBSD でいきましょう。
4.X-STABLE でもいいんですが、近いうちに 5.X-CURRENT が STABLE ブランチに落ちてくるのは明らかだしかなり安定しているし、ってんで 5.1-RELEASE 導入後、cvsupして make kernel && make world 。

折角だから jail よね〜
D=/home/jail/www
cd /usr/src
mkdir -p $D
make installworld DESTDIR=$D
cd etc
make distribution DESTDIR=$D
cp -Rp /usr/share/zoneinfo/Asia/Tokyo $D/etc/localtime
cat /dev/null > $D/etc/fstab
mount_devfs devfs $D/dev
cd $D
ln -sf dev/null kernel
object はホスト側アップデートのものをそのまま(笑)
あ、そのあとちゃんと FreeBSD-SA-03:12 と 03:13 も適用してますよ?

jail の起動はやっぱり /usr/local/etc/rc.d/ かな〜、面倒だな〜、と /etc をうろうろしていたら...
あらやだ! 最近の jail ったら rc でサポートされてるじゃないの!!
/etc/rc.conf
--------------------
# jail 用のIPアドレスをaliasするですよ〜
ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask 0xffffffff"
# ここから jail の設定ですよ〜
jail_enable="YES"
jail_list="www"
jail_set_hostname_allow="NO"
jail_socket_unixiproute_only="YES"
jail_sysvipc_allow="NO"
jail_stop_jailer="NO"
jail_www_rootdir="/home/jail/www"
jail_www_hostname="www.hogehoge.foo"    # <-- 今さら隠してもねぇ
jail_www_ip="xxx.xxx.xxx.xxx"
jail_www_exec="/bin/sh /etc/rc"
jail_www_devfs_enable="YES"
jail_www_fdescfs_enable="NO"
jail_www_procfs_enable="NO"
jail_www_devfs_ruleset="11"
security をほんのすこーし考えてみて jail 内から見える devfs のデバイスファイルをカット。
/etc/devfs.rules
--------------------
[devfsrules_jail_www=11]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
"$devfsrules_hide_all", "$devfsrules_unhide_basic" は /etc/defaults/devfs.rules が参照されまっす。

完璧っす、間違いねっす! 喜び勇んでさぁリブトー! さぁリブトー!
さぁって、jail君はいるかな〜?
> jls
   JID  IP Address      Hostname                      Path
     1  xxx.xxx.xxx.xxx www.hogehoge.foo              /home/jail/www
をぉっ、いますよいますよ〜。
# jexec 1 /bin/tcsh
# hostname
www.hogehoge.foo
#
侵入OK!(おい
で、苦労して設定したdevfsは、と...

※ここで ls /dev してずらずらといっぱい表示される。


ぎゃあああああああああああ
(イメージ画は楳図かずお風に)



なに? なんなの?
ruleset が適用されてない?
ホスト側のコンソールで...
# devfs rule -s 11 show
100 include 1
200 include 2
ruleset はある...
試しに手打ちで ruleset の適用を...
# devfs -m /home/jail/www/dev rule -s 11 applyset
# ls /home/jail/www/dev
null            random          urandom@        zero
あ〜ん、ちゃんと効いてますぅ〜。

この後、 /etc/rc.d/ 以下を捜索し、 jail スクリプトが怪しいとあたりをつけていろいろ弄ってみたものの、解決せず。
現在、ホスト側の /usr/local/etc/rc.d/ に devfs の ruleset を適用するお手製のスクリプトを置いて回避しています。

もし、
  • /etc/rc.conf だけでいけるよ? ここの記述がおかしいんだよ、お兄ちゃん!
  • jailにobject全部入れるのは間違ってるよ。ほんとはこうするんだよ、お兄ちゃん!
  • 妹ネタで釣れると思ってるパソオタはカエレ!
  • などの突っ込みがありましたら、遠慮無くご連絡ください。
    って FreeBSD-users-jp にも出したんだけど返答はないんだよなぁ...

    ちなみに ssh でホスト側にログインしたときに、jail側のdevfsで ptyp0 と ttyp0 が見えてしまうのはご愛敬?


    ってな感じで、いや〜はまりました。
    この devfs in jail 、時間があったら追跡してみます。

    ってこの設定したマシン、もう動いちゃってるんですけど〜。
    みなさん見ているこのページ...



    2004/2/1 更新
    返せよ...
    ぼくの時間返せよぉぉぉーーー!!!

    戻る。