jailの作り方をメモしておく。
主に、otsune's FreeBSD memo :: thin jailの作り方を参考にした、というか、そのまま。
- jail環境用のディレクトリを作る。
mkdir -p /jail/jailroot
- 作成したディレクトリ配下にディレクトリツリーを作成する。
- /etc/mtree配下のdistファイルなどを参考に、jail内で動作させるモノが必要とする構成のディレクトリツリーを記述したmtreeファイルを作成する。
- 作成したmtreeファイルをmtreeコマンドに喰わせてディレクトリを作成する。
mtree -deU -f jail.dist -p /jail/jailroot
- 最小限のバイナリをjail用ディレクトリ内に配置する。
- Manuel Kasper氏のサイトのminiBSD - reducing FreeBSDで提供されているmkmini.plというPerlスクリプトをダウンロードする。
fetch http://neon1.net/misc/minibsd/mkmini.pl
- jail環境に必要なファイルの一覧を作成し、任意の名前でファイルに保存する。
bin/[やbin/testのように実体が同じで名前だけが違うファイルは、コロン区切りで一行にまとめる。
例)bin/csh:/bin/tcsh
bin/date
bin/echo
bin/hostname
bin/link:bin/ln
bin/ls
bin/mkdir
bin/mv
bin/pwd:bin/realpath
bin/rm:bin/unlink
bin/rmdir
bin/sh
sbin/ldconfig
sbin/nologin:usr/sbin/nologin
usr/bin/awk
usr/bin/bunzip2:usr/bin/bzcat:usr/bin/bzip2
usr/bin/chgrp:usr/sbin/chown
usr/bin/cmp
usr/bin/gunzip:usr/bin/gzcat:usr/bin/gzip
usr/bin/egrep:usr/bin/fgrep:usr/bin/grep
usr/bin/find
usr/bin/limits
usr/bin/nohup
usr/bin/sed
usr/bin/tar
usr/bin/tee
usr/bin/true
usr/bin/touch
usr/bin/uname
usr/bin/dirname
usr/bin/nice
usr/sbin/mtree
usr/sbin/pw
usr/sbin/pwd_mkdb
usr/share/misc/termcap
libexec/ld-elf.so.1:usr/libexec/ld-elf.so.1
- mkmini.plを実行して、jail用ディレクトリ内にバイナリを配置する。
perl mkmini.pl jail.files / /jail/jailroot
- Manuel Kasper氏のサイトのminiBSD - reducing FreeBSDで提供されているmkmini.plというPerlスクリプトをダウンロードする。
- 最小限のライブラリをjail用ディレクトリ内に配置する。
- mkmini.pl同様、Manuel Kasper氏のサイトで提供されているmklibs.plというPerlスクリプトをダウンロードする。
fetch http://neon1.net/misc/minibsd/mklibs.pl
- mklibs.plを実行して、jail用ディレクトリ内に必要なライブラリの一覧を作成する。
perl mklibs.pl /jail/jailroot > jail.libs
- mkmini.plに、上で作成したライブラリの一覧を喰わせ、jail用ディレクトリ内にライブラリを配置する。
perl mkmini.pl jail.libs / /jail/jailroot
- mkmini.pl同様、Manuel Kasper氏のサイトで提供されているmklibs.plというPerlスクリプトをダウンロードする。
- 親環境側の/etc配下を整備する。
- 親環境側の/etc/hostsを編集し、jailのIPアドレスとホスト名などを追記する。
例)192.168.1.3 jail.example.com
- 親環境側の/etc/hostsを編集し、jailのIPアドレスとホスト名などを追記する。
- jail側の/etc配下を整備する。
- jail側の/etc/hostsを作成し、jail自身のIPアドレスとホスト名などを記述する。
例)192.168.1.3 localhost
192.168.1.3 jail.example.com - 親環境の/etcから、localtimeなどの必要そうなファイルをコピーする。
copy -p /etc/localtime /jail/jailroot/etc/
- jail側の/etc/hostsを作成し、jail自身のIPアドレスとホスト名などを記述する。
- jail側のアカウント情報を整備する。
- 親環境の/etcから、master.passwdおよびgroupをコピーする。
copy -p /etc/master.passwd /jail/jailroot/etc/
copy -p /etc/group /jail/jailroot/etc/ - jail側の/etcにコピーしたmaster.passwdを編集し、最低限必要(と思われる)アカウントのみにする。
この際に、rootなどのパスワードとログインシェルを無効化し、ログイン不可にしておく。
例)root:*:0:0::0:0:Charlie &:/root:/usr/sbin/nologin
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin - 同様にjail側にコピーしたgroupを編集し、最低限必要(と思われる)グループのみにする。
この際に、wheelグループ(など)から、不要なアカウントの情報を削除する。
例)wheel:*:0:root
daemon:*:1:
kmem:*:2:
sys:*:3:
operator:*:5:root
bin:*:7:
man:*:9:
nogroup:*:65533:
nobody:*:65534: - pwd_mkdbコマンドを実行し、パスワードデータベースを作成・更新する。
pwd_mkdb -p -d /jail/jailroot/etc /jail/jailroot/etc/master.passwd
- 親環境の/etcから、master.passwdおよびgroupをコピーする。
- jail側の共有ライブラリの検索パスを設定する。
chroot /jail/jailroot ldconfig /lib /usr/lib /usr/local/lib
対象の配置方法について上記では触れていないが、"jail内でports/packagesからインストールする"などして配置を行う。
ちなみに、先にjailを構築した際には、親環境側にportsを使用してインストールし、その際のログを参照してjail側に配置した。
投稿者 Kobito : 2005年05月08日 02:34




このエントリーのトラックバックURL
トラックバックはご自由にどうぞ。報告は不要です。
http://kobito.dnsalias.com/kobito/mt/mt-application/mt-tb.cgi/24
このエントリーへのコメント
nVBLUJ
投稿者 Fgcpjieg : 2009年07月15日 22:31
コメントしてください
ご感想など残してもらえると励みになります