前回の続き
前提
以下、「ホスト」とはjailを動かすおおもとのマシンを表す。親。
「Jailホスト」はjail環境で動くホストを表す。子。
今回の範囲
本記事では二つ目以降を扱う。
一つ目まではホストOSでの設定作業だったが、今回は実際にflavoursに設定を書き込むことになる。
- ホストで動かしたいサービス
→sshdのみ。 - Jailホストで動かしたいサービス
→apache, sshd - Jailホストに追加するユーザ/グループ
→vanilla:vanilla - 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の作り方。