最近注目のSELinuxについて学ぶ同連載、今回は、SELinuxを理解する上で特に重要な概念であるTEについて、具体例を交えながら解説していく。
今回は、SELinuxモジュールのセキュリティチェック機能について説明しよう。SELinux独自のアクセス制御は、以下の3要素から構成されている。
・強制アクセス制御(MAC:Mandatory Access Control) ・最小特権 TE(Type Enforcement) ドメイン遷移 RBAC(Role Base Access Control) ・監査ログ
従来のLinuxのアクセス制御には、DAC(Discretionary Access Control:任意アクセス制御)が採用されている。DACは、リソースの所有者がアクセス権を制御できる仕組みで、所有者であればファイルなどのリソースに自由にアクセスできていた。
これに対しSELinuxでは、セキュリティ管理者が設定したアクセス制御ルールを、すべてのユーザー/プロセスに強制的に適用するMAC(Mandatory Access Control:強制アクセス制御)によるアクセス制御が行われる。SELinuxは、この強制アクセス制御と後述する最小特権によって、従来のLinuxにおけるrootの特権も制限できる。
最小特権とは、各プロセスに対してその用途に沿った権限のみを与え、必要以上の権限を与えないことを目的としている。最小特権は、プロセスがアクセスできるリソースを制限する「TE」(Type Enforcement)、プロセスの権限割り当てを制御する「ドメイン遷移」、ユーザーにアクセス権限を割り当てる「RBAC」(Role Base Access Control)から成り立っている。それぞれについて詳しく説明していこう。
TEとは、「プロセスがアクセスできるリソースを制限する」ための仕組みだ。プロセスには「ドメイン」、リソースには「タイプ」といったラベルをそれぞれ付与する。この「ドメイン」と「タイプ」の間で、「ドメイン(プロセス)がタイプ(リソース)に対して、どのような操作を実行できるのか」といった「アクセスベクタ」と呼ばれる操作の種類(アクセス権)を設定する(図1)。また、ファイルやソケットなどのリソースは、約30種におよぶオブジェクトクラスとして定義され、オブジェクトクラスごとに細かくアクセスベクタを設定することで、詳細なアクセス制御を行うことができる。
TEの概念はSELinuxを理解する上で特に重要なので、FTPを例にとって具体的に説明しよう。FTP通信は、外部コンピュータとの通信にTCPソケットを使用するのはご存じだろう。TCPソケットは、サービスを指定するためにアドレスとポートの組み合わせで通信を行う。これをTEのアクセス制御にあてはめると、FTPプロセスは、TCPソケット(リソース)に対し、アドレスやポートの使用が許可(アクセスベクタ)されている必要がある。図2は、ProFTPDを例にしたTEの概念図だ。図中のname_bindは、「ポート番号を使用」という意味のアクセスベクタで、ProFTPDプロセスがTCPソケットに対し、ポート番号の使用が許可されていることが分かる。このようにオブジェクトクラスごとに、設定できるアクセスベクタが用意されている。
プロセスには「ドメイン」というラベルを付与することは前述のとおりだが、このドメインの付与は、ドメイン遷移というSELinux独特の方法で実現している。通常、ドメインは親プロセスのドメインが子プロセスに継承される決まりだ。しかし、親プロセスのドメインをそのまま継承してしまっては不都合な場合もある。例えば、httpdプロセスはWebに関する権限があれば良いのだが、親プロセスであるカーネルのドメインが子プロセスであるhttpdに付与されれば、余計な権限をhttpdプロセスに与えてしまうことになる。これを解決するのがドメイン遷移だ。図3は、システム起動におけるドメイン遷移を示している。親プロセスから子プロセスを起動する際、別のドメインで動作していることが分かるだろう。このようにドメイン遷移を行うことで各プロセスに必要最小限の権限を付与することができる。
次ページではRBACについて詳しく解説していく。
Copyright © ITmedia, Inc. All Rights Reserved.