TOMOYO Linux on CAT760
このページでは、 TOMOYO Linux を CAT760 上で動作させる手順について説明します。ホスト環境として x86 上で動作している Debian Sarge を使用します。
基本編:コンパクトフラッシュ上のカーネルと rootfs を使って動作させる- ステップ1:ホスト環境を構築する
- ステップ2:コンパイルに必要なパッケージをインストールする
- ステップ3:カーネルをコンパイルする
- ステップ4:ツールをコンパイルする
- ステップ5:コンパクトフラッシュをフォーマットする
- ステップ6:コンパクトフラッシュにコピーする
- ステップ7:ポリシーの初期化を行う
- ステップ8:ポリシーの調整を行う
- ステップ9:ポリシーを作成する
- 補足:工場出荷時の状態に戻す
- ステップ1:ホスト環境を構築する
- ステップ2:コンパイルに必要なパッケージをインストールする
- ステップ3:カーネルをコンパイルする
- ステップ4:ツールをコンパイルする
- ステップ5:コンパクトフラッシュをフォーマットする
- ステップ6:バックアップを取得する
- ステップ7: rootfs を編集する
- ステップ8:フラッシュROMを書き換える
- 補足:工場出荷時の状態に戻す
基本編:コンパクトフラッシュ上のカーネルと rootfs を使って動作させる
ステップ1:ホスト環境を構築する
Debian Sarge は既に End Of Life であるため、パッケージのダウンロードサーバを書き換える必要があります。 root としてログインし、 /etc/apt/sources.list の内容を以下のように書き換えてください。
deb http://archive.debian.org/debian-archive/debian/ sarge main contrib non-free deb http://archive.debian.org/debian-archive/debian-security/ sarge/updates main contrib non-free
次に、 fdisk コマンドの -l オプションでデバイスの一覧が表示されるようにするために、 2.6 カーネルをインストールします。
# apt-get update # apt-get -y install kernel-image-2.6.8-4-686-smp
2.6.8-4-686-smp カーネルで再起動します。
# reboot
ステップ2:コンパイルに必要なパッケージをインストールする
開発用CDROMのマウントポイントとして /mnt/cdrom を作成し、そこにマウントします。
# mkdir -p /mnt/cdrom # mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/
CDROM内にあるクロスツールパッケージが依存するパッケージをインストールします。
# apt-get -y install gcc-3.4-base
CDROM内にあるクロスツールパッケージをインストールします。ただし、 binutils パッケージと競合するファイルを含んでいる gdb-sh4-linux パッケージはアンインストールします。
# dpkg -i /mnt/cdrom/cross-tools/debian-sarge/sh4/*.deb # dpkg --purge gdb-sh4-linux
カーネルおよびツールのコンパイルに必要なパッケージをインストールします。
# apt-get -y install patch make gcc libc6-dev libncurses5-dev
ステップ3:カーネルをコンパイルする
カーネルのソースを展開します。
# cd # tar -zxf /mnt/cdrom/kernel/linux-2.6.15-cat_20080502.tgz # cd linux-2.6.15-cat
TOMOYO Linux パッチをダウンロードして適用します。
# wget https://sourceforge.net/projects/tomoyo/files/ccs-patch/1.8/ccs-patch-1.8.15-20260928.tar.gz # wget https://sourceforge.net/projects/tomoyo/files/ccs-patch/1.8/ccs-patch-1.8.15-20260928.tar.gz.asc # gpg ccs-patch-1.8.15-20260928.tar.gz.asc # tar -zxf ccs-patch-1.8.15-20260928.tar.gz # patch -p1 < patches/ccs-patch-2.6.15-cat-760.diff
カーネルコンフィグを作成します。
# make cat760_defconfig
コンパイルを行います。
# make # make modules_install
make modules_install によりカーネルモジュールが /home/ebihara/tmp/lib/modules/2.6.15-sh/ 以下にインストールされるので、カーネル本体を /home/ebihara/tmp/ 以下にインストールします。
# mkdir -p /home/ebihara/tmp/ # cp -p arch/sh/boot/zImage /home/ebihara/tmp/
ステップ4:ツールをコンパイルする
ツールのソースをダウンロードします。
# cd # wget https://sourceforge.net/projects/tomoyo/files/ccs-tools/1.8/ccs-tools-1.8.14-20250707.tar.gz # wget https://sourceforge.net/projects/tomoyo/files/ccs-tools/1.8/ccs-tools-1.8.14-20250707.tar.gz.asc # gpg ccs-tools-1.8.14-20250707.tar.gz.asc # tar -zxf ccs-tools-1.8.14-20250707.tar.gz
CAT760 向けにクロスコンパイルを行います。クロスコンパイルされたツールは /home/ebihara/tmp/sbin/ および /home/ebihara/tmp/usr/ 以下にインストールされます。
# make -C ccs-tools/ CC=sh4-linux-gcc INSTALLDIR=/home/ebihara/tmp/ install clean
man ページは使わないので削除します。
# rm -fR /home/ebihara/tmp/usr/share/
ホスト環境から操作を行うので、ホスト環境向けにもコンパイルを行います。コンパイルされたツールは /sbin/ および /usr/ 以下にインストールされます。
# make -sC ccs-tools/ install clean
ステップ5:コンパクトフラッシュをフォーマットする
CAT760 で / パーティションとして使用するためのコンパクトフラッシュを、ホスト環境のドライブに差し込んでください。
fdisk コマンドを使ってコンパクトフラッシュのデバイスファイル名を確認します。
# fdisk -l Disk /dev/sda: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 522 4192933+ 83 Linux Disk /dev/sdb: 251 MB, 251658240 bytes 8 heads, 60 sectors/track, 1024 cylinders Units = cylinders of 480 * 512 = 245760 bytes Disk /dev/sdb doesn't contain a valid partition table
このページでは、以降、ホスト環境に於けるコンパクトフラッシュのデバイスファイル名が /dev/sdb であるものと仮定します。
fdisk コマンドを使ってコンパクトフラッシュのパーティションを分割します。
# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1024, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1024, default 1024): Using default value 1024 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
コンパクトフラッシュを / パーティションとしてマウントできるように ext2 でフォーマットします。
# mke2fs /dev/sdb1
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
61440 inodes, 245728 blocks
12286 blocks (5.00%) reserved for the super user
First data block=1
30 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
ステップ6:コンパクトフラッシュにコピーする
マウントポイントとして /mnt/cfcard を作成し、そこにマウントします。
# mkdir -p /mnt/cfcard # mount /dev/sdb1 /mnt/cfcard/
CDROM内にあるイメージファイルの内容をコンパクトフラッシュに展開します。
# cd /mnt/cfcard/ # tar -zxf /mnt/cdrom/rootfs/files/target_cat760_20060722.tgz --strip 2
クロスコンパイルしたカーネルとツールをコンパクトフラッシュにコピーします。
# cp -a /home/ebihara/tmp/* /mnt/cfcard/
コンパクトフラッシュをアンマウントし、 CAT760 に挿入します。
# cd # umount /mnt/cfcard/
ステップ7:ポリシーの初期化を行う
SH4-7760 と書かれている基板の SW1 が全て OFF 側になっていることを確認して、 CAT760 の電源を入れると、以下のようなプロンプトが表示されます。
CAT BOOT for CAT760 Version: 1.07 Feb 27 2007 17:45:59 RTC clock :2010/05/04 16:44:36 command line = console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2 Mac address = 00:03:82:03:03:C8 Boot size = 0x10000 Kernel size = 0x130000 >>
管理者モードに移ります。パスワードは silinux です。
admin
デフォルトのコマンドラインを設定します。 CAT760 環境に於いては、コンパクトフラッシュには /dev/hda でアクセスできます。
setparam zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2
ポリシーの初期化が済んでいないため、 TOMOYO Linux を無効にした状態でブートします。
boot zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 ccsecurity=off
ユーザ名 root 、パスワード root でログインします。
SiliconLinux for CAT709/760 supercat ttySC0 supercat login: root Password: Unable to change tty /dev/ttySC0: Read-only file system supercat:~#
/ を読み書き可能な状態にします。
supercat:~# mount -o remount,rw /
ポリシーの初期化を行います。(ホスト環境と実機が同一の構成であれば、ホスト環境内で chroot /mnt/cfcard/ /usr/lib/ccs/init_policy を実行すればよいのですが、異なる構成であるため、正しい結果を得るために実機で /usr/lib/ccs/init_policy を実行します。)
supercat:~# /usr/lib/ccs/init_policy
Creating policy directory... OK Creating configuration directory... OK Creating exception policy... OK Creating domain policy... OK Creating manager policy... OK Creating default profile... OK Creating stat policy... OK Creating module loader... OK Creating configuration file for ccs-editpolicy ... OK Creating configuration file for ccs-auditd ... OK Creating configuration file for ccs-patternize ... OK Creating configuration file for ccs-notifyd ... OK
/ を読み込み専用の状態にします。
supercat:~# mount -o remount,ro /
シャットダウンして、コンパクトフラッシュを抜きます。
supercat:~# halt
ステップ8:ポリシーの調整を行う
コンパクトフラッシュをマウントします。(ホスト環境と実機が同一の構成であれば chroot /mnt/cfcard/ を実行すればよいのですが、異なる構成であるため cd を使用しています。以下、 /etc/ ではなく etc/ であることに注意してください。)
# mount /dev/sdb1 /mnt/cfcard/ # cd /mnt/cfcard/
シャットダウン時にポリシーを自動的に保存されるようにするために etc/init.d/halt の halt -d -f -i $poweroff $hddown の直前に以下の内容を追加します。
halt --help > /dev/null 2>&1 mount -o remount,ro / mount -o remount,rw / /usr/sbin/ccs-savepolicy /usr/sbin/ccs-savepolicy mount -o remount,ro /
ccs-savepolicy コマンドは ccs-savepolicy コマンドが実行された時点のポリシーしか保存できません。そのため、 ccs-savepolicy コマンド自身が必要とするアクセス許可を学習させるために、 ccs-savepolicy コマンドを2回実行しています。また、 ccs-savepolicy コマンドが実行されるタイミングでは既にファイルシステムが読み込み専用モードになってしまっているため、そのままではポリシーディレクトリに書き込みができません。そのため、一時的に読み書きモードに変更するためのアクセス許可と読み込み専用モードに戻すためのアクセス許可を学習させるために、 mount コマンドを ccs-savepolicy コマンドの実行前に2回実行しています。同様に halt コマンドのアクセス許可も学習させるために、 halt コマンドを ccs-savepolicy コマンドの実行前に1回実行しています。
同様に、 etc/init.d/reboot の reboot -d -f -i の直前に以下の内容を追加します。
reboot --help > /dev/null 2>&1 mount -o remount,ro / mount -o remount,rw / /usr/sbin/ccs-savepolicy /usr/sbin/ccs-savepolicy mount -o remount,ro /
リモートからポリシーの操作ができるようにするために、 etc/init.d/ccs-editpolicy-agent を作成します。
# echo '#! /bin/sh' > etc/init.d/ccs-editpolicy-agent # echo 'exec /usr/lib/ccs/ccs-editpolicy-agent 0.0.0.0:10000 &' >> etc/init.d/ccs-editpolicy-agent # chmod 700 etc/init.d/ccs-editpolicy-agent
etc/init.d/ccs-editpolicy-agent が起動時に実行されるようにします。(ホスト環境と実機が同一の構成であれば、ホスト環境内で chroot /mnt/cfcard/ update-rc.d ccs-editpolicy-agent defaults を実行すればよいのですが、異なる構成であるため、手作業により行います。)
# ln -s ../init.d/ccs-editpolicy-agent etc/rcS.d/S60ccs-editpolicy-agent
ポリシーの変更を許可するプログラムの一覧である etc/ccs/manager.conf に /usr/lib/ccs/ccs-editpolicy-agent を追加します。
# echo /usr/lib/ccs/ccs-editpolicy-agent >> etc/ccs/manager.conf
起動時から学習モードになるように、 etc/ccs/domain_policy.conf を更新します。
# cat > etc/ccs/domain_policy.conf << EOF <kernel> use_profile 1 EOF
etc/ccs/stat.conf でメモリ使用量の上限を設定します。 CAT760 の搭載メモリは64MBなので、ポリシー用に5MB/アクセスログ用に1MB/対話的処理用に1MBを上限として割り当てます。
# cat > etc/ccs/stat.conf << EOF Memory used by policy: 5242880 Memory used by audit log: 1048576 Memory used by query message: 1048576 EOF
コンパクトフラッシュをアンマウントします。
# cd # umount /mnt/cfcard/
ステップ9:ポリシーを作成する
電源を入れてブートローダに進みます。
CAT BOOT for CAT760 Version: 1.07 Feb 27 2007 17:45:59 RTC clock :2010/05/04 17:14:20 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 Mac address = 00:03:82:03:03:C8 Boot size = 0x10000 Kernel size = 0x130000 >>
ブートします。
boot
ログインして、好きなように操作します。
CAT760 のIPアドレスを xxx.xxx.xxx.xxx とした場合、ホスト側から
# ccs-editpolicy xxx.xxx.xxx.xxx:10000
のように実行することにより、ホスト側からポリシーの編集を行うことができます。同様に、ホスト側から
# ccs-auditd xxx.xxx.xxx.xxx:10000
のように実行することにより、CAT760 で生成されたアクセスログをホスト側に保存することができます。その他にも、
# ccs-savepolicy xxx.xxx.xxx.xxx:10000 -d > /tmp/domain_policy.conf
のように実行することにより、CAT760 側の /proc/ccs/domain_policy の内容をホスト側の /tmp/domain_policy.conf に保存することができ、
# ccs-loadpolicy xxx.xxx.xxx.xxx:10000 -d < /tmp/domain_policy.conf
のように実行することにより、ホスト側の /tmp/domain_policy.conf の内容を CAT760 側の /proc/ccs/domain_policy に追加することができます。
操作を間違えて起動できなくなった場合には、 boot のコマンドラインで boot zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 ccsecurity=off のように指定することで TOMOYO Linux を無効にした状態で起動できます。
補足:工場出荷時の状態に戻す
ステップ7で書き換えたコマンドラインを復元するには以下のように行います。
電源を入れてブートローダに進みます。
CAT BOOT for CAT760 Version: 1.07 Feb 27 2007 17:45:59 RTC clock :2010/05/04 17:44:10 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 Mac address = 00:03:82:03:03:C8 Boot size = 0x10000 Kernel size = 0x130000 >>
管理者モードに移ります。パスワードは silinux です。
admin
コマンドラインを設定します。
setparam console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2
応用編:フラッシュROM上のカーネルと rootfs を使って動作させる
ステップ1:ホスト環境を構築する
基本編のステップ1と同じです。
ステップ2:コンパイルに必要なパッケージをインストールする
基本編のステップ2と同じです。
ステップ3:カーネルをコンパイルする
コンパクトフラッシュに保存されたカーネルから起動する場合にはカーネル本体のサイズを気にする必要はありませんが、フラッシュROM内のカーネル用パーティションに保存されたカーネルから起動する場合にはカーネル本体のサイズに注意が必要です。 CAT760 のデフォルトのパーティション設定では、カーネル用のパーティションサイズは 1245184(0x130000)バイトです。デフォルトのカーネルコンフィグでコンパイルした場合のカーネルサイズは 1212416(0x128000)バイトですので、デフォルトでは32キロバイトしか空き領域がありません。(なお、 CAT760 の新製品である CAT760A ではフラッシュROMのセクタサイズが64キロバイトから128キロバイトに変更されたのに伴い、カーネル用のパーティションサイズが 1179648(0x120000)バイトに縮小されているため、デフォルトで空き領域が不足しますのでご注意ください。)
TOMOYO Linux の機能をカーネル本体に組み込んだ場合、カーネル本体のサイズがおよそ48キロバイト増加するため、 rootfs 用のパーティションサイズを小さくしてカーネル用パーティションサイズを大きくするか、カーネルコンフィグで幾つかの機能をローダブルカーネルモジュールとしてコンパイルする必要が生じます。
TOMOYO Linux の機能の殆どはローダブルカーネルモジュールとして切り出すことが可能です。 TOMOYO Linux の機能をローダブルカーネルモジュールとして切り出した場合、カーネル本体のサイズ増加はおよそ4キロバイトで済みます。
手順は基本編のステップ3と同じですが、 TOMOYO Linux をローダブルカーネルモジュールとして切り出す場合には、「カーネルコンフィグを作成する」( make cat760_defconfig )と「カーネルをコンパイルする」( make )の間に以下の手順を行います。
# make menuconfig
Security options セクションの CCSecurity support グループにある Compile as loadable kernel module という項目を選択します。
[ ] Enable access key retention support [ ] Enable different security models [*] CCSecurity support [*] Compile as loadable kernel module [ ] Disable by default [ ] Do not modify 'struct task_struct' in order to keep KABI (2048) Default maximal count for learning mode (1024) Default maximal count for audit log [ ] Activate without calling userspace policy loader. (/sbin/ccs-init) Location of userspace policy loader (/sbin/init) Trigger for calling userspace policy loader
Exit を2回選択し、カーネルコンフィグを保存するかどうかの質問に Yes と答えてください。
ステップ4:ツールをコンパイルする
基本編のステップ4と同じです。
ステップ5:コンパクトフラッシュをフォーマットする
基本編のステップ5と同じです。ただし、ブートローダは ext2 ファイルシステムへの書き込みをサポートしていないので、 ext2 ファイルシステムではなく fat ファイルシステムでフォーマットする必要があります。 mke2fs の箇所は mkfs.vfat に読み替えてください。
# mkfs.vfat /dev/sdb1
ステップ6:バックアップを取得する
コンパクトフラッシュを CAT760 に挿入後、電源を入れてブートローダに進みます。
CAT BOOT for CAT760 Version: 1.07 Feb 27 2007 17:45:59 RTC clock :2010/05/04 17:14:20 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 Mac address = 00:03:82:03:03:C8 Boot size = 0x10000 Kernel size = 0x130000 >>
フラッシュROMに記録されているカーネルと rootfs のバックアップを取得します。
cp rom:zImage cf0:zImage-orig cp rom:rootfs cf0:rootfs-orig
シャットダウンして、コンパクトフラッシュを抜きます。
ステップ7: rootfs を編集する
ホスト環境にコンパクトフラッシュを挿入し、マウントします。
# mount /dev/sdb1 /mnt/cfcard/
mkfs.jffs2 のためのパッケージをインストールします。
# apt-get install mtd-tools
mtdblock モジュールをロードします。
# modprobe mtdblock
mtdram モジュールをロードします。
# modprobe mtdram total_size=16384
rootfs となるデバイスファイルを作成します。
# mknod /dev/mtdblock2 b 31 2
rootfs となるデバイスファイルに書き込みます。
# cat /mnt/cfcard/rootfs-orig > /dev/mtdblock2
rootfs をマウントします。
# mkdir -p /mnt/rootfs # mount -t jffs2 /dev/mtdblock2 /mnt/rootfs/ # cd /mnt/rootfs/
必要に応じて編集します。(基本編のステップ7~ステップ9に対応する作業です。) 忘れずに /sbin/ccs-init と /etc/ccs/ccs-load-module と /lib/modules/2.6.15-sh/ 以下をコピーしてください。コピーを忘れると、 TOMOYO Linux の機能が有効になりません。その他には、 /etc/ccs/ ディレクトリ以下にポリシーを用意することが必要です。
rootfs の内容を固めます。
# cd # mkfs.jffs2 -p -o /mnt/cfcard/rootfs -r /mnt/rootfs/
rootfs をアンマウントします。
# umount /mnt/rootfs/
コンパクトフラッシュをアンマウントし、 CAT760 に挿入します。
# umount /mnt/cfcard/
ステップ8:フラッシュROMを書き換える
電源を入れてブートローダに進みます。
CAT BOOT for CAT760 Version: 1.07 Feb 27 2007 17:45:59 RTC clock :2010/05/04 17:44:10 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 Mac address = 00:03:82:03:03:C8 Boot size = 0x10000 Kernel size = 0x130000 >>
管理者モードに移ります。パスワードは silinux です。
admin
カーネルと rootfs をコピーします。
cp cf0:zImage rom:zImage cp cf0:rootfs rom:rootfs
デフォルトのコマンドラインを設定します。
setparam console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2
ブートします。
boot
以上で完成です。
うまくブートできなかった場合には、 boot のコマンドラインで boot console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2 ccsecurity=off のように指定することで TOMOYO Linux を無効にした状態で起動できます。
補足:工場出荷時の状態に戻す
ステップ6で取得したバックアップをリストアするには以下のように行います。
電源を入れてブートローダに進みます。
CAT BOOT for CAT760 Version: 1.07 Feb 27 2007 17:45:59 RTC clock :2010/05/04 17:44:10 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 Mac address = 00:03:82:03:03:C8 Boot size = 0x10000 Kernel size = 0x130000 >>
管理者モードに移ります。パスワードは silinux です。
admin
カーネルと rootfs をコピーします。
cp cf0:zImage-orig rom:zImage cp cf0:rootfs-orig rom:rootfs
コマンドラインを設定します。
setparam console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2