Category Archives: jail

[FreeBSD] jailのetcを更新する(qjail)

Pocket

qjailだと、ここで示したようにqjail update -bでjailのバイナリアップグレードをしてくれる。

アップグレードといっても、ホストのバイナリをjailのsharedfsにまるまるコピーしているだけである。
ということは、通常のアップグレードで更新されるはずの/etc下ファイルには一切、手を付けないということ。

jailのetc更新にはmergemaster

実はmergemasterは更新するフォルダを-Dオプションで選ぶことができる。
つまり、ホストのsrcをベースにjailのetcを更新できる。

jailの/etcを更新するには

jail ex01を更新する場合は、以下の通り。-D以外のオプションはUPiF。

$ sudo mergemaster -UPiFD /usr/jails/ex01/

新しくjailを作る際のテンプレートも更新しておく。

$ sudo mergemaster -UPiFD /usr/jails/template/

以上

Poudriereのjailにセキュリティアップデートを適用

Pocket

Heartbleedバグ対応では皆さんいかがお過ごしでしたか。

Poudriereではpackageの作成をjail内で実行するんだけども、もちろんこれらjailにもセキュリティアップデートは必要だ。
ずいぶん簡単なんだけれども採録。

Poudriere jailのアップデートは-uで

ほんとうに簡単で、-uをつけるだけ。
以下のようなjailがあったとする。

$ sudo poudriere jail -l

JAILNAME VERSION ARCH METHOD
100i386 10.0-RELEASE i386 ftp

そうしたら-uを指定するだけ。

$ sudo poudriere jail -u -j 100i386
====>> Upgrading using ftp
/etc/resolv.conf -> /usr/local/poudriere/jails/100i386/etc/resolv.conf
mount: /usr/local/poudriere/jails/100i386/compat: No such file or directory
Looking up update.FreeBSD.org mirrors... none found.
Fetching public key from update.FreeBSD.org... done.
Fetching metadata signature for 10.0-RELEASE from update.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 16 patches.....10... done.
Applying patches... done.
The following files will be updated as part of updating to 10.0-RELEASE-p1:
/bin/freebsd-version
(略)
/usr/src/sys/conf/newvers.sh
/usr/src/sys/fs/nfsserver/nfs_nfsdserv.c
Installing updates... done.
100i386: removed

おしまい。

 

qjailならjailのユーザランド更新にmake worldは不要ッ!

Pocket

 

この件があって、jailはqjailで管理している。
上記記事では触れなかったのだが、qjailにはもう一つ大きな利点がある。
qjailでは、jailのユーザランド更新にmake buildworldが不要なのである。
細かいところは後で述べる。
まずその使い方から。

qjailでのユーザランド更新

jailを止めたあとに、qjail update -bだけでOK。
jailを止めないで実行しようとしても、下記のように怒られる。
update -bはすぐに終わる。

$ sudo qjail update -b
Error: All jails have to be stopped.
This jail is running. example01
]$ sudo qjail stop example01
Jail successfully stopped  example01

$ sudo qjail update -b

Deletion of sharedfs binaries successful for bin.
Deletion of sharedfs binaries successful for lib.
Deletion of sharedfs binaries successful for libexec.
Deletion of sharedfs binaries successful for sbin.
Deletion of sharedfs binaries successful for usr/bin.
Deletion of sharedfs binaries successful for usr/include.
Deletion of sharedfs binaries successful for usr/lib.
Deletion of sharedfs binaries successful for usr/libdata.
Deletion of sharedfs binaries successful for usr/libexec.
Deletion of sharedfs binaries successful for usr/sbin.
Deletion of sharedfs binaries successful for usr/lib32.

Copied host's binaries to sharedfs successfully for bin.
Copied host's binaries to sharedfs successfully for lib.
Copied host's binaries to sharedfs successfully for libexec.
Copied host's binaries to sharedfs successfully for sbin.
Copied host's binaries to sharedfs successfully for usr/bin.
Copied host's binaries to sharedfs successfully for usr/include.
Copied host's binaries to sharedfs successfully for usr/lib.
Copied host's binaries to sharedfs successfully for usr/libdata.
Copied host's binaries to sharedfs successfully for usr/libexec.
Copied host's binaries to sharedfs successfully for usr/sbin.
Copied host's binaries to sharedfs successfully for usr/lib32.

Host to sharedfs binaries update completed successfully.
$

 

qjail update -bとは

マニュアルから俺訳で引用すると:

freebsd-updateはホストしか調べてくれず、jailは対象外だ。ホストには最新の環境があるのに、jailのためにわざわざ make buildworld/installworldするのは次男の無駄無駄無駄。
だからして、ホストのバイナリをsharedfsにコピーできるようした。

 

原文は以下の通り。

 

     -b      The basic requirement of FreeBSD jails is the jail environment
             and the host run the same version of the systems binaries. Since
             the FreeBSD-update utility only inspects the host system to
             determine the systems RELEASE level it's not applicable in a
             jailed environment. Performing a make buildworld/installworld on
             sharedfs's source is such a waste of effort and resources after
             having done this already for the host system. This option makes
             the buildworld/installworld obsolete for the qjail environment.

             This option deletes all the system binaries from the sharedfs and
             them copies the host's system binaries to sharedfs. It's intended
             to be used after running the FreeBSD-update utility on the host
             to apply security updates or to upgrade the GENERIC host from one
             RELEASE to another newer RELEASE, or after performing a make
             buildworld/installworld on the host updating its system binaries.
             Basically update the host and copy your work to the sharedfs
             getting both environments synchronized.
(snip)

FreeBSD 10.0                     July 22, 2013                    FreeBSD 10.0

 

 

No tags for this post.

[FreeBSD] pkg -j でjailの「外から」pkgng操作を。

Pocket

サマリ

pkg -jを使うと、ホストからjail内のpkgを操作できる。
しかし、あらかじめjail内にpkgのインストールが必要。

pkg -j

pkgのmanを見ると以下の記載が。

     -j <jail name or id>
             pkg will execute in the given <jail name or id>, where name
             matches ``jls name'' and id matches ``jls jid''.  See jail(8) and
             jls(8).

つまり、-jに続けてjail名あるいはjail idを指定すれば、ホストから当該jail内のpkgを操作できる、ということである。
これはさっそく試さねばなるまい。
qjailを使ってexmaple02というjailを作った。

