FreeBSD6をインストールしたときに、せっかくjail用のパーティションを切ったので、jailで遊んでみた。
手順は、man jail そのままと言っても良いくらい、マニュアルが詳しい。
  1. /etc/rc.confに、以下のような行を追加して、ネットワークインターフェイスにエイリアスをつける
    ifconfig_rl0_alias0="inet 192.168.0.2 netmask 0xffffff00"
    
  2. make worldする
    set D=/jail1
    cd /usr/src
    make world DESTDIR=$D
    cd etc
    make distribution DESTDIR=$D
    mount_devfs devfs $D/dev
    cd $D
    ln -sf dev/null kernel
    
  3. マニュアルの、「ホスト環境の設定」のセクションにしたがって、ネットワークデーモンが新しいエイリアスのIPでLISTENしないようにする
    jailのマニュアルにないものや、注意がいるものは以下
    • inetd
      -a オプションでLISTENするIPが指定できるが、複数指定できない。うちの場合はFreeBSDがルータなので、2つのIPでLISTENして欲しいので困ってしまう。最終的にはinetdは全てのアドレスでLISTENするようにしてしまった。(jail 環境では、ホスト環境がinetdでサービスしているポートは使えないと言うこと)
    • sshd
      /etc/ssh/sshd_config に、ListenAddress の行を追加する
    • courier-imapd
      /usr/local/etc/courier-imap/imapdの、PORT=の行を追加するIPアドレス.143 を , で区切って並べる
    • squid
      /usr/local/etc/squid/squid.conf の、http_portの行を追加する。(もともと、家庭内からしか使えないように記述してあったので変更なし)
    • apache
      /usr/local/etc/apache2/httpd.conf の、Listen の行を追加する。IPアドレス:ポートを、複数行書く
    • samba
      /usr/local/etc/smb.conf のinterface=にIPアドレスを書く。さらに、bind interfaces only = yes の行を追加。(これも、もともとやってあった)
    • postfix
      /usr/local/etc/postfix/main.cf で、inet_interfaces の行に、, 区切りでIPアドレスを書く
    • named(BIND9)
      /etc/namedb/named.conf で、options {} の中に listen-on { } を書き、その中にIPを; 区切りで書く
    • postgresql
      /usr/local/pgsql/data/postgresql.conf の virtual_host行。(これももともとlocalhostだけだった)
  4. jailでshの起動
    jail /jail1 zaudev 192.168.0.2 /bin/sh
    
    これで、jail上のシェルが起動するので、後はマニュアルに従って設定する
    1. 空の/etc/fstabを作る
    2. 以下の内容で/etc/rc.confを作る
      network_interfaces=""
      portmap_enable="NO"
      inetd_enable="NO"
      syslogd_flags="-ss"
      sendmail_enable="NONE"
      
  5. 設定が終わったら、ホストOSの起動時にjailが起動するようにする。ホスト側の/etc/rc.confに以下を追加する
    jail_enable="YES"
    jail_list="jail1"
    jail_set_hostname_allow="NO"
    jail_jail1_rootdir="/jail1"
    jail_jail1_hostname="zaudev"
    jail_jail1_ip="192.168.0.2"
    jail_jail1_exec_start="/bin/sh /etc/rc"
    jail_jail1_exec_stop="/bin/sh /etc/rc.shutdown"
    jail_jail1_devfs_enable="YES"
    jail_jail1_fdescfs_enable="NO"
    jail_jail1_procfs_enable="YES"
    jail_jail1_mount_enable="NO"
    
    これで、/etc/rc.d/jail start とかやればjailが起動する。
jailが起動していれば、ホストのrootアカウントで、jlsコマンドで動作中のjailの一覧が見れて、jexec 1 tsch なんてやれば、jail上でtcshが実行できる。
jexecがあれば十分なので、jail上ではあえてsshdとかは動かさなかった。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: jailで遊んでみた

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1018

コメントする

このブログ記事について

このページは、falseが2006年1月11日 17:12に書いたブログ記事です。

ひとつ前のブログ記事は「FAX共有・・・無理!」です。

次のブログ記事は「jailでportsを使う」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1