jail(8) FreeBSD 一般コマンドマニュアル

jail

前のページ 上に戻る 次のページ

jail




解説

     jail コマンドはプロセスとその将来の子孫を閉じ込めます。

     詳細は jail(2) のマニュアルページを参照してください。


使用例

   jail B>用B>デB>ィB>レB>クB>トB>リB>ツB>リB>ーB>設B>定
     この例は jail 用ディレクトリツリーをどのように構築するかを示しています:

     D=/here/is/the/jail
     cd /usr/src
     make world DESTDIR=$D
     cd etc
     make distribution DESTDIR=$D NO_MAKEDEV=yes
     cd $D/dev
     sh MAKEDEV jail
     cd $D
     ln -sf dev/null kernel

   jail B>のB>設B>定
     jail 用ディレクトリツリーの構築のためには、 jail 用ディレクトリツリー設定
     に記述されている手順を実行してください。この例では、jail された IP アドレ
     ス用に /data/jail/192.168.11.100 に構築するものと仮定します。以降、あなた
     が必要とするディレクトリ、IP アドレス、ホスト名で置き換えてください。

     まず、実システムの環境を ``jail に適した環境'' にします。一貫性のために、
     親となる実マシンを ``ホスト環境'' と呼び、jail される仮想マシンを ``jail
     環境'' と呼びます。 jail は IP エイリアスを使用して実装されていますので、
     最初にすべきことのひとつは、ホストシステムの IP サービスで、全ローカル IP
     アドレスに対してサービスを listen しているものを、無効化することです。こ
     れは、 inetd(8) を修正して、適切な IP アドレスのみ listen させるといった
     ことを意味します。次の設定を、ホスト環境の /etc/rc.conf に追加します:

           sendmail_enable="NO"
           inetd_flags="-wW -a 192.168.11.23"
           portmap_enable="NO"
           syslogd_flags="-ss"

     この例では、 192.169.11.23 はホストシステムの元々の IP アドレスです。
     inetd(8) から実行されるデーモンは、指定されたホスト IP アドレスを使用する
     よう、簡単に設定可能です。他のデーモンは手動での設定が必要です -- いくつ
     かに対しては、 rc.conf(5) フラグエントリにて可能ですが、他のものに対して
     はアプリケーション毎の設定ファイルをいじるか、再コンパイルが必要です。実
     行に使用する IP アドレスを指定不可能なアプリケーションに対しては、可能で
     あればこれらを無効にする方が良いです。

     ベースシステムに付属する多くのデーモンは、 jail 中枢環境内で jail から実
     行されると、問題を持ち得ます。これには syslogd(8), sendmail(8), named(8),
     portmap(8) が含まれます。 sendmail と named は、自身の設定ファイルを使用
     して、特定の IP のみ listen するよう設定可能ですが、ほとんどの場合、デー
     モンを単に jail 内でのみ実行して、ホスト環境では実行しない方が簡単です。
     最初に jail を起動するときには、ネットワークインタフェースを設定しないで
     ください。これは、ネットワークインタフェースを少し整理したり、アカウント
     を設定するためです。どんなマシンでも (仮想であってもそうでなくても)、
     root のパスワードやタイムゾーンといった情報を設定する必要があるでしょう。
     始める前に、 sysinstall(8) を jail のツリーにコピーすることにより、簡単に
     設定できます。次のように行います:

           # mkdir /data/jail/192.168.11.100/stand
           # cp /stand/sysinstall /data/jail/192.168.11.100/stand

     それから、jail を開始します:

           # jail /data/jail/192.168.11.100 testhostname 192.168.11.100 /bin/sh

     最後に、エラー無しで、jail 内の、シェルプロンプトで終るでしょう。ここで、
     /stand/sysinstall を実行し、インストール後の設定で様々な設定オプションを
     設定できます。また、同様のことを実現するために、rc.conf 等を手動で編集で
     きます。

           o   空の /etc/fstab を作成し、空の fstab に関する起動警告を解消しま
               す。
           o   ポートマッパを無効化します (rc.conf: portmap_enable="NO")。
           o   newaliases(1) を実行し、sendmail の警告を解消します。
           o   インタフェース設定を無効化し、ifconfig 関連の起動警告を解消しま
               す (network_interfaces="")。
           o   /etc/resolv.conf を設定し、jail 内の名前解決が正しく動作するよ
               うにします。
           o   root のパスワードを設定します。実ホストシステムとは異なっても良
               いです。
           o   タイムゾーンを設定します。
           o   jail 環境内のユーザにユーザアカウントを追加します。
           o   jail 環境に必要なパッケージを追加します。

     パッケージ固有の設定 (ウェブサーバや SSH サーバ等) や、好みのログを取るた
     めの /etc/syslog.conf の修正等を行ってください。

     シェルから抜ければ、jail はシャットダウンします。

   jail B>のB>開B>始
     jail を再開し、全デーモンと他のプログラムと共に環境を立ち上げる準備ができ
     ました。これを実行するには、まず仮想ホストのインタフェースを立ち上げ、そ
     れから jail の /etc/rc スクリプトを jail 内から実行します。

     注: 信頼できないユーザに jail 内で root アクセスを許す予定なら、
     jail.set_hostname_allowed を 0 に設定することを検討すると良いでしょう。管
     理上の理由を参照して、何故これが良い考えなのかを見てください。この変数を
     設定することにしたならば、すべての jail の起動前にこれを設定することが必
     要であり、またブートの度に 1 度必要です。

           # ifconfig ed0 inet alias 192.168.11.100 netmask 255.255.255.255
           # mount -t procfs proc /data/jail/192.168.11.100/proc
           # jail /data/jail/192.168.11.100 testhostname 192.168.11.100 \

     めには、jail に root でログインし、やりたいことに依存して次のいずれかのコ
     マンドを使用します:

           o   kill -TERM -1
           o   kill -KILL -1

     これにより、 ``TERM'' または ``KILL'' のシグナルを、jail 内から jail 内の
     全プロセスに通知します。 jail の用途に依存して、jail 内で
     /etc/rc.shutdown を実行したいかもしれません。現在のところ、jail 内に新規
     プロセスを挿入する手段はありませんので、これらの動作を行う前にまず jail
     へログインする必要があります。

     jail 外からプロセスを殺すためには、殺すプロセスの個々の PID を判別するこ
     とが必要です。 /proc/pid/status ファイルの最後のフィールドには、プロセス
     が動作している jail のホスト名か、このプロセスが jail 内で動作していない
     ことを示すために ``-'' を含みます。 ps(1) コマンドもまた、jail 内のプロセ
     スに対して ``J'' フラグを示します。しかし、jail 用のホスト名はデフォルト
     では jail 内から書き換え可能であるため、デフォルトでは /proc の status エ
     ントリは信頼できません。 jail 内からのホスト名設定を禁ずるには、ホスト環
     境の sysctl 変数 ``jail.set_hostname_allowed'' を 0 に設定します。これは
     すべての jail に影響します。 sysctl.conf(5) を使うことにより、ブートのた
     びにこの sysctl 設定を行えます。次の行を sysctl.conf に追加するだけです:

           jail.set_hostname_allowed=0

     将来のバージョンの FreeBSD では、jail を管理するための機構は、より良く
     なっているでしょう。

   Sysctl MIB B>エB>ンB>トB>リ
     jail 封鎖環境の特定の側面は、ホスト環境から、 sysctl(8) MIB 変数を使用し
     て変更可能です。現在のところ、これらの変数はシステム上のすべての jail 環
     境に影響しますが、将来的にこの機能はより細粒度となる予定です。

     jail.set_hostname_allowed
          本 MIB エントリは、jail 内のプロセスが hostname(1) または
          sethostname(3) を使用して、ホスト名を変更可能か否かを指定します。現
          在の jail 実装では、 jail 内からホスト名を設定できてしまうと、 /proc
          内の jail 情報が正確であることに依存している管理ツールへ影響します。
          このため、信頼できない団体に jail への特権アクセスを許している環境に
          おいては、本機能は無効化するべきです。

     jail.socket_unixiproute_only
          jail 機能は、単一の IPv4 アドレスを各 jail へ bind し、 IPv4 空間に
          おける他のネットワークアドレスへのアクセスを制限します。これらは、ホ
          スト環境ではアクセス可能であるかもしれません。しかしながら jail は現
          在のところ、 jail 機能を持たない他のネットワークプロトコルスタックへ
          のアクセスを制限できません。このためデフォルトでは、jail 内のプロセ
          スは PF_LOCAL, PF_INET, PF_ROUTE ドメインのプロトコルにのみアクセス
          可能ですので、 UNIX ドメインソケット、IPv4 アドレス、ルーティングソ
          ケットにアクセス可能です。他のドメインへアクセスを有効にするには、本
          MIB エントリを 0 に設定します。