$ sudo qjail create -n em0 -4 192.168.100.241 example02
Successfully created  example02
[vanilla@yaryka ~]$ sudo qjail start example02
Jail successfully started  example02
[vanilla@yaryka ~]$ sudo qjail list

STA JID  NIC IP              Jailname
--- ---- --- --------------- --------------------------------------------------
DR  1    em0 192.168.100.240 example01
DR  2    em0 192.168.100.241 example02

 

さっそく試してみるが…?

$ sudo pkg -j example02 info
$ sudo pkg -j example02 update
Updating repository catalogue
$ sudo pkg -j example02 install bash
Updating repository catalogue
$

まったく反応がない。

いろいろ試した結果、jailにはpkgがあらかじめインストールされていなければならないのであった。

jailでpkgのインストール

仕方なくjailのコンソールに接続し、pkgをインストール。
現時点ではpkgの公式リポジトリがないので、こちらの通りに進める。

$ sudo qjail console example02
FreeBSD 10.0-BETA1 (GENERIC) #0 r256420: Sun Oct 13 01:43:07 UTC 2013

Welcome to your FreeBSD jail.
example02 /root >sh
# PACKAGESITE="http://96.47.72.120/pkg-test-freebsd:10:x86:64/latest" pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg please wait
Installing pkg-1.1.4_6... done
If you are upgrading from the old package format, first run:
(略)

もう一度ホストからpkgを実行。
今度は問題なく進んだ。

$ sudo pkg -j example02 update
Updating repository catalogue
digests.txz                         100%  955KB 191.0KB/s 214.8KB/s   00:05
packagesite.txz                     100% 5209KB 226.5KB/s  28.6KB/s   00:23
Incremental update completed, 0 packages processed:
0 packages updated, 0 removed and 21607 added.
$

 

jailの外からpkg -jでpkg操作

ではjailの外からインストールを。

$ sudo pkg -j example02 install bash
Updating repository catalogue
The following 2 packages will be installed:

        Installing gettext: 0.18.3
        Installing bash: 4.2.45

The installation will require 14 MB more space

3 MB to be downloaded

Proceed with installing packages [y/N]: y
gettext-0.18.3.txz                  100% 2086KB 231.8KB/s  85.9KB/s   00:09
bash-4.2.45.txz                     100%  890KB 222.6KB/s 410.2KB/s   00:04
Checking integrity... done
[1/2] Installing gettext-0.18.3... done
[2/2] Installing bash-4.2.45... done
$

-jオプションを付けるだけで、まったく同じように使える。
infoで一覧も得られるし、auditでセキュリティチェックもできる。upgradeもできそうだ。

$ sudo pkg -j example02 audit -F
auditfile.tbz                       100%   90KB  90.3KB/s  90.3KB/s   00:00
0 problem(s) in your installed packages found.
$ sudo pkg -j example02 info
Password:
bash-4.2.45                    The GNU Project's Bourne Again SHell
gettext-0.18.3                 GNU gettext package
pkg-1.1.4_6                    New generation package manager
$ sudo pkg -j example02 upgrade
Updating repository catalogue
Nothing to do
$

こいつは便利でございますな。

 

 

 

 

 

 

 

No tags for this post.

10.0-BETA1でezjailが息してない→qjailに乗り換えた。

Pocket

 

せっかく覚えたezjailが息してない

jailの設定ファイルが、rc.conf,/etc/rc.d/jailからjail.confに変わる。

https://twitter.com/m_bird/status/386369822751076352

そのせいか10.0-BETA1にしたら、ezjail使うたび怒られるようになった。
具体的にはezjail-adminでjailをうまく起動できない。
ezjail覚えたばっかなのに…。

「手動でなんとかしろよ」とエラーメッセージが出るのだが、jailの仕組みはとても複雑で、jail.confの書式も良くわからないしsampleもない。
「rc.d, rc.confをそのままコピー&ペーストしたらいいんだよ」とは言うのだけど、そもそもrc.d, rc.confを自分で書くのが嫌でezjail使ってたのに。

しょうがないんで、あんまり深く追いかけずに別のラッパーであるqjailを試した。

なかなか独特のテイストが感じられるのだが、思ったより手軽で、ドキュメントも(時にはウンザリするくらい)充実している。
もちろんjail.confにも安心対応。

数十個ものjailを作ることも出来たり、一度作成したjailをテンプレートにする機能もあったりして驚く。

ググった感触でいうとあんまり人気ないみたいだけど、結構いい。
細けえ事はどうでもいいからjailを使わせろという諸兄にはおすすめである。

qjailのインストール

2013/10/18時点で2.2と3.2がある。
jail.confに対応しているのは3.2。

話は前後するが、qjail3.2のman qjail(8)から抜粋すると;

This version of qjail has been converted from using the legacy rc.d
rc.conf method of jail definition as used in all pervious versions of
qjail, to using the jail(8) jail.conf method which became available in
9.1-RELEASE.

よって3.2をインストール。
なお、以下でqjailをインストールするFreeBSDは10.0-BETA1でございますので、pkgngを使います。

$ pkg search qjail
qjail-2.2
qjail-3.2
$ sudo pkg install qjail-3.2
Password:
Updating repository catalogue
The following 1 packages will be installed:

        Installing qjail: 3.2

The installation will require 416 KB more space

116 KB to be downloaded

Proceed with installing packages [y/N]: y
qjail-3.2.txz                       100%  116KB 115.9KB/s 115.9KB/s   00:01
Checking integrity... done
[1/1] Installing qjail-3.2... done
########################################################################
Use the qjail utility to deploy small or large numbers of jails quickly.

First issue "rehash" command to enable the qjail command (if using csh).
Then issue "man qjail-intro" to read the qjail introduction.
After reading that do "man qjail" for the usage details.
For the BIG PICTURE issue "man qjail-howto".

########################################################################
For instructions on upgrading jail filesystems
Read /usr/local/share/examples/qjail/upgrade-info.txt
$

 

qjailでの初期設定

まずはjailのひな形、ベース環境を作る。
qjail installでよい。
ひな形取得先のftpサーバを変更するならオプションで指定する。
書式は以下。

qjail install -h ftp2.jp.freebsd.org

 

RELEASE以外でのqjail install

