SELinuxで組み込み機器のセキュリティを高める(前編) ―― SELinuxの概要
● enforcingモードとpermissiveモード
ポリシの設定を便利に行うために,SELinuxには二つのモードが用意されています.一つ目のモードがenforcingモードです.これはSELinuxのアクセス制御が有効になったモードで,通常の動作モードです.二つ目がpermissiveモードです.主にポリシの設定や問題の切り分けに使います.SELinuxによって拒否されるアクセスがあった場合でも,ログだけを残し,アクセスを通すモードです.permissiveモードでアプリケーションを動作させると,通常のLinuxと同じようにアプリケーションは動作します.しかしながら,どんなアクセスがSELinuxによって拒否されるかというログを取ることができます.この拒否されるアクセスを許可する設定を記述しておけば,enforcingモードでもアプリケーションは動作するはずです.
4 SELinuxの実装
次回の記事では,SELinuxを実際に組み込み機器に移植します.移植項目が何を意味するのかを知るためには,SELinuxの実装をある程度知っておく必要があります.SELinuxの実装を一枚の絵で表すと,図8のようになります.SELinuxはLinuxカーネル内の四つの要素から成り立っています.つまり,(1)LSM,(2)SELinuxモジュール,(3)ファイル・システム内部のxattr,(4)auditサブシステムです.以下では,これら4要素の働きを見ていきます.
図8 SELinuxの実装
● LSM
SELinuxモジュールは,LSM(Linux Security Modules)という要素から呼び出されています.LSMとSELinuxの関係を図9に示します.動作は以下のとおりです.
図9 SELinuxはLSMを使って実装されている
(1) プロセスが,ファイルなどのリソースにアクセスする際,カーネルに対してアクセス要求を出す.
(2) 通常のLinuxのパーミッション・チェックが行われる.
(3) LSMの関数に処理が移る.LSMとは,セキュリティ用途のために用意された関数ポインタ群のこと.カーネルのコード内の要所要所にLSMの関数ポインタが入っている.
(4) SELinuxを有効にしている場合は,LSMの関数ポインタが,SELinuxのセキュリティ・チェックを指している.
(5) SELinuxによるアクセス権限のチェックが行われる.
(6),(7) チェックが通った場合だけアクセスを通す.
LSMでは,4)で説明した関数ポインタの指す先を変えることにより,SELinux以外のセキュリティ・モジュールを選択できるようになっています.これは,ユーザにSELinux以外の選択肢を残すためです.あるセキュリティ・モジュールがLinuxカーネル本体に取り込まれるためには,LSMに準拠しておく必要があります.SELinuxもLSMに準拠して実装されているおかげで,Linuxカーネル本体に取り込まれているのです.