SELinuxの歴史
SELinux(Security-Enhanced Linux)は、米国国家安全保障局(NSA)を中心に開発されたオープンソースのセキュアOSです。
2000年にはじめて公開され、当初はLinux Kernel 2.2用のカーネルパッチ方式でした。しかし、Linux Kernel 2.6でLSM(第2回を参照)が採用されたことにより、Linux Kernel 2.6用からLSM方式となり、標準添付されるようになりました。その後、カーネルパッチ方式であったLinux Kernel 2.4用のSELinuxは開発が停止し、現在はLinux Kernel 2.6用の開発のみが継続されています。
SELinuxの概要
それでは、SELinuxの概要を説明します。SELinuxの機能の基本的な考え方を理解していただき、その長所、短所をみてみましょう。
SELinuxの機能と特徴
SELinuxは、「プロセスに対するアクセス制御」と「ユーザに対するアクセス制御」を実現しています。前者はTE(Type Enforcement)とドメイン遷移と呼ばれるもので実現され、後者はRBAC(Role Based Access Control)と呼ばれるもので実現されています。また、監査ログ機能を備え、システムコールレベルでのログ取得が可能になっています。
アクセス制御設定の基本的な考え方
SELinuxでは、プロセスにドメインと呼ばれるラベルを、リソースにタイプと 呼ばれるラベルを付けます。WebサーバアプリケーションであるApacheを例にすると、図1のように、httpdプロセスに「httpd_t」という ドメインを、コンテンツを置く/var/www/ディレクトリ以下に「httpd_sys_content_t」というタイプを付けるようなものです。

図1:アクセス制御設定の基本
そして、ドメインとタイプの間にアクセスベクタと 呼ばれるパーミッションを設定します。図1では、読み込みのための「read」というアクセスベクタを設定しています。このような設定を行うことで、やっ とhttpdプロセスがコンテンツにreadのアクセスができるようになります。仮に、書き込みも必要であれば、「write」というアクセスベクタを追 加して設定する必要があります。
詳細なアクセス制御
SELinuxでは、ファイルやディレクトリだけでなく、通信ソケットやメモリなど、約30種類のリソースに対してアクセス制御が可能です。当然リソースの種類によって、設定するアクセスベクタの種類や数が異なります。
ファイルやディレクトリに対しては、readやwriteだけでなく、追記のためのappendや名前変更のためのrenameなど、約20種類のアクセスベクタが存在します。TCP通信ソケットの場合は、bindなど約30種類のアクセスベクタが存在します。
このため、リソースごとに詳細なアクセス制御が可能となっています。
SELinux設定の特徴
SELinuxは、設定されてないアクセスはすべて拒否する仕様で、一つひとつ許可設定を与えていくことでアクセス制御設定を行います。このため、アクセス制御設定をしていないアプリケーションは、動作しない、もしくは、動作しても何もできない状態となり、安全サイドに倒れるようになっています。
SELinuxの長所と短所
SELinuxの長所は、権限分割の粒度が細かく、一つひとつ許可設定を与えるため、非常にセキュアなシステム構築が可能な点です。
しかし、あるアプリケーションを動作させるためには、多種多様なリソースに対し、多数の許可設定を行う必要があります。設定にはマクロなどが用意さ れていますが、ライブラリファイルへのアクセスなど、通常はあまり考慮しない動作についても設定を行う必要があり、設定は非常に大変です。