しかし、ftpサーバからダウンロードできるのはRELEASEのみ。
BETA, RC, ALPHA, STABLE等々だとダメ。
回避方法は二つ。

①なんでもいいのでRELEASEで作っておいてアップグレードする
②ダウンロードしたディスクイメージを使う。

今回は②にした。
①はman qjail参照。
②をもう少し細かく書くと、ディスクイメージをマウントし、base.txzなどのある「ディレクトリ」をqjail install -fに続けて指定する。

「ディレクトリ」とわざわざ書いたのは、cdで行けるところ、というのを強調したかったから。
ディスクイメージの直接指定はできないし、ftpサーバのディレクトリ指定もダメ。
ガッカリ。

(追記)RELEASE以外でのqjail install

「RELEASE以外」というのは、実はRELEASE-p2といったような、パッチレベルが0以外の場合も該当する。
つまりfreebsd-updateでパッチを当てた状態でqjail installすると失敗する。
これは、qjailは自ホストのOSバージョンをもとにディレクトリを移動するから。
OSバージョンが10.1-RELEASE-p16だったら、ftpサーバの10.1-RELEASE-p16などを見に行ってしまう。
しかし、ftpサーバはパッチレベルごとにはディレクトリが作られないので、参照先がなく失敗する。

ところで、ここでのOSバージョンとは、具体的には環境変数UNAME_rである。
ということは、qjail installのときだけUNAME_rを変更すればパッチレベルが変わっていようがよいのである。
以下、10.1-RELEASE-p16で実行した例。

root@kraken:/usr/local # setenv UNAME_r "10.1-RELEASE"
root@kraken:/usr/local # qjail install -h ftp2.jp.freebsd.org
Trying 202.232.140.170:21 ...
Connected to ftp.iij.ad.jp.
220 IIJ FTP server ready (IPv4 client).
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
250 Directory successfully changed.
local: base.txz remote: base.txz
229 Entering Extended Passive Mode (|||52115|).
150 Opening BINARY mode data connection for base.txz (66173780 bytes).
 85% |*****************************      | 54994 KiB  999.68 KiB/s    00:09 ETA
226 Transfer complete.
66173780 bytes received in 01:03 (0.99 MiB/s)
221 Goodbye.

The RELEASE distribution files are populating template.
Est LT 1 minute elapse time for this to complete.

Successfully installed qjail system.

追記ここまで

ダウンロードしたディスクイメージからqjail install

仕方がないので淡々と進める。
10.0-BETA1のイメージダウンロードして、ローカルでマウント。

$ fetch ftp://ftp.iij.ad.jp/pub/FreeBSD/releases/ISO-IMAGES/10.0/FreeBSD-10.0-BETA1-amd64-disc1.iso
FreeBSD-10.0-BETA1-amd64-disc1.iso            100% of  693 MB 8138 kBps 01m27s
$
$ sudo mdconfig -a -t vnode -f ./FreeBSD-10.0-BETA1-amd64-disc1.iso -u 0
$ sudo mount -t cd9660 /dev/md0 /mnt

/mntにマウントしたとすると、/mnt/usr/freebsd-dist/が目的の場所。

$ ls /mnt
COPYRIGHT       etc             mnt             sbin            var
bin             lib             proc            sys
boot            libexec         rescue          tmp
dev             media           root            usr
$ ls /mnt/usr
bin             include         libdata         obj             src
freebsd-dist    lib             libexec         sbin            tests
games           lib32           local           share
$ ls /mnt/usr/freebsd-dist/
MANIFEST        doc.txz         kernel.txz      src.txz
base.txz        games.txz       lib32.txz
$

qjail install -fで実行。
終わったらマウントも外そう。

$ sudo qjail install -f /mnt/usr/freebsd-dist/                  
The RELEASE distribution files are populating template.
Est LT 1 minute elapse time for this to complete.

sharedfs is being populated.
Est LT 1 minute elapse time for this to complete.

Successfully installed qjail system.
$
$ sudo umount /mnt
$ sudo mdconfig -d -u 0

 

qjailの構成

/usr/jailsにいくつかのディレクトリが生まれる。
また、設定ファイルが/usr/local/etc/に格納される。

/usr/jails下は以下の通り。

$ ls /usr/jails
archive         flavors         sharedfs        template

sharedfs:
OSの実行ファイル、ライブラリ。全Jailで共有される。

$ ls /usr/jails/sharedfs/
bin     lib     libexec sbin    sys     usr

template:
OS configuration fileがある。設定変えようと思ったらここかな。

$ ls /usr/jails/template/
COPYRIGHT       home            mnt             sharedfs        var
bin             lib             proc            sys
dev             libexec         root            tmp
etc             media           sbin            usr

archive:
初期状態では空。
qjail archiveコマンドで作成されるアーカイブが格納される。

flavors:
flavorですな。defaultとssh-defaultの二つがある。

$ ls /usr/jails/flavors/
default         ssh-default

そのほか、/usr/local/etc/下に以下のようなファイル、ディレクトリがたくさん出来る。
jailを作ると今度はこのディレクトリの下にjail名でファイルができる。
global, local, vnetの意味が、想像はできるもののよく分からない。

$ ls /usr/local/etc/qjail*
/usr/local/etc/qjail.portsnap.conf
/usr/local/etc/qjail.fstab:
/usr/local/etc/qjail.global:
/usr/local/etc/qjail.local:
/usr/local/etc/qjail.vnet:

 

jailの作成

書式。代表的なもののみ。

qjail create -n <NIC name>  -f <flavor> -a <アーカイブ> \
 -4 <割り当てるIPアドレス>  jailname

-fと-aは一緒に使えない。

実際に作ってみる。
あっさりと出来上がる。
あっさりしすぎて逆に不安なくらい。

$ sudo qjail create -n em0 -4 192.168.100.240 example01
Successfully created  example01

気がつくと、/etc/jail.confが生まれている!

example01 {
host.hostname       =  "exmaple01";
path                =  "/usr/jails/exmaple01";
mount.fstab         =  "/usr/local/etc/qjail.fstab/exmaple01";
exec.start          =  "/bin/sh /etc/rc";
exec.stop           =  "/bin/sh /etc/rc.shutdown";
exec.consolelog     =  "/var/log/qjail.exmaple01.console.log";
devfs_ruleset       =  "4";
allow.mount.devfs;
mount.devfs         =  "1";
ip4.addr            =  192.168.100.240;
interface           =  "em0";
}