歴史

     jail() ファンクションコールは FreeBSD 4.0 ではじめて登場しました。


作者

     jail の機能は Poul-Henning Kamp によって R&D Associates
     ``http://www.rndassociates.com/'' のために書かれ、 FreeBSD に寄贈されまし
     た。

     Robert Watson が追加の文書を書き、少々バグを見つけ、新規機能を少々追加
     し、ユーザランドの jail 環境を綺麗にしました。


バグ

     jail は現在のところ、強力な管理機構を持ちません。これには例えば、jail 内
     の全プロセスにシグナルを送る、 procfs(5) に対して特定の jail 情報を ps(1)
     経由でアクセスできるようにすることが含まれます。また、アドレスエイリアス
     フラグを追加して、全 IP (INADDR_ANY) 上で listen するようなデーモンがこの
     フラグを持つアドレスには bind しないようにすると良いかもしれません。これ
     により、jail 内から提供されるサービスに対してホストデーモンが負担をかけな
     い、安全なホスト環境を構築可能とします。現在のところ、最も単純な答えはホ
     スト上で提供するサービスを最小化することであり、おそらく簡単に設定可能な
     inetd(8) から提供されるものに限定することでしょう。

FreeBSD 4.4                     April 28, 1999                     FreeBSD 4.4

ABELNET VPSサービス