限定された (restricted) bin 配布ファイル作成方法
作成 小金丸信幸
E-Mail: kogane@koganemaru.co.jp
07版 修正日 平成19年(2007年)05月06日 (日)
1. はじめに
Linux には色々なディストリビューションがあります。FreeBSD は単一のディ
ストリビューションが特徴の一つでもありますが、FreeBSD が使われる場面は
個々の環境によって異なっています。例えば、ファイアウォールや Web サー
バーを動かしている環境では、C コンパイラやアセンブラ、ローダーは不要で
す。そして、クラッカーに侵入された場合、それらのコマンドがあるほうがセ
キュリティ上より危険になります。
標準の FreeBSD 配布ファイルからプログラム開発用のコマンドを削除して、
新しい base 配布ファイルを作成できるツールを作成しました。これにより、
base 配布ファイルの容量が少なくなり、容量が少ない HDD (ハードディスク)
にインストールすることも可能になります。
インストールには作成した base 配布ファイルを標準の base 配布ファイルと
置き換えてインストールします。標準のインストーラや私が作成した日本語イ
ンストーラなどでもでインストールできます。
プログラム開発用コマンドだけでなく、環境によって不要なコマンドを削除し
たり追加した base 配布ファイルも作成できます。もちろんウィルス入りの配
布ファイルも作成できますので、自分で作成する場合以外は信頼のある作成者
の配布ファイルのみインストールするように心がけてください。
例えば、ファイアウォール用のカーネルには options IPFIREWALL, options
IPDIVERT などのオプションを追加したカーネルを作成する必要があります。
base 配布ファイルを作成する前に kernel.GENERIC を置き換えれば、ファイ
アウォール専用の配布ファイルが作成できます。
2. 準備
1) 標準の FreeBSD 配布ファイルが必要です。
base 配布ファイル等の利用するファイルのみでも可能です。
2) 配布ファイルを作成するために、/usr/src/release/script に含まれるの
シェル手続きを使用しますので、これらのファイルを適当なディレクトリ
に置いておく必要があります。
3) 配布ファイルを展開できるディレクトリと新規作成する限定された配布フ
ァイルを格納できる容量の作業用ディレクトリが必要です。
4) RBIN.6.2.yymmdd.tar.gz 作成ツール
yymmdd は日付になっています。
次のファイルが含まれています。
RBIN.Tree.sh 配布ファイルを trees ディレクトリに展開するシェル
手続き
RBIN.Rm.sh 不要なファイルを削除するシェル手続き
RBIN.Dist.sh 配布ファイル等作成シェル手続き
README 本ファイル
BASE_RM_FILES base 削除ファイル一覧ファイル
3. 作成方法
次のコマンドを順に実行します。
3.1. base リリース配布ファイルを trees ディレクトリに展開
次の RBIN.Tree.sh を実行します。
使用法: RBIN.Tree.sh [-v] [-d base] [-n base] release_dir work_dir
-v 展開するファイルを表示します。
-d base 配布ファイル名を指定します。省略した場合は base と
なります。
-n base 配布ファイル中のファイル名を指定します。省略した場
合は -d オプションと同様となります。
配布ファイルと配布ファイル中のファイル名が異なる場
合に指定します。例えば 4.X-RELEASE の crypto 配布
ファイル中の krb4, krb5 等のファイル名の場合指定し
ます。
release_dir リリース配布ファイルのディレクトリを指定します。
/dsk2/6.2-RELEASE/base に base 配布ファイルがあれば
/dsk2/6.2-RELEASE を指定します。
work_dir 作業ディレクトリ。このディレクトリ名は後の作業のた
めに $HOME/.rbin.rc に書き込まれます。
例:
# RBIN.Tree.sh /dsk2/6.2-RELEASE /dsk1/work
/dsk1/work/trees/base に base 配布ファイルが展開されます。
作業ディレクトリ名は続くコマンドで参照するために $HOME/.rbin.rc に
保存されます。
4.X-RELEASE では base 配布ファイルでなく bin 配布ファイルとなります。
例:
# RBIN.Tree.sh -d bin /dsk2/4.11-RELEASE /dsk1/work
例:
# RBIN.Tree.sh -d crypto /dsk2/4.11-RELEASE /dsk1/work
これで、4.X-RELEASE の crypto 配布ファイルも展開されます。
後に実行する RBIN.Dist.sh では /usr/src/release ディレクトリ下のフ
ァイルを使用します。このディレクトリが無ければ、次のようにして作成
することができます。
例:
# RBIN.Tree.sh -d src -n srelease /dsk2/6.2-RELEASE /dsk1/work
上記の例の場合、RBIN.Dist.sh の引数には -s /dsk1/work/src を指定します。
3.2. trees ディレクトリから不要なファイルを削除
次の RBIN.Rm.sh を実行します。
使用法: RBIN.Rm.sh [-v] [-d base] [-n base] [work_dir] <remove_files_list
-v 削除するファイル名を表示します。
-d base 配布ファイル名を指定します。省略した場合は base と
なります。
-n base 配布ファイル中のファイル名を指定します。省略した場
合は -d オプションと同様となります。
配布ファイルと配布ファイル中のファイル名が異なる場
合に指定します。例えば 4.X-RELEASE の crypto 配布
ファイル中の krb4, krb5 等のファイル名の場合指定し
ます。
work_dir 作業ディレクトリ。(省略可)
remove_files_list 標準入力で削除するファイルの一覧を指定します。
例:
# RBIN.Rm.sh -v <BASE_RM_FILES
添付している BASE_RM_FILES にはプログラム開発用コマンドのファイル
一覧が含まれています。
3.3. /usr/src/release ファイルを準備する
次の RBIN.Dist.sh を実行する前に RBIN.Dist.sh の中で参照される
release 用のシェル手続きを準備する必要があります。
上記の RBIN.Tree.sh を使用する方法もありますが、標準の /usr/src に
ファイルを展開する方法です。
src 配布ファイルの srelease ファイルから展開します。
例:
# cd /dsk2/6.2-RELEASE/src
# sh install.sh release
これで /usr/src/release の下にファイルが展開されます。
3.4. trees ディレクトリから限定された base 配布ファイルを作成
次の RBIN.Dist.sh を実行します。
使用法: RBIN.Dist.sh [-654] [-d base] [-n base] [-s src_dir] [work_dir]
-6 配布ファイルのサイズは 6.X-RELEASE と同様のサイズ
となります。6.X-RELEASE で実行した場合の省略値はこ
のサイズとなります。省略時はこのサイズとなります。
チェックサムとして CHECKSUM.MD5 と CHECKSUM.SHA256
を出力します。
-5 -6 と同様です。
-4 配布ファイルのサイズは 4.X-RELEASE と同様のサイズ
となります。チェックサムとして CHECKSUM.MD5 のみを
出力します。
-d base 配布ファイル名を指定します。省略した場合は base と
なります。
-n base 配布ファイル中のファイル名を指定します。省略した場
合は -d オプションと同様となります。
配布ファイルと配布ファイル中のファイル名が異なる場
合に指定します。例えば 4.X-RELEASE の crypto 配布
ファイル中の krb4, krb5 等のファイル名の場合指定し
ます。
src_dir release ディレクトリが存在するソースディレクトリを
指定します。/usr/src/release があるなら、/usr/src
を指定します。省略した場合は /usr/src となります。
work_dir 作業ディレクトリ。(省略可)
例:
# RBIN.Dist.sh
これで、/dsk1/work/dist/base に base 配布ファイルが作成されます。
例:
# RBIN.Dist.sh -d crypto
4.X-RELEASE の場合、これで、/dsk1/work/dist/crypto に crypto 配布
ファイルが作成されます。
3.5. 配布ファイルの置き換え
ファイアウォール用のカーネルに置き換える場合は、/usr/src/sys/i386/conf
の GENERIC ファイルに次のように options を追加します。
これは 6.2-RELEASE の場合です。
--- GENERIC.orig Sun Jun 27 02:50:14 2004
+++ GENERIC Thu Sep 9 00:18:16 2004
@@ -60,6 +60,11 @@
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
+options IPFIREWALL #firewall
+options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
+options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity
+options IPDIVERT #divert sockets
+
# To make an SMP kernel, the next two are needed
#options SMP # Symmetric MultiProcessor Kernel
#options APIC_IO # Symmetric (APIC) I/O
RBIN.Dist.sh コマンドを実行する前に次の作業を行います。
# /usr/src/sys/i386/conf
GENERIC ファイルを修正します。
# config GENERIC
4.X-RELEASE の場合。
# cd /usr/src/sys/compile/GENERIC
5.X-RELEASE, 6.X-RELEASE の場合。
# cd /usr/src/sys/i386/compile/GENERIC
# make depend ; make
を実行します。
6.X-RELEASE の場合は次のようにインストールを行います。
# setenv NO_MAN <- sh の場合は # export NO_MAN
# make DESTDIR=/dsk1/work/trees/kernels install
を実行します。
/dsk1/work/trees/kernels には boot/kernel が作成されますので、
/dsk1/work/trees/kernels/GENERIC に名前を変えます。
# cd /dsk1/work/trees/kernels
# mv boot/kernel GENERIC
# rmdir boot
5.X-RELEASE の場合は次のようにインストールを行います。
# setenv NO_MAN <- sh の場合は # export NO_MAN
# make DESTDIR=/dsk1/work/trees/base install
を実行します。
そして、4.X-RELEASE の場合は
# setenv NOMAN <- sh の場合は # export NOMAN
# make DESTDIR=/dsk1/work/trees/bin install
# cd /dsk1/work/trees/bin
# chflags noschg kernel
# mv kernel kernel.GENERIC
# rm -r modules.old
を実行します。
4. その他
6.2-RELEASE の場合 base 配布ファイルを展開すると du コマンドで
118.278M バイトになりますが、BASE_RM_FILES で指定されたファイルを削
除すると 67.570M バイトとなり、50.708M バイトが削減できます。
5. 改版履歴
01版 作成日 平成15年(2003年)07月08日 (火)
02版 修正日 平成15年(2003年)07月10日 (木)
crypto 配布ファイル等他の配布ファイルも処理できるようにした。
03版 修正日 平成15年(2003年)07月13日 (日)
説明の誤りを訂正。RBIN.Dist.sh を 5.X-RELEASE に対応しまし
た。
04版 修正日 平成15年(2003年)11月09日 (日)
FreeBSD 4.9-RELEASE に対応した。
05版 修正日 平成16年(2004年)09月08日 (水)
「/usr/src/release ファイルを準備する」の項目を追加。
FreeBSD 4.10-RELEASE, 5.3-RELEASE に対応した。
06版 修正日 平成16年(2004年)11月09日 (火)
「 3.5. 配布ファイルの置き換え」部分の kernel の置き換え
操作が 5.X-RELEASE では不要なことを追加。
07版 修正日 平成19年(2007年)05月06日 (日)
6.X-RELEASE 対応に修正した。
以上.
--
Copyright (C) 2003-2007 (有)小金丸コンピュータエンジニアリングサービス
Copyright (C) 2003-2007, N. Koganemaru