jail起動…の前に、qjail listで確認。

qjail list

作成済みのjailはqjail listで確認できる。

$ sudo qjail list
STA JID  NIC IP              Jailname
--- ---- --- --------------- --------------------------------------------------
DS  N/A  em0 192.168.100.240 example01

最初のカラムのSTAはStatusの略。

一文字め:Jailの種別
    D: ディレクトリベースのjail.
    I: イメージベースのjail.
二文字め:状態
    R: 実行中
    S: 停止中

JIDはjail IDのこと。そのほかは見たまま。

qjail start

qjail startでjailを起動。
qjail listの表示も変わり、ネットワークインタフェースへのaliasも実行してくれている。

$ sudo qjail start example01
Jail successfully started  example01
$
$ sudo qjail list
STA JID  NIC IP              Jailname
--- ---- --- --------------- --------------------------------------------------
DR  N/A  em0 192.168.100.240 example01

$ ifconfig em0
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 08:00:27:a1:d7:05
        inet 192.168.100.110 netmask 0xffffff00 broadcast 192.168.100.255
        inet 192.168.100.240 netmask 0xffffffff broadcast 192.168.100.240
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active

 

qjail consoleでjailの中へ

qjail consoleでコンソールにアクセスできる。

$ sudo qjail console example01
FreeBSD 10.0-BETA1 (GENERIC) #0 r256420: Sun Oct 13 01:43:07 UTC 2013

Welcome to your FreeBSD jail.
example01 /root >

特に何もしていないけど、/etc/localtimeと/etc/resolv.confは作ってくれた。wall_cmos_clockはなかった。

exmaple01 /root >ls /etc | egrep "resolv|clock|localtime"
localtime
resolv.conf

 

qjail stopで止めて、archiveでアーカイブ、deleteで削除完了

単純にstopしてdeleteするのは面白くないから、deleteの前にarchiveしてみた。
/usr/jails/archiveの下に<jail名>@日付秒.tarというファイルが出来ている。
また、deleteしてもjail.confには記載が残っているようだ。

$ sudo qjail stop example01
Jail successfully stopped  example01
$ sudo qjail archive example01
Successfully archived example01
$ ls /usr/jails/archive/
example01@201310182327.36.tar
$ sudo qjail delete example01
Successfully deleted  example01
$ sudo qjail list
STA JID  NIC IP              Jailname
--- ---- --- --------------- --------------------------------------------------

