SELinuxについて
目次
SELinux(Security-Enhanced Linux)の概要
SELinux(Security-Enhanced Linux)は、Linux カーネルに組み込まれたアクセス制御機構で、セキュリティを強化するために利用されます。従来のLinuxのアクセス制御方式であるDAC(Discretionary Access Control)に加え、より厳密で詳細な制御を提供することが特徴です。SELinuxは、Red Hat Enterprise Linux(RHEL)やCentOS、Fedoraなど多くのディストリビューションでデフォルトで有効化されています。
SELinuxの目的と役割
SELinuxの主な目的は、セキュリティホールや脆弱性が悪用された場合でも、被害を最小限に抑えることです。これを実現するために、システム内のプロセスやユーザーに対する権限を細かく管理します。
SELinuxの役割は、以下のようにまとめられます。
- プロセス間の隔離: 各プロセスやアプリケーションは、他のプロセスに影響を与えないように制限されます。
- 最低限の権限: 各プロセスに対して、必要最小限の権限しか与えないことで、セキュリティリスクを減少させます。
- 柔軟なポリシー設定: SELinuxポリシーによって、各プロセスやユーザーに対するアクセス制御をカスタマイズできます。
SELinuxの基本概念
SELinuxのアクセス制御は、ラベルとポリシーを使用して管理されます。ファイルやプロセスにはセキュリティコンテキスト(ラベル)が割り当てられており、ポリシーに基づいてアクセスが許可または禁止されます。
1. セキュリティコンテキスト
セキュリティコンテキストは、SELinuxがリソースを識別し、アクセス制御を行うためのラベルです。各ファイルやプロセス、ソケットには、ユーザー、ロール、タイプ、レベルといったセキュリティコンテキストが割り当てられます。
system_u:system_r:httpd_t:s0
このセキュリティコンテキストは、httpd
(Apache)プロセスに割り当てられたもので、system_u
(ユーザー)、system_r
(ロール)、httpd_t
(タイプ)、s0
(セキュリティレベル)という構成になっています。
2. ポリシー
ポリシーは、セキュリティコンテキストに基づいて、どのプロセスやユーザーがどのリソースにアクセスできるかを定義します。SELinuxのポリシーは非常に細かく設定でき、ファイルの読み取り、書き込み、実行権限などを制御することができます。
ポリシーには主に次の3つのタイプがあります:
- Targeted ポリシー: 特定のサービスやデーモンにのみSELinuxの制限が適用され、他の部分には適用されません。多くのディストリビューションでデフォルトのポリシーです。
- MLS(Multi-Level Security)ポリシー: セキュリティレベルに基づいた厳密なアクセス制御を提供します。主に高度なセキュリティが要求される環境で使用されます。
- Strict ポリシー: システム内のすべてのプロセスとリソースに対してSELinuxの制御を適用します。
SELinuxのモード
SELinuxには、システムの状況に応じて選択可能な3つの動作モードがあります。
- Enforcingモード: SELinuxポリシーに従って、許可されていないアクセスをブロックします。このモードが有効な場合、セキュリティコンテキストに違反する動作はすべて強制的に拒否されます。
- Permissiveモード: SELinuxポリシー違反をログに記録しますが、実際のアクセスは許可されます。このモードは、トラブルシューティングやポリシーの確認に利用されます。
- Disabledモード: SELinuxを完全に無効化します。このモードではSELinuxのセキュリティ機能は機能しません。
SELinuxの利点と注意点
利点:
- 高いセキュリティ: 標準的なDAC方式に加えて、強力なアクセス制御を提供し、システムのセキュリティを大幅に向上させます。
- 柔軟な管理: ポリシーを柔軟に設定できるため、システムごとに最適化されたセキュリティ対策が可能です。
- 最小限の権限付与: 各プロセスに最小限の権限を付与することで、セキュリティリスクを低減します。
注意点:
- 設定の難易度: SELinuxのポリシー設定やトラブルシューティングは、初心者にとって難解であることが多く、理解には時間がかかります。
- パフォーマンスへの影響: 特にシステムが大規模でポリシーが複雑な場合、SELinuxによるオーバーヘッドがシステムパフォーマンスに影響を与えることがあります。
まとめ
SELinuxは、Linuxシステムにおけるセキュリティを大幅に向上させる強力なアクセス制御機構です。柔軟で詳細なポリシーを定義することで、最小限の権限でシステムを保護し、潜在的な脆弱性からのリスクを軽減します。システム管理者は、SELinuxを理解し、適切に設定することで、より安全なシステム運用を実現できるでしょう。