2005/03/16

Hardened Gentoo のインストール

このページはHardened Gentoo をインストールしたときのメモです。
Hardened Gentoo とは、seLinux 等を採用した、セキュリティを重視したGentoo Linux です。
seLinuxはカーネルに組み込むセキュリティモジュールで、アクセス制御機能が強化されています。
ただ、seLinuxはファイアーウォールのように、進入を防ぐと言う事に主眼を置いているのではなく、 侵入された後に被害の拡大を防ぐことに着目しています。
そのため、従来からのセキュリティ対策も、引き続き必要です。

なお、今回インストールするマシンには、マスター(hda)には Windows が既にインストール済みであるため、 スレーブ(hdb)に Hardened Gentoo をインストールし、デュアルブートを行うこととします。

マシンスペック

今回インストールを行うマシンのスペックは次の通りです。
マシン自作PC
OSWindows XP HomeEdition SP2
CPUAMD Athlon XP 2500+
メモリー256MB
ビデオカードRADEON9200 メモリー:128MB
HDマスター:Maxtor 80G
スレーブ:Maxtor 30G

LiveCDの入手

Hardened Gentoo をインストールするために、Hardened Gentoo 用の LiveCDを入手する必要が あります。 ISOイメージは、ダウンロードミラーから取得できます。
experimental/x86/hardened/livecd ディレクトリ内から ISOファイルを入手してください。
今回、ダウンロードしたファイルは、vecd-x86-selinux-20040616-1.iso でした。 このISOイメージをCDに焼いてLiveCDを作成し、CDからマシンを起動します。

LiveCDによる起動

LiveCDにてマシンを起動すると、「Your default context is root:sysadm_r:sysadm_t.Do you want to choose different one?」 と問われます。ここは [n]を入力してください。(何も入力せずにEnterボタンを押せば、[n]を選択した事になります。)

Rootパスワードの設定を行います
# passwd

設定するパスワードを2度入力するように求められます。
同じパスワードを2度入力してください。

ハードディスクがDMA対応であれば、DMAを有効にします。
# hdparm -d 1 /dev/hdb

ネットワーク環境の準備

IPアドレスの設定を行います。例ではIPアドレスを 192.168.1.1 に設定しています。
# ifconfig eth0 192.168.1.1

ゲートウェイの設定を行います。
例ではゲートウェイとして、192.168.1.2を指定しています。
# route add default gw 192.168.1.2

DNSを設定するために、/etc/resolv.confを以下のように編集します。
例ではDNSサーバーとして、192.168.1.3を指定しています。
nameserver 192.168.1.3

ファイルシステムの準備

fdiskを用いてパーティションの作成を行います。
# fdisk /dev/hdb

パーティションの作成については、ハードディスクの容量や用途等で千差万別と思います。
今回の場合は以下の様にパーティションを作成しました。
   Device Boot      Start         End      Blocks   Id  System
/dev/hdb1               1          13      104391   83  Linux
/dev/hdb2              14          30      136552+  83  Linux
/dev/hdb3              31        2000    15824025   83  Linux
/dev/hdb4            3736        3736    13944420   83  Linux

/dev/hdb1・・・Bootパーティション
/dev/hdb2・・・Swapパーティション
/dev/hdb3・・・/ パーティション
/dev/hdb4・・・home パーティション
ファイルシステムとしてはext3を採用しました。ext3パーティションを作成します。
# mkfs.ext3 /dev/hdb1
# mkfs.ext3 /dev/hdb3
# mkfs.ext3 /dev/hdb4

スワップパーティションを作成します。
# mkswap /dev/hdb2

スワップを有効にします。
# swapon /dev/hdb2

各パーティションをマウントするためのディレクトリを作成し、マウントします。
# mount /dev/hdb3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hdb1 /mnt/gentoo/boot
# mkdir /mnt/gentoo/home
# mount /dev/hdb4 /mnt/gentoo/home

インストール

/mnt/gentoo に移動します。
# cd /mnt/gentoo

ステージ圧縮ファイルのダウンロードを行います。
linksを用いて、ステージ圧縮ファイルをダウンロードします。
ダウンロードミラー にアクセスし、experimental/x86/hardened/stages ディレクトリから stage1-x86-selinux-pie-ssp-20041123.tar.bz2 をダウンロードします。
保存した圧縮ファイルを展開します。
# tar -xvjpf /mnt/gentoo/stage1-x86-2004.2.tar.bz2

コンパイルオプション変更のため、/etc/make.confの編集をします。
# vim /etc/make.conf

/etc/make.confは以下のようになりました。
CFLAGS="-march=athlon-xp -O2 -pipe -fomit-frame-pointer"
CHOST="i686-pc-linux-gnu"
MAKEOPTS="-j2"

chroot環境の準備のために、マウントとDNSの設定を行います。
# マウントを行います。
# mount -t selinuxfs none /mnt/gentoo/selinux
# mount -t proc none /mnt/gentoo/proc

# DNSの設定をコピーします。
# cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

chroot環境に入ります。
# chroot /mnt/gentoo /bin/bash
# env-update
>>> Regenerating /etc/ld.so.cache...
# source /etc/profile

最新のPortage ツリーを取得を取得します。
# emerge sync

ブートストラップを実行します。
# cd /usr/portage
# scripts/bootstrap.sh

ブートストラップを実行完了後,残りのシステムをインストールします。 まずはインストールされるパッケージを確認後にインストールを実行します。
# emerge -p system
# emerge system

カーネルの設定

カーネルは2.6対応のhardened-dev-sourcesを選択しました。
# emerge hardened-dev-sources

カーネルの構築を行います。
# cd /usr/src/linux
# make menuconfig