$
$ cat /etc/jail.conf
example01 {
host.hostname       =  "example01";
(後略)

 

qjail restoreでarchive済みのjailを復活可能ッ!

ためしにrestoreしてみたら何事もなかったかのように復活して驚いた。
これはスナップショット的に使えますね。

$ sudo qjail restore example01
Successfully restored example01
$ sudo qjail list
STA JID  NIC IP              Jailname
--- ---- --- --------------- --------------------------------------------------
DS  N/A  em0 192.168.100.240 example01
$
$ sudo qjail start example01
Jail successfully started  example01
[vanilla@yaryka ~]$ sudo qjail console example01
Last login: Thu Oct 17 23:50:08 on pts/3
FreeBSD 10.0-BETA1 (GENERIC) #0 r256420: Sun Oct 13 01:43:07 UTC 2013

Welcome to your FreeBSD jail.
example01 /root >

 

qjail、便利だよね?

ご覧の通り、qjailはjailをマクロなレベルで扱うことに長けているようで、とても便利に感じる。
qjailにはほかにもqjail configというコマンドがあり、既存のjailの設定(たとえばIPアドレスとか)を変えたりできるし、jailのOSアップデートも手軽にできるようだ。
そのあたりはまた試すとして、しばらくjailはqjailでメンテしようと思った。

 

No tags for this post.

ezjailのflavoursを使ってみよう その2

Pocket

前回の続き

前提

以下、「ホスト」とはjailを動かすおおもとのマシンを表す。親。
「Jailホスト」はjail環境で動くホストを表す。子。

今回の範囲

本記事では二つ目以降を扱う。
一つ目まではホストOSでの設定作業だったが、今回は実際にflavoursに設定を書き込むことになる。

  1. ホストで動かしたいサービス
    →sshdのみ。
  2. Jailホストで動かしたいサービス
    →apache, sshd
  3. Jailホストに追加するユーザ/グループ
    →vanilla:vanilla
  4. Jailホストで使用するソフトウェア
    →apache22, sudo, bash, portaudit, portmaster, tmux

flavoursを作ってみる

設定変更せずezjail-admin installしたなら、flavoursは/usr/jails/flavoursの下にある。
flavoursの下には、設定サンプルとしてexampleというディレクトリがある。

example flavoursをコピーして、”testsv”というflavoursを作る。

$ cd /usr/jails/flavours/
$ ls
example
$ sudo cp -pR ./example ./testsv
$ cd /usr/jails/flavours/
$ ls
example testsv
$

 

flavourの中身

testsvの下は以下のようなディレクトリ構成で、flavourとして使うファイルがあらかじめ格納される。
※以下、断りのない限り、./etc/rc.conf などと記載した場合には、ホストのではなく、flavourのファイルとする。

./etc:
make.conf
periodic.conf
rc.conf
rc.d

./etc/rc.d:
ezjail.flavour.example

./usr/local/etc:
sudoers

このうち、ezjail.flavour.exampleはjailホスト初回起動時に実行されるスクリプト。
ユーザ追加やpkgの追加はここで行う。

また、rc.confの中を見てみると、sendmailやrpcbindを停止する設定や、syslogdがsocketを掴まないようにする設定が最初から書かれている。

# Pretuned by German Engineers

# No network interfaces in jails
network_interfaces=""

# Prevent rpc
rpcbind_enable="NO"

# Prevent loads of jails doing their cron jobs at the same time
cron_flags="$cron_flags -J 15"

# Prevent syslog to open sockets
syslogd_flags="-ss"

# Prevent sendmail to try to connect to localhost
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

# Bring up sshd, it takes some time and uses some entropy on first startup
# sshd_enable="YES"

 

flavourの設定

ではtest flavourの設定を始める。
必要に応じてrc.confなどの設定ファイルを書き換えるのと、ezjail.flavour.exampleに、jailホストの初期設定スクリプトを書き込んでいく。
設定ファイルの書き換えには、ホストのファイルを参考にするとよいでしょう。

各種設定ファイルの書き換え

jailホストで動かしたいのはsshdとapache。
よって./etc/rc.confに以下二行を加えた。

apache22_enable="YES"
sshd_enable="YES"

 

また./usr/local/etc/sudoersに以下を追加。
ここはお好みで。

Defaults env_keep += "HTTP_PROXY FTP_PROXY"
Defaults env_keep += "PKG_PATH PKG_DBDIR PKG_TMPDIR TMPDIR PACKAGEROOT PACKAGESITE PKGDIR FTP_PASSIVE_MODE"
Defaults env_keep += "PORTSDIR PORTS_INDEX PORTS_DBDIR PACKAGES PKGTOOLS_CONF"

 

apache22の設定は…、これはjailホストが起動してからでいいか。

ezjail.flavour.exampleでのユーザ/グループ追加

ユーザvanilla、グループvanillaを追加する。
uid, gidは10010にし、vanillaはwheelグループに加える。

以下をezjail.flavour.exampleに追加
ユーザ追加スクリプトの詳細はこちら

なお、グループ追加を先にすること。
ユーザ追加のときにグループ指定をするから。

pw groupadd -q -n vanilla -g 10010
echo -n '$6$SALTsalt$gH47I0mRGadJVVlIpeTxVlYw.SjkPOZ7lJoGkqOyhyeUJ7PV5QWuYpIG6D5ggew6RXLpl1eA72TpgX5pGDpr/.' |\
pw useradd -n vanilla -u 10010 -s /bin/sh \
-m -d /home/vanilla -G vanilla -c 'vanilla user' \
-H 0
pw usermod vanilla -G wheel

 

ezjail.flavour.exampleでのpkg追加

pkg_add -rで必要なpkgを並べる。
./pkgにpkgを置いておく方法もあるのだが、依存関係も考慮して必要なpkgを揃えるのは面倒。
portsの場合は、basejailにportsのディレクトリを作っておく必要がある。今回は触れない。

以下のようにpkgを取得するサーバを指定してからpkg_add。
proxyが必要なら、それも。

#HTTP_PROXY="http://proxyserver:80/"; export HTTP_PROXY
PACKAGEROOT="ftp://ftp2.jp.freebsd.org/"; export PACKAGEROOT

pkg_add -r apache22 sudo bash portaudit portmaster tmux

 

シェルの変更

ユーザvanillaのシェルをbashに変えておくために以下を追加。

chpass -s /usr/local/bin/bash vanilla

 

rootパスワードの変更

rootのパスワードも変える。
nologinにすると、あとあとezjail-admin consoleでrootログインすることができなくなる。

echo -n '$6$SALTsalt$gH47I0mRGadJVVlIpeTxVlYw.SjkPOZ7lJoGkqOyhyeUJ7PV5QWuYpIG6D5
ggew6RXLpl1eA72TpgX5pGDpr/.' |\
pw mod user root \
-H 0

これでflavoursの設定は終わり。

flavourでjailホスト作成。

あとは簡単。
jailホストを作成するときに、-fでflavourを指定すればいいだけ。

$ sudo ezjail-admin create -f testsv example01 'em0|192.168.200.1'
/usr/jails/example01/.
/usr/jails/example01/./dev
/usr/jails/example01/./.cshrc
(中略)
/usr/jails/example01/./usr/local/etc/sudoers
18 blocks
$

 

起動。pkg_add -rのせいで少し時間がかかる。

$ sudo ezjail-admin start example01
Configuring jails:.
Starting jails: example01.
$

 

consoleに入ってみると、ユーザvanillaやpkgの追加がなされていることが確認できる。
同時にsshdも起動している。
apacheは設定も何もしていないので動いてないけど。

$ sudo ezjail-admin console example01

(中略)

root@example01:~ # finger vanilla
Login: vanilla Name: vanilla user
Directory: /home/vanilla Shell: /usr/local/bin/bash
No Mail.
No Plan.

root@example01:~ # pkg_info
apache22-2.2.25 Version 2.2.x of Apache web server with prefork MPM.
apr-1.4.8.1.5.2 Apache Portability Library
bash-4.2.45 The GNU Project's Bourne Again SHell
db42-4.2.52_5 The Berkeley DB package, revision 4.2
expat-2.1.0 XML 1.0 parser written in C
gdbm-1.10 GNU database manager
gettext-0.18.3 GNU gettext package
libevent-1.4.14b_2 Provides an API to execute callback functions on certain ev
libiconv-1.14_1 A character set conversion library
pcre-8.33 Perl Compatible Regular Expressions library
perl-5.14.4 Practical Extraction and Report Language
portaudit-0.6.1 Checks installed ports against a list of security vulnerabi
portmaster-3.17.1 Manage your ports without external databases or languages
sudo-1.8.7_1 Allow others to run commands as root
tmux-1.8_1 A Terminal Multiplexer
root@example01:~ # service sshd status
sshd is running as pid 2945.
root@example01:~ #

 

 

あとは、testsvをさらにコピーし、インストールするpkgを変えればどんどん使い回せる。
もちろん、その時はユーザやパスワードも変えよう。
セキュリティのためにjail使ってるのに、同じユーザ同じパスワードだったら全く意味がないし。

以上、flavoursの作り方。

No tags for this post.

ezjailのflavoursを使ってみよう その1

Pocket

[FreeBSD] ezjailを試そう
ezjailで作るjailの基本設定を変えよう
からの続き

以下、「ホスト」とはjailを動かすおおもとのマシンを表す。親。
「Jailホスト」はjail環境で動くホストを表す。子。

ezjailのflavoursとは。

新しいJailは、真っ新(まっさら)のFreeBSDで作られる。ezjailは、Jailホストの面倒な設定作業を簡素化する仕組みがある。これがflavoursである。
flavoursでは、予め設定された内容に従って、ファイルをコピーしたり、パッケージをインストールしたり、スクリプトを実行できる。
たとえば、rc.conf, make.conf, periodic.confやsudoersなどである。

以下より意訳。
http://erdgeist.org/arts/software/ezjail/#Flavours

「flavours」の場所

特に指定をしなければ、ezjail-admin installで/usr/jails/flavoursに格納される。
初期状態では、サンプルとして/usr/jails/flavours/exampleが用意されている。
これを参考に自分用のflavoursを作ればよい。

「flavours」の中身

exampleの中をのぞくと、/usr/jails/flavours/exampleを起点に、以下のファイルがある。

./usr/local/etc/sudoers
./etc/make.conf
./etc/periodic.conf
./etc/rc.conf
./etc/rc.d/ezjail.flavour.example

 

./etcや./usr/local/etcに必要なファイルを入れておけばよいというわけ。
ところでezjail.flavour.exampleだけは特殊。

 

「ezjail.flavour.example」とは

jailホストが初めて起動する際に実行されるスクリプト。
ここに初期設定で必要なこと、たとえばユーザ・グループの追加やら、パッケージの追加やら、つらつら書いておけばよい。
(中身を見ればわかるがezjail.flavour.example自体を消す処理も入っている)

 

jailホストの仕様検討

実際にflavousの作成に入る前に。
同じHW上で複数のサービスを行うため、jailホストを稼働させるまえに何点か考えておかないといけないことがある。
仕様検討というのは仰々しいが、あとあと効いてくるので真面目にやる。
とりあえず以下を決めておけばよいかな、と。

  1. ホストで動かしたいサービス
  2. Jailホストで動かしたいサービス
  3. Jailホストに追加するユーザ/グループ
  4. Jailホストで使用するソフトウェア

一番注意すべきことは、ポートのListenである。
ホストとJailホストには別々のIPアドレスを付与するものの、サーバソフトウェアが個々のIPアドレスを意識するとは限らない。
だからして「動かしたいサービス」はJailホストだけでなく、ホストも含めて考えることが必要だし、それぞれで動かすサーバソフトウェアには、ListenするIPアドレスを明示する必要がある。

以下のように設定した。

  1. ホストで動かしたいサービス
    →sshdのみ。
  2. Jailホストで動かしたいサービス
    →apache, sshd
  3. Jailホストに追加するユーザ/グループ
    →vanilla:vanilla
  4. Jailホストで使用するソフトウェア
    →apache22, sudo, bash, portaudit, portmaster, tmux

このうち、最初の件を除いた残りの三つは、すべてflavoursで設定する。
ではひとつずつ。

ホストで動かしたいサービス

sshdだけで良いとした。
ではホストで動いているサービスはなんだろうか。sockstat -l4でリストできる。

$ sockstat -l4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sendmail 1002 3 tcp4 127.0.0.1:25 *:*
root sshd 992 4 tcp4 *:22 *:*
root syslogd 904 7 udp4 *:514 *:*

 

sendmailが動いている。これは不要。
sshdは動いてても構わないが、Local Addressが*:22になっている。
これはIPアドレスを意識せず、ポート22に届いたものはすべて自分宛と認識するということ。Jailホストに来た接続もこちらに繋がってしまう。これはまずい。
syslogdも*:514で動いている。これも何らかの対応が必要。

ホストのサービスの調整(sshd)

sshdはsshd_configで以下の行を追加し、ホストのIPアドレスでのみListenするように。

ListenAddress <ホストのIPアドレス>

 

sshdを再起動するとsockstat -l4の表示が変わる。

$ sudo service sshd restart
Stopping sshd.
Starting sshd.
$ sockstat -l4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sshd 1845 3 tcp4 192.168.154.128:22 *:*
root sendmail 1002 3 tcp4 127.0.0.1:25 *:*
root syslogd 904 7 udp4 *:514 *:*

 

ホストのサービスの調整(sendmail)

sendmailの停止はこちらを参照。
再起動、あるいはservice sendmail stopでよい。

$ sudo service sendmail stop
Stopping sendmail.
Stopping sendmail_clientmqueue.
$ sockstat -l4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sshd 1845 3 tcp4 192.168.154.128:22 *:*
root syslogd 904 7 udp4 *:514 *:*
$

 

ホストのサービスの調整(syslogd)

syslogdは、デフォルトだと”-s”オプションで動いているはず。
“-s”は、「リモートマシンからのログを受け取らない」というもの。
これで不自由してないのなら、”-ss”にしてポートすら開けないようにしてもいい。
“-ss”にしないのなら、念のため”-b”オプションでホストのIPアドレスを明示しておくとよい。

SYSLOGD(8) FreeBSD System Manager's Manual SYSLOGD(8)

NAME
syslogd -- log systems messages

-s Operate in secure mode. Do not log messages from remote
machines. If specified twice, no network socket will be opened
at all, which also disables logging to remote machines.

-b :service
Bind to a specific address and/or port. The address can be spec-
ified as a hostname, and the port as a service name. If an IPv6
address is specified, it should be enclosed with `[' and `]'.
The default service is `syslog'.

 

/etc/rc.confに以下を追記する場合

syslogd_flags="-ss"

 

$ sudo service syslogd restart
Stopping syslogd.
Starting syslogd.
$ sockstat -l4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sshd 992 3 tcp4 192.168.154.128:22 *:*
$

 

以下を追記した場合

syslogd_flags="-b 192.168.154.128"

 

$ sockstat -l4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root syslogd 1540 6 udp4 192.168.154.128:514 *:*
root sshd 992 3 tcp4 192.168.154.128:22 *:*

 

ホストのサービスの調整(inetd.conf)

もしホストでinetd.confを動かしているのなら、-aオプションでホストのIPアドレスを与えること。

INETD(8) FreeBSD System Manager's Manual INETD(8)

NAME
inetd -- internet ``super-server''

-a Specify one specific IP address to bind to. Alternatively, a
hostname can be specified, in which case the IPv4 or IPv6 address
which corresponds to that hostname is used. Usually a hostname
is specified when inetd is run inside a jail(8), in which case
the hostname corresponds to that of the jail(8) environment.

 

 

inetdのデフォルトオプションは”-wW -C 60″なので、以下のようにして/etc/rc.confに追加

inetd_flags="-wW -C 60 -a <ホストのIPアドレス>"

 

サンプルrc.conf

# kill sendmail
sendmail_enable="NO"    # Run the sendmail inbound daemon (YES/NO).
sendmail_submit_enable="NO"     # Start a localhost-only MTA for mail submission
sendmail_outbound_enable="NO"   # Dequeue stuck mail (YES/NO).
sendmail_msp_queue_enable="NO"  # Dequeue stuck clientmqueue mail (YES/NO).

# prohibit syslog to open a socket
syslogd_flags="-ss"
# make syslog listen on specific ip address
# syslogd_flags="-b x.x.x.x"

# make inetd listen on specific ip address
# inetd_flags="-wW -C 60 -a x.x.x.x"

 

意外に長くなったのでここまで。
続きは以下。

ezjailのflavoursを使ってみよう その2

No tags for this post.

ezjailで作るjailの基本設定を変えよう

Pocket

 

[FreeBSD] ezjailを試そう の続き

以下、「ホスト」とはjailを動かすおおもとのマシンを表す。親。
「Jailホスト」はjail環境で動くホストを表す。子。

ezjailにはflavoursという仕組みがある。

ezjailのflavoursとは。

以下より意訳。
http://erdgeist.org/arts/software/ezjail/#Flavours

新しいJailは、真っ新(まっさら)のFreeBSDとして作られる。ezjailは、Jailホストの面倒な設定作業を簡素化する仕組みがある。これがflavoursである。
flavoursでは、予め設定された内容に従って、ファイルをコピーしたり、パッケージをインストールしたり、スクリプトを実行できる。
たとえば、rc.conf, make.conf, periodic.confやsudoersなどである。

 

“flavour”ではない基本の味付け

flavourとは言ってみれば「風味」のこと。
新しいjailを作る時の「風味づけ」に使われるものだから、逆に言うと基本の味付けには不適切である。
具体的に言うと、新しいjailを作る際に必ず設定したいものは、flavoursではなく、基本設定に含めるべき、ということになる。

では基本設定はどこでするのか、というと、まずezjailの仕組みを確認してから。

 

ezjailの仕組み

/usr/jails/basejailというディレクトリがある。
これはFreeBSD環境のコピーで、ホスト上で作られたJailが使う。
共有して使うので、読み取り専用でマウントしている。

これとは別に/usr/jails/newjailというディレクトリがある。
こちらは、新しいjailを作るときのテンプレートである。

ということは、セキュリティパッチの適用やOSアップグレードはbasejailに対して行い、新しいjailホストを作る時の基本設定はnewjailに対して行えばよい。

 

基本の味付けに必要なものは?

パターンは二つある。
何らかのファイルを追加する場合と、ファイルを書き換える場合。

追加するファイルには、/etc/resolv.conf、/etc/localtime、/etc/wall_cmos_clockは必須。
ただし、ホストの時刻がUTCなら/etc/wall_cmos_clock不要。

resolv.confは名前解決(リゾルバ)のためのファイル、localtime, wall_cmos_clockはタイムゾーン関連ファイル。

そのほか、/etc/hosts, /etc/nsswitch.confも必要であれば。

ファイル書き換えの場合には、例えばportsnap.confを国内のportsnapサーバに向けておきたいとか、rootの.cshrcに手を入れておきたいとか、そういったもの。
ユーザの追加や、pkgの追加はbasejailにはできない(と思う)。
こういうのはflavoursで。

 

基本味付け

前章で挙げたファイルは、端からnewjailに放り込んでいけばよい。
ID, group, パーミッションを保持するために-pオプションはつけましょう。

$ sudo cp -p /etc/resolv.conf /etc/localtime /etc/wall_cmos_clock /usr/jails/newjail/etc/
$

 

書き換え系は、newjail/etcの下のファイルをご自由に
例えば、/usr/jails/newjail/etc/portsnap.confのSERVERNAMEを以下のように。

SERVERNAME=portsnap.allbsd.org

 

試してみよう

example01というjailを作ってみる。

$ sudo ezjail-admin create example01 'em0|192.168.200.1'

$ sudo ezjail-admin start example01
Configuring jails:.
Starting jails: example01.
$
$ sudo ezjail-admin console example01

 

 

コンソールログインして試してみると、日付もJSTになっているし、resolv.confも正しく設定されている。

root@example01:~ # date
Tue Oct 1 12:52:38 JST 2013

root@example01:~ # cat /etc/resolv.conf
# Generated by resolvconf
search localdomain
nameserver 192.168.154.2

root@example01:/ # grep SERVER /etc/portsnap.conf
SERVERNAME=portsnap.allbsd.org
root@example01:/ #

 

 

flavoursの使い方はまた今度。

ezjailのflavoursを使ってみよう その1

ezjailのflavoursを使ってみよう その2

No tags for this post.

[FreeBSD] ezjailを試そう

Pocket

 

Jail

FreeBSDにはJailという技術がある。

Jailとは、OSレベルの仮想化技術だ。
Jailを使うと、FreeBSDマシン上にいくつもの独立したシステムを構築できる。

たとえば、一つのFreeBSDのうえに、Samba, Apacheをそれぞれ独立させて構築させることができる。
独立、というのは、Apache側のシステムで何が起こっても、Samba側のシステム、ホストのFreeBSDには何の影響もないということ。

もっと深いところで仮想化するESXiやらXenやらと比べると、オーバーヘッドが小さいという利点がある(と思ってます)。
これらの方法だと、各サービスを独立させたいときには、OSごとインストールする必要があるから。
(仮にあるマシン上でDHCPサーバ, DNS, Samba, Apacheを動かすとして、それぞれ向けにOSをインストール、というのはさすがに辛い。)

詳しくは下記。

http://ja.wikipedia.org/wiki/FreeBSD_jail

Jailの利点
仮想化: 各jailはホストマシン上で動く仮想機械であり、独自のファイルシステムやプロセス空間、ユーザーアカウントを持つ。jailの中のプロセスからは実際のシステムなのかjailの中なのかはほぼ区別できない。
安全性: 各jailは他のjailにアクセスできないようになっており、安全性が高まっている。
権限委譲の簡素化: 管理者権限のスコープがjail内に制限されているため、システムの管理者は本来管理者権限が必要な仕事を、計算機全体を操作する権限を渡すことなく行わせることが出来る。

Jail…でなくezjailにしよう。

FreeBSD Handbookより抜粋する。

Jailのセットアップには、FreeBSDとその使用方法についての高度な経験が必要である。
下記に示す手順が複雑と感じるならば、sysutils/ezjailなどの、より簡単なシステムを検討せよ
16.6.1.1. Design
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails-application.html

ひとめ見てウンザリしたのでezjailにする。

ezjailたったこれだけ(インストールと設定)。

チュートリアルはここにある。
http://erdgeist.org/arts/software/ezjail/

インストールはpkgから。

# pkg_add ezjail

そして最低限の前準備。
/etc/rc.confへの追加。

# ezjail
ezjail_enable="YES"

ezjail.confへの追記。

ezjail_ftphost=ftp2.jp.freebsd.org

ezjailはFreeBSDの各種データをftpサーバからダウンロードする。
デフォルトだと本家のftpサーバに繋がってしまうので、最寄りのftpサーバを指定する。

Jailたったこれだけ(Jail環境の構築)

ここまで来たら、Jail環境そのものの初期設定をする。

ezjail-admin installが初回設定用のコマンドで、使用するのは原則、一回だけでよい。
このコマンドで、Jail関連のディレクトリやらベース環境が作られる。

$ sudo ezjail-admin install
Your system is 9.2-RC3. Normally FTP-servers don't provide non-RELEASE-builds.
Querying your ftp-server... The ftp server you specified (ftp2.jp.freebsd.org) seems to provide the following builds:
drwxr-xr-x 2 ftp ftp 4096 Sep 13 15:43 10.0-ALPHA1
lrwxrwxrwx 1 ftp ftp 14 Feb 16 2013 8.3-RELEASE -> ../8.3-RELEASE
drwxr-xr-x 2 ftp ftp 4096 May 22 12:59 9.1-RELEASE
drwxr-xr-x 2 ftp ftp 4096 Aug 16 20:47 9.2-RC2
drwxr-xr-x 2 ftp ftp 4096 Sep 11 22:14 9.2-RC4
drwxr-xr-x 6 ftp ftp 4096 Sep 13 16:35 ISO-IMAGES
Release [ 9.2-RC3 ]:

ezjailはホストOSと同じバージョンで環境を作ろうとする。
しかしホストOSがRELEASEビルドでない場合、言い換えるとホストOSのバージョンがftpサーバに存在しない場合には、上記の通り自分で指定をしなければならない。

この状態なら9.2-RC4でしょうなあ。

なお、バージョンをどのように判定しているかというと、ホストOSでuname -rを実行したときの出力と、ftpサーバのディレクトリとのマッチングである。

Release [ 9.2-RC3 ]:9.2-RC4
(中略)
/usr/jails/basejail/usr/lib32/libalias_pptp.a
/usr/jails/basejail/usr/lib32/libusb_p.a
/usr/jails/basejail/usr/lib32/libalias_ftp.so
110276 blocks
Note: a non-standard /etc/make.conf was copied to the template jail in order to get the ports collection running inside jails.
$

 

デフォルト設定では、/usr/jailsに各種ファイルが作られる。

$ ls /usr/jails/
basejail flavours newjail

 

Jailたったこれだけ(Jailホストの構築と起動)

たったこれだけと言いつつJailホストの構築までが長かった。
ezjail-admin createでjailホストを作り、ezjail-admin startでjailホストを起動する。
ezjail-admin consoleでjailホストのコンソールにアクセスする。
と言う流れ。

Jailホストに192.168.1.199というIPアドレスを付与するとし、また、ホストマシンのネットワークIFがem0であるとして、以下のように。

$ sudo ezjail-admin create example 'em0|192.168.1.199'
(中略)
/usr/jails/example/./sys
/usr/jails/example/./basejail
3146 blocks
Warning: IP em0|192.168.100.201 not configured on a local interface.
$

/usr/jailsの下にexampleとして作られたことが分かる。

$ ls /usr/jails
basejail example flavours newjail

 

そして起動

$ sudo ezjail-admin start example
Configuring jails:.
Starting jails: example.
$

 

コンソールへ

$ sudo ezjail-admin console example
FreeBSD 9.2-RC3 (GENERIC) #0 r254795: Sat Aug 24 20:25:04 UTC 2013
Welcome to FreeBSD!
(中略)
root@example:~ #
root@example:~# uname -a
FreeBSD example 9.2-RC3 FreeBSD 9.2-RC3 #0 r254795: Sat Aug 24 20:25:04 UTC 2013 root@bake.isc.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64

 

Jailたったこれだけ、とは言うけれど。

jailホストは起動したけれども、ご覧のようにネットには出ていけない。これはresolv.confがないから。
時刻もUTCになっている。
また、驚くことにrc.confもない。

root@example:~ # ftp ftp2.jp.freebsd.org
ftp: Can't lookup `ftp2.jp.freebsd.org:ftp': hostname nor servname provided, or not known
ftp> bye
root@example:~ # date
Sun Sep 15 13:51:21 UTC 2013
root@example:~ # cat /etc/rc.conf
cat: /etc/rc.conf: No such file or directory
root@example:~ #

 

