第1章 はじめに

Security Enhanced Linux (SELinux) は、新たにシステムセキュリティーの層を提供します。SELinux は、基本的に May <subject> do <action> to <object> の形式の問い (たとえば「May a web server access files in users' home directories? (Web サーバーは、ユーザーのホームディレクトリーのファイルにアクセスできますか?)」) に答えていきます。
ユーザー、グループ、およびその他のアクセス権に基づいた標準のアクセスポリシーは Discretionary Access Control (DAC) として知られており、システム管理者が、包括的で詳細なセキュリティーポリシー (たとえば、特定のアプリケーションではログファイルの表示だけを許可し、その他のアプリケーションでは、ログファイルに新しいデータを追加するのを許可するなど) を作成することはできません。
SELinux は、Mandatory Access Control (MAC) を実装します。それぞれのプロセスおよびシステムリソースには、 SELinux コンテキスト と呼ばれる特別なセキュリティーラベルがあります。SELinux コンテキストは SELinux ラベル として参照されることがありますが、システムレベルの詳細を抽象化し、エンティティーのセキュリティープロパティーに焦点を当てた識別子です。これは、SELinux ポリシーでオプションを参照する一貫性のある方法を提供し、他の識別方法では解消できないあいまいさ (たとえば、ファイルがバインドマウントを利用したシステムで複数の有効なパスを持つことが可能) を排除します。
SELinux ポリシーは、プロセスが互いに対話する方法を定義する一連のルールにこのコンテキストを使用します。デフォルトでは、最初にルールが明示的にアクセスを許可し、その後ポリシーが任意の対話を許可します。

注記

SELinux ポリシールールが DAC ルールの後に確認されている点に注意してください。DAC ルールがアクセスを拒否すると、SELinux ポリシールールが使用されません。これは、従来の DAC ルールがそのアクセスを拒否すると、SELinux 拒否がログに記録されないということを示しています。
SELinux コンテキストには、複数のフィールド (ユーザー、ロール、タイプ、セキュリティーレベル) があります。SELinux ポリシーではおそらく SELinux のタイプ情報が最も重要です。プロセスとシステムリソースとの間で許可される対話を定義する最も一般的なポリシールールが、完全な SELinux コンテキストではなく、SELinux のタイプを使用するためです。SELinux のタイプは、通常 _t で終わります。たとえば、Web サーバーのタイプ名は、httpd_t です。通常は /var/www/html/ にあるファイルとディレクトリーのタイプコンテキストは、httpd_sys_content_t です。通常 /tmp および /var/tmp/ にあるファイルおよびディレクトリーに対するタイプコンテキストは tmp_t です。Web サーバーポートのタイプコンテキストは http_port_t です。
たとえば、通常 /var/www/html/ や、その他の Web サーバーディレクトリー (httpd_sys_content_t) にあるコンテキストでファイルおよびディレクトリーにアクセスするように、Apache (httpd_t として実行する Web サーバープロセス) を許可するポリシールールがあります。通常、/tmp および /var/tmp/ で見つかるファイルに対するポリシーには許可ルールがないため、アクセスは許可されません。SELinux を使用すれば、Apache が危険にさらされ、悪意のあるスクリプトがアクセスを得た場合でも、/tmp ディレクトリーにアクセスすることはできなくなります。
SELinux は、httpd_t として実行している Apache プロセスが /var/www/html/ ディレクトリーにアクセスするのは許可しますが、同じ Apache プロセスが /data/mysql/ ディレクトリーにアクセスするのは拒否します。これは、httpd_t タイプコンテキストと mysqld_db_t タイプコンテキストに許可ルールがないのが原因です。一方、mysqld_t として実行する MariaDB プロセスは /data/mysql/ ディレクトリーにアクセスできますが、SELinux により、mysqld_t タイプを持つプロセスが、httpd_sys_content_t とラベルが付いた /var/www/html/ ディレクトリーにアクセスするのは拒否されます。

図1.1 SELinux は、httpd_t として実行している Apache プロセスが /var/www/html/ ディレクトリーにアクセスするのは許可しますが、同じ Apache プロセスが /data/mysql/ ディレクトリーにアクセスするのは拒否します。これは、httpd_t タイプコンテキストと mysqld_db_t タイプコンテキストに許可ルールがないのが原因です。一方、mysqld_t として実行する MariaDB プロセスは /data/mysql/ ディレクトリーにアクセスできますが、SELinux により、mysqld_t タイプを持つプロセスが、httpd_sys_content_t とラベルが付いた /var/www/html/ ディレクトリーにアクセスするのは拒否されます。

関連情報

詳細は、以下のドキュメントを参照してください。
  • man ページの selinux(8)apropos selinux コマンドで一覧表示される man ページ。
  • selinux-policy-doc パッケージがインストールされている場合に、man -k _selinux コマンドで一覧表示される man ページ。詳細は、「「サービスの man ページ」」を参照してください。

1.1. SELinux を実行する利点

SELinux は、次のような利点を提供します。
  • プロセスとファイルにはすべてラベルが付いています。SELinux ポリシーにより、プロセスがファイルと対話する方法と、プロセスが互いに対話する方法が定義されます。アクセスは、それを特別に許可する SELinux ポリシールールが存在する場合に限り許可されます。
  • アクセス制御がより詳細になりました。SELinux のアクセスは、ユーザーの裁量と、Linux のユーザー ID およびグループ ID に基づいて制御される従来の UNIX アクセス権だけでなく、SELinux のユーザー、ロール、タイプ、(および必要に応じてセキュリティーレベル) などの、入手可能なすべての情報に基づいて決定されます。
  • SELinux ポリシーは管理者により定義され、システム全体に適用されます。
  • 権限昇格攻撃に対する軽減策が向上しました。プロセスはドメインで実行するため、互いに分離しています。SELinux ポリシールールは、プロセスがどのようにファイルやその他のプロセスにアクセスするかを定義します。プロセスへのアクセスが不正に行われても、攻撃者は、そのプロセスの通常の機能と、そのプロセスがアクセスするように設定されているファイルにしかアクセスできません。たとえば、Apache HTTP Server へのアクセスが不正に行われても、そのアクセスを許可する特別な SELinux ポリシールールが追加されたり、設定された場合を除き、ユーザーのホームディレクトリーにあるファイルを読み込むプロセスを攻撃者が利用することはできません。
  • SELinux は、データの機密性と完全性、並びに信頼されていない入力からの保護プロセスを強化するのに使用できます。
ただし、SELinux は以下の機能とは異なります。
  • ウイルス対策ソフトウェア
  • パスワード、ファイアウォールなどのセキュリティーシステムの代替
  • 一体型のセキュリティーソリューション
SELinux は、既存のセキュリティーソリューションを強化するために作られており、代わりに使用されるものではありません。SELinux を実行している場合でも、ソフトウェアを最新の状態にする、推測が困難なパスワードを使用する、ファイアウォールを使用するなど、優れたセキュリティー対策を続けることが重要です。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。