以下のオプションを確認します。
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers

General setup --->
[*] Auditing support

File systems --->
<*> Ext3 journalling file system support (If using ext3)
[*]   Ext3 extended attributes
[ ]     Ext3 POSIX Access Control Lists
[*]     Ext3 security labels    

    Pseudo Filesystems --->
    [*] /proc file system support
    [ ] /dev file system support (EXPERIMENTAL)
    [*]   /dev/pts Extended Attributes
    [*]     /dev/pts Security Labels    
    [*] Virtual memory file system support (former shm fs)

Security options --->
[*] Enable different security models
[*] Socket and Networking Security Hooks
<*> Capabilities Support
[*] NSA SELinux Support
[ ]   NSA SELinux boot parameter
[ ]   NSA SELinux runtime disable
[*]   NSA SELinux Development Support
[ ]   NSA SELinux MLS policy (EXPERIMENTAL)

カーネルをコンパイルします。
# make && make modules_install

ブートイメージをコピーします。
# cp /usr/src/linux/arch/i386/boot/bzImage /boot

システムの設定


私は viエディターが好きなので、viエディターをインストールします。
# emerge app-editors/vim

タイムゾーン設定を行います。
ln -sf /usr/share/zoneinfo/Japan /etc/localtime

/etc/fstab を編集し、マウントするパーティションを設定します。
# vi /etc/fstab

編集後の/etc/fstab は以下の様になりました。
/dev/hdb1       /boot       ext3        noauto,noatime      1 1
/dev/hdb3       /           ext3        noatime             0 1
/dev/hdb4       /home       ext3        noatime             0 2
/dev/hdb2       none        swap        sw                  0 0

none            /proc       proc        defaults            0 0
none            /selinux    selinuxfs   defaults            0 0
none            /dev/pts    devpts      gid=5,mode=620      0 0

syslogとcronをインストールし、デフォルトランレベルに設定します。
# metalogをインストールしデフォルトランレベルに設定します。
# emerge metalog
# rc-update add metalog default

# vixie-cronをインストールしデフォルトランレベルに設定します。
# emerge vixie-cron
# rc-update add vixie-cron default

ネットワークの設定をします。起動時にネットワークデバイスも起動するようにします。
# rc-update add net.eth0 default

ネットワーク起動時のIPアドレス、Gatewayを設定するために
起動オプションを編集します。編集するファイルは /etc/conf.d/net です。
iface_eth0="192.168.1.1 broadcast 192.168.1.255 netmask 255.255.255.0"
gateway="eth0/192.168.1.2"

普段作業するためのユーザーを作成し,パスワードを設定します。 またユーザーが su できるようにwheelグループへ所属させています。
# useradd hoge -m -G users,wheel -s /bin/bash
# passwd hoge
-m ホームディレクトリが存在しない場合作成される。
-G ユーザーが所属するグループのリスト
-s ログインシェルの名前

ホスト名を hoge に、ドメイン名を gside.org に設定します。

# echo hoge > /etc/hostname
# echo gside.org > /etc/dnsdomainname

キーマップと時間の設定のために /etc/rc.conf を修正します
KEYMAP="jp106"
CLOCK="local"

GRUBの設定

BOOTローダーGRUBはデフォルトでインストールされています。GRUBの設定を行います。
ここでは、GRUBをMBR(マスターブートレコード)にインストールし、Windows とデュアルブート を行うように設定します。
# grub

grub>とプロンプトが現れるので、以下のコマンドでインストールします。
# GRUBが格納されているパーティション
grub> root (hd1,0)

# GRUBをMBRにインストールします。
grub> setup (hd0)

/boot/grub/grub.confを編集します。今回のマシンでは以下の様になりました。

# OS選択画面での停止時間(秒)を指定します。
# この時間を過ぎると、デフォルトのOSが起動されます。
timeout 5

# デフォルトで選択されるOSを指定します。
# 1番目のOSをデフォルトにするには 0 を指定します。
default 0

# GRUBの画面イメージの場所を指定します。
splashimage=(hd1,0)/boot/grub/splash.xpm.gz

## Linux 起動用の設定--------------------------------
# OS選択画面で表示されるタイトル
title Gentoo Linux
# GRUBが格納されているパーティション
root (hd1,0)
# カーネルイメージのパスとカーネル起動時のオプション
kernel (hd1,0)/boot/bzImage root=/dev/hdb3 gentoo=nodevfs

## Windows 起動用の設定--------------------------------
title Windows XP
rootnoverify (hd0,0)
makeactive
chainloader +1

# cd /etc/security/selinux/src/policy/

# ポリシーのロードを行います。
# make load

私の環境ではここでエラーが発生しました。カーネルとポリシーのバージョンが違うと言う 内容でした。2005/3/16現在のポリシーの最新バージョンは18ですが,LiveCDのkernelがサポートする バージョンは16になっています。
そこで、ロードするポリシーのバージョンを指定するため、/etc/security/selinux/src/policy/Makefileを修正します。
# ロードするPolicyをバージョン 16 とする。
POLICYCOMPAT = -c 16

再度ポリシーのロードを行います。
# ポリシーのロードを行います。
# make load
# ラベル付けを行います。
# make chroot_relabel

以上でインストールは完了です。マシンをrebootします。
# chroot環境から抜けます。
# exit
# cd /

# マウントを解除します。
# umount /mnt/gentoo/boot
# umount /mnt/gentoo/home
# umount /mnt/gentoo/proc
# umount /mnt/gentoo/selinux
# umount /mnt/gentoo

# システムを再起動します。
# reboot

再起動後、もう一度ラベルを振りなおします。
# cd /etc/security/selinux/src/policy
# make relabel