Listenポートを調べてみると、あーあ、sendmailやsyslogdがListenしてしまっている。

root@example:~ # sockstat -l4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sendmail 1322 3 tcp4 192.168.100.201:25 *:*
root syslogd 1268 6 udp4 192.168.100.201:514 *:*
root@example:~ #

 

先述のチュートリアルにあるQuickStartは早いものの、かように設定が足りません。
そのため、けっこう基本的なところから自分で構築していかなければならない。
ということで、ezjailの設定を詰めることにして、試しに作ったjailホストは消してしまおう。

jailホストからlogoutし、ezjail-adminでstopし、deleteすればOK。

root@example:~ # logout
$ sudo ezjail-admin stop example
パスワード:
Stopping jails: example.
$ sudo ezjail-admin delete -w example
$ ls /usr/jails
basejail flavours newjail
$

 

deleteのときに-wを付け忘れると、/usr/jails/exampleが残る。
もちろん手動で消すこともできるが、schgフラグが立っているので簡単には消せない。

$ sudo ezjail-admin delete example
$ ls
basejail example flavours newjail
$ sudo rm -Rf ./example
rm: ./example/var/empty: Operation not permitted
rm: ./example/var: Directory not empty
rm: ./example: Directory not empty
$

こういう場合には、schgフラグを消してからrmすること。

$ sudo chflags -R noschg ./example
$ sudo rm -Rf ./example
$ ls
basejail flavours newjail
$

また、deleteの際に-wfとすると、jailを止めてから削除してくれる。

 ezjail-admin delete -wf example

 

ezjailの設定は記事を改めてまとめる。

No tags for this post.