Back-home
FreeBSD+Kernel 再構築ガイド
Top view / Search view / Administer

FreeBSD カーネル再構築 2003/03/07 (Fri)

サーバーを運用する際、セキュリティ上危険で不要なサーバーアプリケーション、メモリを浪費する不要なデバイスなどをOS再起動後に読み込まないようにします。

FreeBSD ハンドブックなどから引用、要約します。

もし、サーバー内に ディレクトリ /usr/src/sys がなかったら、カーネルソースがインストールされていません。ソースのみインストールできます(OSすべて再インストールする必要はありません)。

% su root
# /stand/sysinstall

Configure (設定) ⇒ Distributions (配布ファイル) ⇒ src (カスタム) ⇒ sys (カーネルのソース) をインストールします。

FreeBSDインストール用CDROM にアクセスして、コマンドラインでソースをインストールすることも可能です。

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

次に、ディレクトリ arch/conf に移動して、GENERIC コンフィグレーションファイルを別名で保存します。

アーキテクチャー arch は3種類あります。i386, alpha, pc98 で、PC ハードウエアの開発ブランチを表しています。

慣例上、ファイル名は大文字(例 MYKERNEL)とします。複数のマシンを管理しているときは、ホスト名を大文字で使用されることをおすすめします。

/usr/src より下位のディレクトリに、 kernelコンフィグファイルは保管しないで下さい。他の部位で保存して ディレクトリ arch 以下にシンボリックリンクを作ります。

例)

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

kernelコンフィグファイル MYKERNEL を編集し、カスタマイズします。

不必要と思われる設定行は安易に削除するのではなく、コメントアウト{行頭に "#" を加えるだけ}すると、削除と同義となります。コメントにしない{"#"のみ削除}と、元の設定に戻ります。まず、

     #ident GENERIC
     ident MYKERNEL

と編集し、他の行にある不要なデバイス等にはコメント "#" 一文字を挿入します。

よく分からないときはコメント"#"してはいけないもの:

     cpu "I386_CPU"
     maxusers 10

コメント "#" する方がよいもの:

     #options NFS #Network Filesystem
理由は公開サーバーでは NFS はセキュリティホールになるからです。

追加オプション:

     options QUOTA

マルチユーザで使っているサーバマシンでは、Disk quotasを使えるようにすると、ユーザ毎のディスク使用量を制限できます。

次に、カーネルからソースコードをコンパイルします。

2つ方法があります。

カーネルのアップデートをしないときなど:

config(8) 起動
# /usr/sbin/config MYKERNEL

ディレクトリへの移動

FreeBSD version 5.0 では、
# cd ../compile/MYKERNEL

FreeBSD version 4-,(3-,2-)では、
# cd ../../compile/MYKERNEL

コンパイル
# make depend
# make

インストール
# make install

アップグレード時

4.X 以降の新しいバージョンにアップグレードした場合 (例えば 3.X から 4-STABLE へ, もしくは 4-STABLE から 最新版の 4-STABLE へなど), buildworld を行なってから, 以下のコマンドを実行するそうです。

ディレクトリへの移動
# cd /usr/src

コンパイル
# make buildkernel KERNCONF=MYKERNEL

インストール
# make installkernel KERNCONF=MYKERNEL

但し、FreeBSD 4.2 以下では書式が異なる(KERNCONFの代わりに KERNELなど)ので、詳しい help を参照して下さい。

ソースツリーをアップグレードしていない場合 (CVSup, CTM, anoncvs, などを実行していない場合), config, make depend, make, make install の順に実行します。

インストール後、新しいカーネルは、ルートディレクトリに /kernel としてコピーされ、これまでのカーネルは、/kernel.old となります。

最初に作成された kernel.old は デフォルト kernel.GENERIC と同じファイルで確実に起動するカーネルですので、

# cd /
# cp -ip kernel.old kernel.default

として保存します(kernel.old はカーネル再構築のたびに、変化し続けますので、常にboot可能とは限りません。)

# shutdown -r now

元の環境に戻すときは、ブート時、カウントダウンが始まったらスペースキーを押し、プロンプト画面で、

     boot kernel.old
     boot kernel.GENERIC
     boot kernel.default

など、boot可能なカーネルを指定します。その後、ファイルを再設定し、カーネルを再構築します。

FreeBSD 5.0では、カーネルは /boot/kernel バックアップは /boot/kernel.old となります。boot 関連のファイル、boot loader(8)、設定ファイルも /boot に保存されます。カスタムされたモジュールは /boot/modules に移動することがありますので、カーネルと同期していないと、不安定になります。初心者がFreeBSD 5.0のカーネルを運用するには、5-STABLE 開発ブランチが作成された後が無難ですので、たとえば、5.1-RELEASE ないし 5.2-RELEASE の公開頃にインストールをおすすめいたします。




end 2003/02/16 (Sun)





Next(+0) / Back(-0) / Search view / Log view / Administer

- Harpist note ver1.02 -