限定された (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