FreeBSD jail入門
自己紹介
 名前
 乃村 翼
 facebook
 Tsubasa Nomura で検索してください
 お仕事
 Windows Serverのサポート
 英語とMCPの勉強中。。。
サポート終了!
2
目次
1. FreeBSD jailとは
2. FreeBSD jailとは(もう少し詳しく)
3. FreeBSD jailの構築(基本編)
4. FreeBSD jailの構築(ezjail編)
5. FreeBSD jail Tips
6. 【番外編】Hyper-Vでの仮想環境構築Tips
3
FreeBSD jailとは
 コンテナ型仮想化のひとつ
 Linux界隈で盛り上がっているLXCと類似。
 各jailはホストマシン上で動く仮想機械であり、独自のファイ
ルシステムやプロセス空間、ユーザーアカウントを持つ。
(by Wikipedia:http://ja.wikipedia.org/wiki/FreeBSD_jail)
引用元:
http://ascii.jp/elem/000/000/419/419268/#eid419270
4
FreeBSD jailとは
 FreeBSD 4.0で登場
 2000年。LXCよりもだいぶ前!
 安定
5
FreeBSD jailとは(もう少し詳しく)
 ディレクトリツリー、プロセス、ネットワークスタックの分離
 jail 環境ではプロセスは指定されたルートディレクトリから外に出るこ
とは出来ません。
 似た機構に chroot がありますが、こちらはアクセス出来るファイルシ
ステムを限定するのみであり、 ユーザやネットワークはホスト環境と共
有します。
 プログラムのロジックによっては、プロセスは chroot されたディレク
トリの外にアクセスすることが出来てしまいます。
 ネットワークスタックも仮想化。
 FreeBSD 8.0からjail が Vimage 対応に。
 ホスト名
 jail では環境毎にホスト名を持つことが出来ます。
6
FreeBSD jailとは(もう少し詳しく)
 IP アドレス
 jail では構築時に IP アドレスが割り当てられます。複数のIPアドレスを割り
当てることも可能です。
 コマンド
 ファイルシステムが分離される為、もちろんコマンドパスは jail 毎に全く異
なります。ports シ ステムを使用した環境ではユーザ用コマンドは
/usr/local/bin に配置されますが、コマンドパスを 変えることが出来ます。
 root ユーザ
 Unix では root ユーザは特権ユーザとして全ての権限を持っています。jail
のゲスト環境でもroot ユーザは存在しますが、ホスト環境を破壊すること
が無いように、root ユーザであっても、一部の機能に制限事項があります。
7
動かしてみる
8
構成
vyatta
192.168.20.x/24
FreeBSD
Hyper-V
Jail
Jail
Jail
9
FreeBSD jailの構築(基本編)〜jail 作成〜
1. jailのディレクトリを作成し、
2. ユーザランドをビルドして、
3. 指定したディレクトリへインストール。
4. ユーザランドのアプリが使うことがある為、デバイスのマウ
ントもしておく。
 セキュリティリスクが上がる為注意する。
5. インターフェースにエイリアスIPアドレスを設定して、起動
# export JAIL_D=/opt/jails/container01
# mkdir -p $JAIL_D
# cd /usr/src/
# make -j 5 buildworld
# make installworld DESTDIR=$JAIL_D
# make distribution DESTDIR=$JAIL_D
# mount -t devfs devfs $JAIL_D/dev
# ifconfig hn0 alias 192.168.20.10
# jail /opt/jails/containers container01 192.168.20.10 /bin/sh /etc/rc
10
FreeBSD jailの構築(基本編)〜jail 起動と停止〜
1. jailの一覧を出力
2. jail IDを指定してシェルを実行
3. killall の jオプションでjail IDを指定
# jls
# jexec 22 tcsh
# killall -j 22
11
jail簡単ですね!でも。。。
 jailコマンドで作成すると・・・
 ディスクを無駄に使う。
 同じ設定・構成のjailを何個も作るのが面倒。
 バックアップやリカバリを簡単にしたい。
 そこで。。。
ezjail
12
FreeBSD jailの構築(ezjail編)〜jail 作成〜
1. jailのインストール先を設定ファイルに記述
2. ベースシステムをインストール
3. jailを作成する
# vi /usr/local/etc/ezjail.conf
ezjail_jaildir=/opt/ezjails
# ezjail-admin install
# ezjail-admin create -f example container02 192.168.20.10
 予めportsもしくはpkgでezjailをインストールする。
13
FreeBSD jailの構築(ezjail編)〜jail 起動と停止〜
1. ezjail-admin startで起動
2. ezjail-admin consoleでjailの中へ
# ezjail-admin start container02
# ezjail-admin console container02
1. ezjail-admin stopで停止
2. ezjai-admin delete で削除
※-wオプションでファイルの削除までします
# ezjail-admin stop container02
# ezjail-admin delete –w container02
14
FreeBSD jailの構築(ezjail編)〜さらに詳しく〜
 ezjail-admin install
 -m
manpageのインストール
 -s
FreeBSDソースのインストール
 -p
portsのインストール
 -r
リリースバージョンを指定してjail をインストールします。8.4-
RELEASE、9.2-RELEASE などが指定できます。
尚、jail 環境下でuname -r をした場合でも、ホスト環境のバー
ジョンが出力されます。ライブラリ、コマンドが指定されたバー
ジョンでインストールされます。
# ezjail-admin install -r 9.2-RELEASE
15
FreeBSD jailの構築(ezjail編)〜さらに詳しく〜
 ezjail-admin create
 -i
md デバイスを用い、img ファイルにjail のゲスト環境を構築し
ます。
 -c
他のファイルシステムを使用したjailを構築します。
以下コマンドでは、ZFS へjail のゲスト環境を構築します。
# ezjail-admin create -c zfs -s 300M container001 192.168.20.100
# ezjail-admin create -i -s 100M -f example C78 192.168.1.250
# ll /opt/jails/
total 102488
drwxr-xr-x 2 root wheel 512 Jul 26 01:50 C78
-rw-r--r-- 1 root wheel 104857600 Jul 26 01:50 C78.img
drwxr-xr-x 9 root wheel 512 Jul 26 00:59 basejail
drwxr-xr-x 3 root wheel 512 Jul 26 00:59 flavours
drwxr-xr-x 12 root wheel 512 Jul 26 00:59 newjail
16
FreeBSD jailの構築(ezjail編)〜さらに詳しく〜
 ezjail-admin console
 -f
停止状態のゲスト環境を起動した後に、ログインすることが出来
ます。
バグがありましたが、V3.2.3で直してもらいました!
https://erdgeist.org/gitweb/ezjail/
17
FreeBSD jailの構築(ezjail編)〜さらに詳しく〜
 ezjail-admin list
 jail 環境を一覧で出力します。
 STA の列にはjail のステータスが出力されています。それぞ
れのアルファベットは以下の状態を表します。
D ディレクトリベースで構築されたjail。
I md ファイルイメージベースで構築されたjail。
B bde デバイスで構築されたjail。
E eli デバイスで構築されたjail。
Z zfs デバイスで構築されたjail。
R 起動状態のjail。
A bde デバイス、eli デバイスにおいて、attach されているjail。
S 停止状態のjail。
N config オプションにより、disable 状態となっているjail。
18
FreeBSD jailの構築(ezjail編)〜さらに詳しく〜
 ezjail-admin config
 -r
run、norun により、disable/enable 状態を切り替えることが出
来ます。disable 状態となったjail は、start 時に起動しません。
複数のjail 環境が存在する場合に、特定のjail 環境を起動させたく
ない場合に使用します。
 -n
jail名の変更ができます。
 -c
CPU が複数個ある場合、jail を動作させるCPU を指定することが
出来ます。内部的にcpuset(1) を使用しています。
# ezjail-admin config -r norun C78
# ezjail-admin config -n after before
# ezjail-admin config -c 0 C80 19
FreeBSD jailの構築(ezjail編)〜さらに詳しく〜
 ezjail-admin delete
 jail のゲスト環境を削除します。
-w オプションにより、ファイルの削除を行いま
す。ZFS を使用していた場合はデータセットを削
除します。
# ezjail-admin delete -w C80
20
FreeBSD jailの構築(ezjail編)〜さらに詳しく〜
 ezjail-admin archive
 jail 環境のバックアップを作成します。
-a オプションで作成後のファイル名、-d オプションで作成先の
ディレクトリパスを指定します。
デフォルトではjail のルートディレクトリに、jail 名をファイル名
として作成されます。
また、-A オプションを使用することで全てのjail のバックアップ
を作成することが出来ます。
 ezjail-admin restore
 archive オプションによって作成したバックアップから復元しま
す。
# ezjail-admin restore C80
# ezjail-admin archive C80
21
FreeBSD jail Tips
 インストールしたら以下の初期設定をしておく。
 /etc/resolv.confの作成。
 /etc/hostsの追記。
 cronからadjkerntzのコメントアウト。
 タイムゾーンの設定。
22
FreeBSD jail Tips
 マウントポイントの設定
 jail のマウントポイントはホスト環境の/etc/fstab.<jail 名>に記
述されています。内容は、ホスト環境のfstab と同様です。
 dmesg の不可視化
 jail 環境でセキュアな環境を構築する場合、ハードウェアやカー
ネルログを出力するdmesg コマンドを実行できるのは好ましく
ないでしょう。sysctl により、抑止することが出来ます。
 以下をホスト環境のsysctl.conf に追記します。
※下記カーネルパラメータを設定するとホストのrootユーザ以外
はdmesgの内容を取得することができません。
# security.bsd.unprivileged_read_msgbuf=0
23
FreeBSD jail Tips
 pingを打てるようにする
 /usr/local/etc/ezjail/<コンテナ名> ファイルに下記を記述する
 ホストからパッケージ管理を行う
export jail_container001_parameters="allow.raw_sockets"
pkg –j コンテナ名 <info|install|delete|etc…>
24
【番外編】Hyper-Vでの仮想環境構築Tips
25
まとめ
 jailは簡単!
 ezjailを使うともっと簡単&便利!
 Dockerもいいけどjailも頑張ってます
26
ご清聴ありがとうございました。
27

Free bsd jail入門

  • 1.
  • 2.
    自己紹介  名前  乃村翼  facebook  Tsubasa Nomura で検索してください  お仕事  Windows Serverのサポート  英語とMCPの勉強中。。。 サポート終了! 2
  • 3.
    目次 1. FreeBSD jailとは 2.FreeBSD jailとは(もう少し詳しく) 3. FreeBSD jailの構築(基本編) 4. FreeBSD jailの構築(ezjail編) 5. FreeBSD jail Tips 6. 【番外編】Hyper-Vでの仮想環境構築Tips 3
  • 4.
    FreeBSD jailとは  コンテナ型仮想化のひとつ Linux界隈で盛り上がっているLXCと類似。  各jailはホストマシン上で動く仮想機械であり、独自のファイ ルシステムやプロセス空間、ユーザーアカウントを持つ。 (by Wikipedia:http://ja.wikipedia.org/wiki/FreeBSD_jail) 引用元: http://ascii.jp/elem/000/000/419/419268/#eid419270 4
  • 5.
    FreeBSD jailとは  FreeBSD4.0で登場  2000年。LXCよりもだいぶ前!  安定 5
  • 6.
    FreeBSD jailとは(もう少し詳しく)  ディレクトリツリー、プロセス、ネットワークスタックの分離 jail 環境ではプロセスは指定されたルートディレクトリから外に出るこ とは出来ません。  似た機構に chroot がありますが、こちらはアクセス出来るファイルシ ステムを限定するのみであり、 ユーザやネットワークはホスト環境と共 有します。  プログラムのロジックによっては、プロセスは chroot されたディレク トリの外にアクセスすることが出来てしまいます。  ネットワークスタックも仮想化。  FreeBSD 8.0からjail が Vimage 対応に。  ホスト名  jail では環境毎にホスト名を持つことが出来ます。 6
  • 7.
    FreeBSD jailとは(もう少し詳しく)  IPアドレス  jail では構築時に IP アドレスが割り当てられます。複数のIPアドレスを割り 当てることも可能です。  コマンド  ファイルシステムが分離される為、もちろんコマンドパスは jail 毎に全く異 なります。ports シ ステムを使用した環境ではユーザ用コマンドは /usr/local/bin に配置されますが、コマンドパスを 変えることが出来ます。  root ユーザ  Unix では root ユーザは特権ユーザとして全ての権限を持っています。jail のゲスト環境でもroot ユーザは存在しますが、ホスト環境を破壊すること が無いように、root ユーザであっても、一部の機能に制限事項があります。 7
  • 8.
  • 9.
  • 10.
    FreeBSD jailの構築(基本編)〜jail 作成〜 1.jailのディレクトリを作成し、 2. ユーザランドをビルドして、 3. 指定したディレクトリへインストール。 4. ユーザランドのアプリが使うことがある為、デバイスのマウ ントもしておく。  セキュリティリスクが上がる為注意する。 5. インターフェースにエイリアスIPアドレスを設定して、起動 # export JAIL_D=/opt/jails/container01 # mkdir -p $JAIL_D # cd /usr/src/ # make -j 5 buildworld # make installworld DESTDIR=$JAIL_D # make distribution DESTDIR=$JAIL_D # mount -t devfs devfs $JAIL_D/dev # ifconfig hn0 alias 192.168.20.10 # jail /opt/jails/containers container01 192.168.20.10 /bin/sh /etc/rc 10
  • 11.
    FreeBSD jailの構築(基本編)〜jail 起動と停止〜 1.jailの一覧を出力 2. jail IDを指定してシェルを実行 3. killall の jオプションでjail IDを指定 # jls # jexec 22 tcsh # killall -j 22 11
  • 12.
    jail簡単ですね!でも。。。  jailコマンドで作成すると・・・  ディスクを無駄に使う。 同じ設定・構成のjailを何個も作るのが面倒。  バックアップやリカバリを簡単にしたい。  そこで。。。 ezjail 12
  • 13.
    FreeBSD jailの構築(ezjail編)〜jail 作成〜 1.jailのインストール先を設定ファイルに記述 2. ベースシステムをインストール 3. jailを作成する # vi /usr/local/etc/ezjail.conf ezjail_jaildir=/opt/ezjails # ezjail-admin install # ezjail-admin create -f example container02 192.168.20.10  予めportsもしくはpkgでezjailをインストールする。 13
  • 14.
    FreeBSD jailの構築(ezjail編)〜jail 起動と停止〜 1.ezjail-admin startで起動 2. ezjail-admin consoleでjailの中へ # ezjail-admin start container02 # ezjail-admin console container02 1. ezjail-admin stopで停止 2. ezjai-admin delete で削除 ※-wオプションでファイルの削除までします # ezjail-admin stop container02 # ezjail-admin delete –w container02 14
  • 15.
    FreeBSD jailの構築(ezjail編)〜さらに詳しく〜  ezjail-admininstall  -m manpageのインストール  -s FreeBSDソースのインストール  -p portsのインストール  -r リリースバージョンを指定してjail をインストールします。8.4- RELEASE、9.2-RELEASE などが指定できます。 尚、jail 環境下でuname -r をした場合でも、ホスト環境のバー ジョンが出力されます。ライブラリ、コマンドが指定されたバー ジョンでインストールされます。 # ezjail-admin install -r 9.2-RELEASE 15
  • 16.
    FreeBSD jailの構築(ezjail編)〜さらに詳しく〜  ezjail-admincreate  -i md デバイスを用い、img ファイルにjail のゲスト環境を構築し ます。  -c 他のファイルシステムを使用したjailを構築します。 以下コマンドでは、ZFS へjail のゲスト環境を構築します。 # ezjail-admin create -c zfs -s 300M container001 192.168.20.100 # ezjail-admin create -i -s 100M -f example C78 192.168.1.250 # ll /opt/jails/ total 102488 drwxr-xr-x 2 root wheel 512 Jul 26 01:50 C78 -rw-r--r-- 1 root wheel 104857600 Jul 26 01:50 C78.img drwxr-xr-x 9 root wheel 512 Jul 26 00:59 basejail drwxr-xr-x 3 root wheel 512 Jul 26 00:59 flavours drwxr-xr-x 12 root wheel 512 Jul 26 00:59 newjail 16
  • 17.
    FreeBSD jailの構築(ezjail編)〜さらに詳しく〜  ezjail-adminconsole  -f 停止状態のゲスト環境を起動した後に、ログインすることが出来 ます。 バグがありましたが、V3.2.3で直してもらいました! https://erdgeist.org/gitweb/ezjail/ 17
  • 18.
    FreeBSD jailの構築(ezjail編)〜さらに詳しく〜  ezjail-adminlist  jail 環境を一覧で出力します。  STA の列にはjail のステータスが出力されています。それぞ れのアルファベットは以下の状態を表します。 D ディレクトリベースで構築されたjail。 I md ファイルイメージベースで構築されたjail。 B bde デバイスで構築されたjail。 E eli デバイスで構築されたjail。 Z zfs デバイスで構築されたjail。 R 起動状態のjail。 A bde デバイス、eli デバイスにおいて、attach されているjail。 S 停止状態のjail。 N config オプションにより、disable 状態となっているjail。 18
  • 19.
    FreeBSD jailの構築(ezjail編)〜さらに詳しく〜  ezjail-adminconfig  -r run、norun により、disable/enable 状態を切り替えることが出 来ます。disable 状態となったjail は、start 時に起動しません。 複数のjail 環境が存在する場合に、特定のjail 環境を起動させたく ない場合に使用します。  -n jail名の変更ができます。  -c CPU が複数個ある場合、jail を動作させるCPU を指定することが 出来ます。内部的にcpuset(1) を使用しています。 # ezjail-admin config -r norun C78 # ezjail-admin config -n after before # ezjail-admin config -c 0 C80 19
  • 20.
    FreeBSD jailの構築(ezjail編)〜さらに詳しく〜  ezjail-admindelete  jail のゲスト環境を削除します。 -w オプションにより、ファイルの削除を行いま す。ZFS を使用していた場合はデータセットを削 除します。 # ezjail-admin delete -w C80 20
  • 21.
    FreeBSD jailの構築(ezjail編)〜さらに詳しく〜  ezjail-adminarchive  jail 環境のバックアップを作成します。 -a オプションで作成後のファイル名、-d オプションで作成先の ディレクトリパスを指定します。 デフォルトではjail のルートディレクトリに、jail 名をファイル名 として作成されます。 また、-A オプションを使用することで全てのjail のバックアップ を作成することが出来ます。  ezjail-admin restore  archive オプションによって作成したバックアップから復元しま す。 # ezjail-admin restore C80 # ezjail-admin archive C80 21
  • 22.
    FreeBSD jail Tips インストールしたら以下の初期設定をしておく。  /etc/resolv.confの作成。  /etc/hostsの追記。  cronからadjkerntzのコメントアウト。  タイムゾーンの設定。 22
  • 23.
    FreeBSD jail Tips マウントポイントの設定  jail のマウントポイントはホスト環境の/etc/fstab.<jail 名>に記 述されています。内容は、ホスト環境のfstab と同様です。  dmesg の不可視化  jail 環境でセキュアな環境を構築する場合、ハードウェアやカー ネルログを出力するdmesg コマンドを実行できるのは好ましく ないでしょう。sysctl により、抑止することが出来ます。  以下をホスト環境のsysctl.conf に追記します。 ※下記カーネルパラメータを設定するとホストのrootユーザ以外 はdmesgの内容を取得することができません。 # security.bsd.unprivileged_read_msgbuf=0 23
  • 24.
    FreeBSD jail Tips pingを打てるようにする  /usr/local/etc/ezjail/<コンテナ名> ファイルに下記を記述する  ホストからパッケージ管理を行う export jail_container001_parameters="allow.raw_sockets" pkg –j コンテナ名 <info|install|delete|etc…> 24
  • 25.
  • 26.
  • 27.