ae4bdfbd36
(following entries are not updated by this commit: crunchgen.1 groff.1 grohtml.1 grolj4.1 grops.1 grotty.1 pic.1 troff.1 groff_font.5 magic.5 groff_mm.7 re_format.7 disklabel.8)
397 lines
13 KiB
Groff
397 lines
13 KiB
Groff
.\"
|
|
.\"Copyright (c) 2000 Robert N. M. Watson
|
|
.\"All rights reserved.
|
|
.\"
|
|
.\"Redistribution and use in source and binary forms, with or without
|
|
.\"modification, are permitted provided that the following conditions
|
|
.\"are met:
|
|
.\"1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\"2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\"THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\"ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\"IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\"ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\"FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\"DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\"OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\"HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\"LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\"OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\"SUCH DAMAGE.
|
|
.\"
|
|
.\"
|
|
.\"----------------------------------------------------------------------------
|
|
.\""THE BEER-WARE LICENSE" (Revision 42):
|
|
.\"<phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you
|
|
.\"can do whatever you want with this stuff. If we meet some day, and you think
|
|
.\"this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
|
.\"----------------------------------------------------------------------------
|
|
.\"
|
|
.\"%FreeBSD: src/usr.sbin/jail/jail.8,v 1.13.2.5 2000/12/14 12:18:09 ru Exp %
|
|
.\"
|
|
.Dd April 28, 1999
|
|
.\" jpman %Id: jail.8,v 1.3 2000/05/22 03:23:14 takamune Stab %
|
|
.Dt JAIL 8
|
|
.Os FreeBSD
|
|
.Sh 名称
|
|
.Nm jail
|
|
.Nd プロセスとその子孫を閉じ込める
|
|
.Sh 書式
|
|
.Nm jail
|
|
.Ar path
|
|
.Ar hostname
|
|
.Ar ip-number
|
|
.Ar command
|
|
.Ar ...
|
|
.Sh 解説
|
|
.Nm
|
|
コマンドはプロセスとその将来の子孫を閉じ込めます。
|
|
.Pp
|
|
詳細は
|
|
.Xr jail 2
|
|
のマニュアルページを参照してください。
|
|
.Sh 使用例
|
|
.Ss jail 用ディレクトリツリー設定
|
|
この例は jail 用ディレクトリツリーをどのように構築するかを示しています:
|
|
.Bd -literal
|
|
D=/here/is/the/jail
|
|
cd /usr/src
|
|
make hierarchy DESTDIR=$D
|
|
make obj
|
|
make depend
|
|
make all
|
|
make install DESTDIR=$D
|
|
cd etc
|
|
make distribution DESTDIR=$D NO_MAKEDEV=yes
|
|
cd $D/dev
|
|
sh MAKEDEV jail
|
|
cd $D
|
|
ln -sf dev/null kernel
|
|
.Ed
|
|
.Ss jail の設定
|
|
jail 用ディレクトリツリーの構築のためには、
|
|
.Sx jail 用ディレクトリツリー設定
|
|
に記述されている手順を実行してください。
|
|
この例では、jail された IP アドレス用に
|
|
.Pa /data/jail/192.168.11.100
|
|
に構築するものと仮定します。
|
|
以降、
|
|
あなたが必要とするディレクトリ、IP アドレス、ホスト名で置き換えてください。
|
|
.Pp
|
|
まず、実システムの環境を
|
|
.Dq jail に適した環境
|
|
にします。
|
|
一貫性のために、親となる実マシンを
|
|
.Dq ホスト環境
|
|
と呼び、jail される仮想マシンを
|
|
.Dq jail 環境
|
|
と呼びます。
|
|
jail は IP エイリアスを使用して実装されていますので、
|
|
最初にすべきことのひとつは、
|
|
ホストシステムの IP サービスで、
|
|
全ローカル IP アドレスに対してサービスを listen しているものを、
|
|
無効化することです。
|
|
これは、
|
|
.Xr inetd 8
|
|
を修正して、適切な IP アドレスのみ listen させるといった
|
|
ことを意味します。
|
|
次の設定を、ホスト環境の
|
|
.Pa /etc/rc.conf
|
|
に追加します:
|
|
.Bd -literal -offset indent
|
|
sendmail_enable="NO"
|
|
inetd_flags="-wW -a 192.168.11.23"
|
|
portmap_enable="NO"
|
|
syslogd_flags="-ss"
|
|
.Ed
|
|
.Pp
|
|
この例では、
|
|
.Li 192.169.11.23
|
|
はホストシステムの元々の IP アドレスです。
|
|
.Xr inetd 8
|
|
から実行されるデーモンは、指定されたホスト IP アドレスを使用するよう、
|
|
簡単に設定可能です。
|
|
他のデーモンは手動での設定が必要です -- いくつかに対しては、
|
|
.Xr rc.conf 5
|
|
フラグエントリにて可能ですが、他のものに対してはアプリケーション毎の
|
|
設定ファイルをいじるか、再コンパイルが必要です。
|
|
実行に使用する IP アドレスを指定不可能なアプリケーションに対しては、
|
|
可能であればこれらを無効にする方が良いです。
|
|
.Pp
|
|
ベースシステムに付属する多くのデーモンは、
|
|
jail 中枢環境内で jail から実行されると、問題を持ち得ます。
|
|
これには
|
|
.Xr syslogd 8 ,
|
|
.Xr sendmail 8 ,
|
|
.Xr named 8 ,
|
|
.Xr portmap 8
|
|
が含まれます。
|
|
sendmail と named は、自身の設定ファイルを使用して、
|
|
特定の IP のみ listen するよう設定可能ですが、
|
|
ほとんどの場合、
|
|
デーモンを単に jail 内でのみ実行して、ホスト環境では実行しない方が簡単です。
|
|
syslogd は単一 IP のみに bind するよう設定できませんが、
|
|
ネットワークポートに bind しないようにするために、``-ss'' 引数を使用可能です。
|
|
ホスト環境からの NFS にサービスしようとすると、
|
|
混乱が生じるかもしれませんし、
|
|
特定の IP だけを使用するようには簡単には再設定できません。
|
|
これは、NFS のサービスには、直接カーネルが実行するものがあるからです。
|
|
ホスト環境内で動作している
|
|
すべてのサードパーティネットワークソフトウェアもまた確認および設定して、
|
|
すべての IP アドレスに bind しないようにすべきです。
|
|
結果として、これらのサービスもまた、
|
|
jail 環境から提供されているように見えるでしょう。
|
|
.Pp
|
|
ひとたびこれらのデーモンが無効化またはホスト環境内に固定化されたなら、
|
|
後の混乱
|
|
(jail へメールを送るときに、jail の sendmail がダウンしていて、
|
|
メールがホストへ配送されてしまうなど)
|
|
の可能性を減らすために、
|
|
リブートして全デーモンが既知の状態となるようにするのが最良です。
|
|
.Pp
|
|
最初に jail を起動するときには、
|
|
ネットワークインタフェースを設定しないでください。
|
|
これは、ネットワークインタフェースを少し整理したり、
|
|
アカウントを設定するためです。
|
|
どんなマシンでも (仮想であってもそうでなくても)、
|
|
root のパスワードやタイムゾーンといった情報を設定する必要があるでしょう。
|
|
始める前に、
|
|
.Xr sysinstall 8
|
|
を jail のツリーにコピーすることにより、簡単に設定できます。
|
|
次のように行います:
|
|
.Bd -literal -offset indent
|
|
# mkdir /data/jail/192.168.11.100/stand
|
|
# cp /stand/sysinstall /data/jail/192.168.11.100/stand
|
|
.Ed
|
|
.Pp
|
|
それから、jail を開始します:
|
|
.Bd -literal -offset indent
|
|
# jail /data/jail/192.168.11.100 testhostname 192.168.11.100 /bin/sh
|
|
.Ed
|
|
.Pp
|
|
最後に、エラー無しで、jail 内の、シェルプロンプトで終るでしょう。
|
|
ここで、
|
|
.Pa /stand/sysinstall
|
|
を実行し、インストール後の設定で様々な設定オプションを設定できます。
|
|
また、同様のことを実現するために、rc.conf 等を手動で編集できます。
|
|
.Pp
|
|
.Bl -bullet -offset indent -compact
|
|
.It
|
|
空の /etc/fstab を作成し、空の fstab に関する起動警告を解消します。
|
|
.It
|
|
ポートマッパを無効化します (rc.conf: portmap_enable="NO")。
|
|
.It
|
|
.Xr newaliases 1
|
|
を実行し、sendmail の警告を解消します。
|
|
.It
|
|
インタフェース設定を無効化し、ifconfig 関連の起動警告を解消します
|
|
(network_interfaces="")。
|
|
.It
|
|
/etc/resolv.conf を設定し、jail 内の名前解決が正しく動作するようにします。
|
|
.It
|
|
root のパスワードを設定します。
|
|
実ホストシステムとは異なっても良いです。
|
|
.It
|
|
タイムゾーンを設定します。
|
|
.It
|
|
jail 環境内のユーザにユーザアカウントを追加します。
|
|
.It
|
|
jail 環境に必要なパッケージを追加します。
|
|
.El
|
|
.Pp
|
|
パッケージ固有の設定 (ウェブサーバや SSH サーバ等) や、
|
|
好みのログを取るための /etc/syslog.conf の修正等を行ってください。
|
|
.Pp
|
|
シェルから抜ければ、jail はシャットダウンします。
|
|
.Ss jail の開始
|
|
jail を再開し、
|
|
全デーモンと他のプログラムと共に環境を立ち上げる準備ができました。
|
|
これを実行するには、まず仮想ホストのインタフェースを立ち上げ、
|
|
それから jail の
|
|
.Pa /etc/rc
|
|
スクリプトを jail 内から実行します。
|
|
.Pp
|
|
注: 信頼できないユーザに jail 内で root アクセスを許す予定なら、
|
|
jail.set_hostname_allowed を 0 に設定することを検討すると良いでしょう。
|
|
管理上の理由を参照して、何故これが良い考えなのかを見てください。
|
|
この変数を設定することにしたならば、
|
|
すべての jail の起動前にこれを設定することが必要であり、
|
|
またブートの度に 1 度必要です。
|
|
.Bd -literal -offset indent
|
|
# 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 \\
|
|
/bin/sh /etc/rc
|
|
.Ed
|
|
.Pp
|
|
ほとんどの
|
|
.Xr sysctl 8
|
|
設定変数は jail 内から設定不可であるため、若干の警告が表示されます。
|
|
なぜなら、
|
|
これらの設定変数は、すべての jail 環境とホスト環境に渡って大域的だからです。
|
|
しかしながら、すべて正しく動作することでしょう。
|
|
.Xr inetd 8 ,
|
|
.Xr syslogd 8
|
|
および他のプロセスが jail 内で動作していることは、
|
|
.Xr ps 1
|
|
を使用することにより、jail されたプロセスの横に
|
|
.Dq J
|
|
フラグが付いていることにより確認可能です。
|
|
jail された環境へは、ホスト名または IP アドレスで telnet 可能であり、
|
|
前述の手順で作成したアカウントを使用してログイン可能です。
|
|
.Ss jail の管理
|
|
通常のマシンのシャットダウンコマンド、例えば
|
|
.Xr halt 8 ,
|
|
.Xr reboot 8 ,
|
|
.Xr shutdown 8
|
|
は jail 内ではうまく使えません。
|
|
jail 内の全プロセスを殺すためには、jail に root でログインし、
|
|
やりたいことに依存して次のいずれかのコマンドを使用します:
|
|
.Pp
|
|
.Bl -bullet -offset indent -compact
|
|
.It
|
|
.Li kill -TERM -1
|
|
.It
|
|
.Li kill -KILL -1
|
|
.El
|
|
.Pp
|
|
これにより、
|
|
.Dq TERM
|
|
または
|
|
.Dq KILL
|
|
のシグナルを、jail 内から jail 内の全プロセスに通知します。
|
|
jail の用途に依存して、jail 内で
|
|
.Pa /etc/rc.shutdown
|
|
を実行したいかもしれません。
|
|
現在のところ、jail 内に新規プロセスを挿入する手段はありませんので、
|
|
これらの動作を行う前にまず jail へログインする必要があります。
|
|
.Pp
|
|
jail 外からプロセスを殺すためには、
|
|
殺すプロセスの個々の PID を判別することが必要です。
|
|
.Pa /proc/ Ns Va pid Ns Pa /status
|
|
ファイルの最後のフィールドには、
|
|
プロセスが動作している jail のホスト名か、
|
|
このプロセスが jail 内で動作していないことを示すために
|
|
.Dq -
|
|
を含みます。
|
|
.Xr ps 1
|
|
コマンドもまた、jail 内のプロセスに対して
|
|
.Dq J
|
|
フラグを示します。
|
|
しかし、jail 用のホスト名はデフォルトでは jail 内から書き換え可能であるため、
|
|
デフォルトでは
|
|
.Pa /proc
|
|
の status エントリは信頼できません。
|
|
jail 内からのホスト名設定を禁ずるには、ホスト環境の sysctl 変数
|
|
.Dq Va jail.set_hostname_allowed
|
|
を 0 に設定します。
|
|
これはすべての jail に影響します。
|
|
.Xr sysctl.conf 5
|
|
を使うことにより、ブートのたびにこの sysctl 設定を行えます。
|
|
次の行を sysctl.conf に追加するだけです:
|
|
.Bd -literal -offset indent
|
|
jail.set_hostname_allowed=0
|
|
.Ed
|
|
.Pp
|
|
将来のバージョンの
|
|
.Fx
|
|
では、jail を管理するための機構は、
|
|
より良くなっているでしょう。
|
|
.Ss Sysctl MIB エントリ
|
|
jail 封鎖環境の特定の側面は、ホスト環境から、
|
|
.Xr sysctl 8
|
|
MIB 変数を使用して変更可能です。
|
|
現在のところ、これらの変数はシステム上のすべての jail 環境に影響しますが、
|
|
将来的にこの機能はより細粒度となる予定です。
|
|
.Bl -tag -width XXX
|
|
.It jail.set_hostname_allowed
|
|
本 MIB エントリは、jail 内のプロセスが
|
|
.Xr hostname 1
|
|
または
|
|
.Xr sethostname 3
|
|
を使用して、ホスト名を変更可能か否かを指定します。
|
|
現在の jail 実装では、
|
|
jail 内からホスト名を設定できてしまうと、
|
|
.Pa /proc
|
|
内の jail 情報が正確であることに依存している管理ツールへ影響します。
|
|
このため、
|
|
信頼できない団体に jail への特権アクセスを許している環境においては、
|
|
本機能は無効化するべきです。
|
|
.It jail.socket_unixiproute_only
|
|
jail 機能は、単一の IPv4 アドレスを各 jail へ bind し、
|
|
IPv4 空間における他のネットワークアドレスへのアクセスを制限します。
|
|
これらは、ホスト環境ではアクセス可能であるかもしれません。
|
|
しかしながら jail は現在のところ、
|
|
jail 機能を持たない他のネットワークプロトコルスタックへの
|
|
アクセスを制限できません。
|
|
このためデフォルトでは、jail 内のプロセスは
|
|
.Dv PF_LOCAL ,
|
|
.Dv PF_INET ,
|
|
.Dv PF_ROUTE
|
|
ドメインのプロトコルにのみアクセス可能ですので、
|
|
UNIX ドメインソケット、IPv4 アドレス、ルーティングソケットにアクセス可能です。
|
|
他のドメインへアクセスを有効にするには、
|
|
本 MIB エントリを 0 に設定します。
|
|
.It jail.sysvipc_allowed
|
|
本 MIB エントリは、jail 内のプロセスが System V IPC プリミティブへの
|
|
アクセスを持つか否かを指定します。
|
|
現在の jail 実装では、System V プリミティブは、
|
|
ホスト環境と jail 環境に跨がる単一の名前空間を共有します。
|
|
これは、jail 内のプロセスが jail 外のプロセスや他の jail 内のプロセスと
|
|
通信可能である (また潜在的に妨害も可能である) ことを意味します。
|
|
このため、この機能はデフォルトで無効ですが、
|
|
本 MIB エントリを 1 に設定することで有効にできます。
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr chroot 2 ,
|
|
.Xr jail 2 ,
|
|
.Xr procfs 5 ,
|
|
.Xr rc.conf 5 ,
|
|
.Xr sysctl.conf 5 ,
|
|
.Xr halt 8 ,
|
|
.Xr inetd 8 ,
|
|
.Xr named 8 ,
|
|
.Xr portmap 8 ,
|
|
.Xr reboot 8 ,
|
|
.Xr sendmail 8 ,
|
|
.Xr shutdown 8 ,
|
|
.Xr sysctl 8 ,
|
|
.Xr syslogd 8
|
|
.Sh 歴史
|
|
.Fn jail
|
|
ファンクションコールは
|
|
.Fx 4.0
|
|
ではじめて登場しました。
|
|
.Sh 作者
|
|
jail の機能は
|
|
.An Poul-Henning Kamp
|
|
によって
|
|
R&D Associates
|
|
.Dq Li http://www.rndassociates.com/
|
|
のために書かれ、
|
|
.Fx
|
|
に寄贈されました。
|
|
.Pp
|
|
Robert Watson が追加の文書を書き、少々バグを見つけ、
|
|
新規機能を少々追加し、ユーザランドの jail 環境を綺麗にしました。
|
|
.Sh バグ
|
|
jail は現在のところ、強力な管理機構を持ちません。
|
|
これには例えば、jail 内の全プロセスにシグナルを送る、
|
|
.Xr procfs 5
|
|
に対して特定の jail 情報を
|
|
.Xr ps 1
|
|
経由でアクセスできるようにすることが含まれます。
|
|
また、アドレスエイリアスフラグを追加して、
|
|
全 IP (INADDR_ANY) 上で listen するようなデーモンが
|
|
このフラグを持つアドレスには bind しないようにすると良いかもしれません。
|
|
これにより、jail 内から提供されるサービスに対して
|
|
ホストデーモンが負担をかけない、安全なホスト環境を構築可能とします。
|
|
現在のところ、
|
|
最も単純な答えはホスト上で提供するサービスを最小化することであり、
|
|
おそらく簡単に設定可能な
|
|
.Xr inetd 8
|
|
から提供されるものに限定することでしょう。
|