SELinux vs AppArmor: Linux強制アクセス制御の比較と選び方
SELinuxとAppArmorの違いを徹底比較。Linuxの強制アクセス制御(MAC)の仕組み、設定の容易さ、セキュリティレベル、導入事例を解説。適切な選択をサポートします。
はじめに
Linuxのセキュリティ強化において、強制アクセス制御(MAC)は重要な役割を果たします。代表的な実装としてSELinuxとAppArmorがあります。本記事では、両者の仕組み、設定方法、セキュリティレベルの違いを比較し、用途に応じた選択を支援します。
強制アクセス制御(MAC)とは
従来のLinuxでは、ユーザーが所有するファイルに対して自由にアクセス権を設定できます(任意アクセス制御:DAC)。しかし、DACではプロセスが昇格した場合に全てのリソースにアクセス可能になるリスクがあります。MACは、システム全体のポリシーに基づいてアクセスを制限し、このリスクを軽減します。
SELinuxの概要
SELinux(Security-Enhanced Linux)は、米国国家安全保障局(NSA)が開発したMAC実装です。ラベルベースのアクセス制御を採用し、全てのオブジェクト(ファイル、プロセス、ソケットなど)にセキュリティコンテキスト(ラベル)を付与します。ポリシーはルールの集合で定義され、デフォルトで全てのアクセスを拒否し、許可されたものだけを通す「ホワイトリスト」方式です。
主な特徴
AppArmorの概要
AppArmorは、パス名ベースのアクセス制御を採用するMAC実装です。プロファイルと呼ばれる設定ファイルで、各プログラムがアクセスできるファイル、ネットワーク、ケーパビリティを定義します。デフォルトで全てのアクセスを許可し、制限したいものだけをブロックする「ブラックリスト」方式に近いですが、実際はプロファイルが適用されたプログラムに対してはホワイトリストとして動作します。
主な特徴
比較表
| 項目 | SELinux | AppArmor |
|---|---|---|
| 制御方式 | ラベルベース(セキュリティコンテキスト) | パス名ベース |
| ポリシー粒度 | 非常に細かい(オブジェクト単位) | ファイルパスとケーパビリティ単位 |
| デフォルトポリシー | 全て拒否(ホワイトリスト) | プロファイル適用プログラムのみ制限 |
| 学習機能 | なし(ポリシーは手動記述) | あり(aa-genprof, aa-logprof) |
| 設定の難易度 | 高い | 中程度 |
| パフォーマンス影響 | やや大きい(ラベルチェック) | 小さい |
| 対応ディストリビューション | Red Hat系、Android(一部) | Debian系、openSUSE |
| カーネル統合 | メインラインカーネル | メインラインカーネル |
セキュリティレベルの比較
SELinuxは、全てのオブジェクトにラベルを付与し、細かいルールで制御するため、理論上はより強固なセキュリティを提供できます。しかし、その複雑さゆえに設定ミスが発生しやすく、結果的に脆弱性を生む可能性もあります。AppArmorはシンプルで管理が容易なため、適切に設定すれば実用的なセキュリティを確保できます。
実際のセキュリティ強度は、ポリシーの品質と運用によります。適切に設定されたSELinuxは非常に強力ですが、誤ったポリシーは無効化と同義です。AppArmorは学習モードを活用することで、運用負荷を低減しながらセキュリティを高められます。
導入事例
SELinuxの導入事例
AppArmorの導入事例
選び方のポイント
*この記事はArch Linux/btrfs/LUKs環境で実際に検証した内容を基にしています。セキュリティ設定は環境によって異なるため、本番環境への適用前に必ずテスト環境で検証してください。*
まとめ
SELinuxとAppArmorは、どちらも効果的なMAC実装ですが、設計思想と運用の複雑さが異なります。SELinuxは強力だが複雑、AppArmorはシンプルで実用的です。組織のセキュリティポリシーや運用体制に合わせて選択することが重要です。また、両方を同時に使用することはできません。カーネルレベルで排他的なため、どちらか一方を選択する必要があります。
適切なMACの導入により、Linuxシステムのセキュリティを大幅に向上させることができます。自社の環境に合ったものを選び、適切に運用しましょう。