SELinuxで組み込み機器のセキュリティを高める(後編) ―― 組み込み機器にSELinuxを適用する
● システム起動時のSELinux有効化
ここまでのSELinuxを有効にする作業を,システム起動時に自動的に行われるようにする必要があります.
selinuxfsのマウントおよびload_policyについては,CAT760の場合は,initプログラム(/sbin/init)の中で行われます.ほかのボードの場合,init(sysVinitというパッケージに含まれる)のソースを検索し,「selinux」の文字があれば対応済みです.また,BusyBoxに含まれるinitもSELinuxに対応しています.
initがSELinuxに対応していない場合は,initを移植してSELinux対応にするか注3,システム起動スクリプトの中から起動する必要があります.システム起動スクリプトから起動するには,スクリプトの中に,
mount -t selinuxfs selinuxfs /selinux load_policy
の2行を加えます.この時点で,procファイル・システムがマウントされる前にこれらのコマンドを使うとload_policyでエラーになるので気を付けます.
注3;initのSELinux対応のパッチを入手するには,Fedora projectのサイトから「Sysvinit」のsrc.rpmパッケージを入手し,インストールする.この作業を行うと,SOURCESディレクトリに「sysvinit-selinux.patch」という名前でパッチが格納される.
● システム起動時のタイプ付与設定
先ほど,システムを構築する際に,タイプ付与設定を行いました.ext2やjffs2上のファイル・システムの場合は,タイプの情報がxattrに保存されているため,システム起動時にタイプ付与をやり直す必要はありません.一方,組み込みでは/var以下や/dev以下をtmpfsファイル・システム(RAM上のファイル・システム)でマウントしていることが多くあります.tmpfsもxattrにタイプの情報を保存できるのですが,電源を落とすとタイプ情報がなくなってしまうため,システム起動時にタイプ付与を行う必要があります.このようなファイルに対しては,システム起動スクリプトの中で,restoreconコマンドを使ってタイプを付与します.
CAT760ボードの場合は,/var以下にtmpfsがマウントされており,/varにrestoreconを使う必要があります.システム起動スクリプトは,/etc/rcS.d/に格納されています.S01glibc.sh,S02mountkernfs.shというファイルがあり,ファイル名の順番にスクリプトが起動していきます.一通りディレクトリがマウントされた後に,restoreconコマンドが起動するようにします.今回のCAT760の場合は,/etc/rcS.d/S05restoreconを作成し,その内容を以下のようにすればOKです.
/sbin/restorecon /var -R
● 動作確認
システムを起動してコンソールからログインし,ここまでが正しく設定されているかどうかを確認します.psコマンドの-Zオプションでドメインを確認します.
# ps -Z PID Context Stat Command 1 system_u:system_r:init_t S init [2] 2 system_u:system_r:kernel_t SW< [kthreadd] ...
init_t,kernel_tのように,プロセスにドメインが付与されていれば,うまくいっています.