os:freebsd:jail
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
os:freebsd:jail [2017/07/11 08:56] – [Host側のディレクトリをマウント] hayashi | os:freebsd:jail [2021/07/14 09:48] – hayashi | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== jail+zfs ====== | ||
+ | |||
+ | jailとzfsと組み合わせて、種になるjailを作成して、そのスナップショットをテンプレートにしてzfs cloneで作成します。\\ | ||
+ | 設定周りのスクリプトがあればezjailとかなくても良いかも… | ||
+ | |||
+ | ===== 場所の確保 ===== | ||
+ | |||
+ | # zfs create -o mountpoint=/ | ||
+ | # zfs create tank01/ | ||
+ | |||
+ | ===== 元となるjailの構築 ===== | ||
+ | |||
+ | 入れるのはbaseとlib32でとりあえず大丈夫でしょう。 | ||
+ | |||
+ | # bsdinstall jail /jail/base | ||
+ | |||
+ | < | ||
+ | 2015.05.20 直った模様(10.1-RELEASE-p10で確認) | ||
+ | |||
+ | // | ||
+ | ===== 元となるjailのupdate ===== | ||
+ | |||
+ | |||
+ | 必要に応じて元jailをupdateしておく((-b でbaseディレクトリを -d でtempを指定している))((jailが起動していなくてもOK)) | ||
+ | |||
+ | # freebsd-update -b /jail/base -d / | ||
+ | # freebsd-update -b /jail/base -d / | ||
+ | |||
+ | jail環境で | ||
+ | # sysctl security.jail.param.allow.chflags=1 | ||
+ | とすることで、jail環境内でも freebsd-update を利用できる模様。((2014.05.07現在未確認)) | ||
+ | |||
+ | ===== 設定 ===== | ||
+ | |||
+ | / | ||
+ | < | ||
+ | # common variables | ||
+ | exec.prestart | ||
+ | exec.start | ||
+ | exec.stop | ||
+ | exec.poststop | ||
+ | exec.clean; | ||
+ | $nic = " | ||
+ | mount.devfs; | ||
+ | path = "/ | ||
+ | host.hostname | ||
+ | |||
+ | # each jail | ||
+ | base { ip4.addr = 192.168.0.128; | ||
+ | </ | ||
+ | |||
+ | この例では、ホストと同じネットワークに接続する設定で、起動時にIP alias を振ってる。 | ||
+ | |||
+ | ホストと同じIPならこんな感じ | ||
+ | < | ||
+ | # common variables | ||
+ | exec.start = "/ | ||
+ | exec.stop | ||
+ | exec.clean; | ||
+ | mount.devfs; | ||
+ | path = "/ | ||
+ | host.hostname = $name; | ||
+ | |||
+ | # each jail | ||
+ | base { | ||
+ | ip4.addr = < | ||
+ | allow.chflags; | ||
+ | allow.raw_sockets; | ||
+ | } | ||
+ | </ | ||
+ | / | ||
+ | jail_enable=" | ||
+ | |||
+ | ===== スナップショット ===== | ||
+ | |||
+ | # zfs snapshot tank01/ | ||
+ | |||
+ | スナップショットの一覧 | ||
+ | # zfs list -t snapshot | ||
+ | |||
+ | ===== 新しい監獄をzfs cloneで作る ===== | ||
+ | |||
+ | # zfs clone tank01/ | ||
+ | |||
+ | / | ||
+ | |||
+ | ===== 起動 ===== | ||
+ | |||
+ | # service jail start base | ||
+ | |||
+ | |||
+ | |||
+ | ===== 一覧 ===== | ||
+ | |||
+ | # service jail status | ||
+ | OR | ||
+ | # jls | ||
+ | JID IP Address | ||
+ | | ||
+ | |||
+ | ===== jailに入る ===== | ||
+ | |||
+ | # jexec 1 /bin/sh | ||
+ | ↑ ↑ ログイン用シェル | ||
+ | ↑ jail ID (jail名でも可) | ||
+ | |||
+ | ===== 止める ===== | ||
+ | |||
+ | # service jail stop base | ||
+ | |||
+ | ===== 削除 ===== | ||
+ | |||
+ | # service jail stop base | ||
+ | # chflags -R noschg / | ||
+ | # rm -R / | ||
+ | |||
+ | ===== pkgngの利用 ===== | ||
+ | |||
+ | [[os: | ||
+ | |||
+ | # pkg -j jail名|jailID info | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | ちなみに、jail内でpkgコマンドを使う場合、updateもしておかないと、動かないので注意 | ||
+ | |||
+ | jail# pkg update</ | ||
+ | |||
+ | ===== Host側のディレクトリをマウント ===== | ||
+ | |||
+ | nullfsを利用します。((古い記述だとカーネルの再構築が必要となっていますが、10.0では不要でした))\\ | ||
+ | 例:/ | ||
+ | / | ||
+ | |||
+ | /usr/ports/ / | ||
+ | |||
+ | mountすればjail側で使えるようになります | ||
+ | # mount / | ||
+ | |||
+ | / | ||
+ | |||
+ | < | ||
+ | jail名 { | ||
+ | exec.prestart | ||
+ | exec.poststop | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | / | ||
+ | |||
+ | <file ini / | ||
+ | exec.prestart | ||
+ | exec.prestart | ||
+ | |||
+ | exec.poststop | ||
+ | exec.poststop | ||
+ | |||
+ | </ | ||
+ | ==== / | ||
+ | リードオンリーでマウントしてるので、このままではビルドが失敗します。以下のように **/ | ||
+ | < | ||
+ | WRKDIRPREFIX = /var/ports | ||
+ | DISTDIR = / | ||
+ | PACKAGES = / | ||
+ | </ | ||
+ | ===== ListenポートとIPアドレスの調整 ===== | ||
+ | |||
+ | ホストとjailで別々のIPを振った場合、サーバソフトでもそれを意識した設定が必要\\ | ||
+ | つまり、listenアドレスをきちんと指定しないとエラーを起こす。 | ||
+ | |||
+ | ホストで待ち受けているポートを見る | ||
+ | |||
+ | < | ||
+ | # sockstat -l4 | ||
+ | USER COMMAND | ||
+ | root sendmail 1359 3 tcp4 127.0.0.1: | ||
+ | root sshd 1356 4 tcp4 *:22 *:* | ||
+ | root syslogd | ||
+ | </ | ||
+ | ==== apache ==== | ||
+ | |||
+ | / | ||
+ | |||
+ | Listen 192.168.1.jailアドレス: | ||
+ | Listen 192.168.1.jailアドレス: | ||
+ | |||
+ | ==== Nginx ==== | ||
+ | / | ||
+ | |||
+ | listen 192.168.1.jailアドレス: | ||
+ | ==== lighttpd ==== | ||
+ | |||
+ | / | ||
+ | |||
+ | server.bind = " | ||
+ | ...... | ||
+ | $SERVER[" | ||
+ | |||
+ | ==== sshd ==== | ||
+ | |||
+ | / | ||
+ | |||
+ | ListenAddress <ホストのIPアドレス> | ||
+ | |||
+ | < | ||
+ | # service sshd restart | ||
+ | # sockstat -l4 | ||
+ | USER COMMAND | ||
+ | root sendmail 1359 3 tcp4 127.0.0.1: | ||
+ | root sshd 1356 4 tcp4 <ホストのIPアドレス>: | ||
+ | root syslogd | ||
+ | </ | ||
+ | |||
+ | ==== syslogd ==== | ||
+ | |||
+ | / | ||
+ | |||
+ | syslogd_flags=" | ||
+ | |||
+ | < | ||
+ | # service syslogd restart | ||
+ | # sockstat -l4 | ||
+ | USER COMMAND | ||
+ | root sendmail 1359 3 tcp4 127.0.0.1: | ||
+ | root sshd 1356 4 tcp4 <ホストのIPアドレス>: | ||
+ | root syslogd | ||
+ | </ | ||
+ | |||
+ | ==== inetd ==== | ||
+ | |||
+ | / | ||
+ | |||
+ | inetd_flags=" | ||
+ | |||
+ | ===== jail内のUID/ | ||
+ | |||
+ | jail内の/ | ||
+ | |||
+ | defaultpasswd no | ||
+ | minuid 10000 | ||
+ | maxuid 19999 | ||
+ | mingid 10000 | ||
+ | maxgid 19999 | ||
+ | |||
+ | |||
+ | ===== Memo ===== | ||
+ | |||
+ | デフォルトの状態では、traceroute、ping、bpfを利用したWIDE-DHCP等のraw socketを利用するプログラムが正常に動作しません。 これらを利用するためには、hostの「/ | ||
+ | |||
+ | security.jail.allow_raw_sockets=1 | ||
+ | |||
+ | / | ||
+ | |||
+ | ===== 参考 ===== | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
os/freebsd/jail.txt · 最終更新: 2023/07/28 10:13 by hayashi