SELinuxで組み込み機器のセキュリティを高める(後編) ―― 組み込み機器にSELinuxを適用する
今回は移植のために,表2のようなバージョンのソース・ファイルをダウンロードします.なお,これらのファイルは,http://sourceforge.jp/projects/selpe/files/の「CAT 760 SELinux用各種ソース・ファイル」からもダウンロード可能です.
ソフトウェア | バージョン | ソース・コードの入手先 |
Linuxカーネル | 2.6.24 | ターゲット機器の製造元.CAT760の場合は,http://sourceforge.jp/projects/selpe/files/よりダウンロード可能 |
libselinux | 2.0.35 | NSAのWeb サイトhttp://www.nsa.gov/selinux/code/download-trunk.cfm |
libsepol | 2.0.11 | |
BusyBox | 1.9.1 | BusyBoxプロジェクトのWebサイト http://www.busybox.net/ |
ダウンロードしたら,作業ディレクトリにそれぞれ展開しておきます.
また,CAT760ボードで作業する場合,確実に本記事の例を試すためには,ルート・ファイル・システムを,筆者がSELinuxの動作を確認したものと入れ替えることをお奨めします.ルート・ファイル・システムのイメージは,http://sourceforge.jp/projects/selpe/files/よりダウンロードします.ファイル名はrootfs_selinuxtest.binです.なお,こちらのルート・ファイル・システムには,後述するBusyBoxとlibselinuxが既に移植済みです.イメージをFATでフォーマットしたCompactFlashカードに保存します.ボードにCompactFlashカードを差し込み,CAT760のブート・ローダより以下のコマンドを入力します.
>> admin <パスワード入力(初期設定はsilinux)> #> cp cf0:rootfs_selinuxtest.bin rom: rootfs
● カーネルのコンパイル
さて,カーネル,libselinux,libsepol,BusyBoxを順番にクロス・コンパイルしていきます.まずは,カーネルです.コンパイル方法は通常のクロス・コンパイルと同じです.
筆者の環境では,次のコマンドでカーネルのコンパイル・オプションを設定します.
$ make menuconfig ARCH=sh
表3のようなSELinuxに関係するオプションをONにします.
大項目 | 小項目 | 意 味 |
General Setup | Auditing Support | Auditのサポート |
Security Options | Enable different security models | LSMのサポート |
Socket and Networking Security Hooks | LSMのうちネットワークに関係した部分 | |
NSA SELinux Support | SELinuxのサポート | |
NSA SELinux Development Support | SELinuxのモード切り替えサポート | |
File Systems | Ext2 extended attributes | xattrのサポート. Security LabelsはxattrのうちSELinuxに関するもの |
Ext2 Security Labels | ||
Ext3 extended attributes | ||
Ext3 Security Labels | ||
JFFS2 xattr Support | ||
JFFS2 Security Labels |
クロス・コンパイルを行います.筆者の環境では,クロス・コンパイラの実行ファイル名は「sh4-linux-gnu-gcc」です.
$ make CROSS_COMPILE=sh4-linux-gnu- $ make CROSS_COMPILE=sh4-linux-gnu- modules
カーネル・モジュールを作業ディレクトリの下のinstallというディレクトリに集めます.
$ mkdir install $ make CROSS_COMPILE=sh4-linux-gnu- INSTALL_MOD_PATH=./install modules_ install
生成されたzImageファイルおよびカーネル・モジュール・ファイルを,ターゲット・ボードに転送します.カーネル・モジュールについては,install/lib以下をターゲット・ボードの/libディレクトリの下に転送します.zImageファイルの転送方法については,ターゲット・ボードによって異なるので,各ボードの説明書を参考にしてください.