free bsd jail入門
TRANSCRIPT
FreeBSD jail入門
自己紹介
名前
乃村 翼
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
JailJail
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.confezjail_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
-mmanpageのインストール
-sFreeBSDソースのインストール
-pportsのインストール
-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
-imd デバイスを用い、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 102488drwxr-xr-x 2 root wheel 512 Jul 26 01:50 C78-rw-r--r-- 1 root wheel 104857600 Jul 26 01:50 C78.imgdrwxr-xr-x 9 root wheel 512 Jul 26 00:59 basejaildrwxr-xr-x 3 root wheel 512 Jul 26 00:59 flavoursdrwxr-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
-rrun、norun により、disable/enable 状態を切り替えることが出来ます。disable 状態となったjail は、start 時に起動しません。複数のjail 環境が存在する場合に、特定のjail 環境を起動させたくない場合に使用します。
-njail名の変更ができます。
-cCPU が複数個ある場合、jail を動作させるCPU を指定することが出来ます。内部的にcpuset(1) を使用しています。
# ezjail-admin config -r norun C78
# ezjail-admin config -n after before
# ezjail-admin config -c 0 C8019
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