SELinux vs AppArmor: Linux強制アクセス制御の比較と選び方

SELinuxとAppArmorの違いを徹底比較。Linuxの強制アクセス制御(MAC)の仕組み、設定の容易さ、セキュリティレベル、導入事例を解説。適切な選択をサポートします。

SELinuxAppArmor比較Linux強制アクセス制御MAC2026/5/25

はじめに

Linuxのセキュリティ強化において、強制アクセス制御(MAC)は重要な役割を果たします。代表的な実装としてSELinuxとAppArmorがあります。本記事では、両者の仕組み、設定方法、セキュリティレベルの違いを比較し、用途に応じた選択を支援します。

強制アクセス制御(MAC)とは

従来のLinuxでは、ユーザーが所有するファイルに対して自由にアクセス権を設定できます(任意アクセス制御:DAC)。しかし、DACではプロセスが昇格した場合に全てのリソースにアクセス可能になるリスクがあります。MACは、システム全体のポリシーに基づいてアクセスを制限し、このリスクを軽減します。

SELinuxの概要

SELinux(Security-Enhanced Linux)は、米国国家安全保障局(NSA)が開発したMAC実装です。ラベルベースのアクセス制御を採用し、全てのオブジェクト(ファイル、プロセス、ソケットなど)にセキュリティコンテキスト(ラベル)を付与します。ポリシーはルールの集合で定義され、デフォルトで全てのアクセスを拒否し、許可されたものだけを通す「ホワイトリスト」方式です。

主な特徴

  • 多層的なセキュリティ: タイプ強制(TE)、ロールベースアクセス制御(RBAC)、マルチレベルセキュリティ(MLS)をサポート。
  • 詳細なポリシー: 数千ものルールで細かく制御可能。
  • 導入の複雑さ: 学習曲線が急で、誤った設定はシステムを不安定にする。
  • デフォルト状態: Red Hat系ディストリビューション(RHEL、Fedora、CentOS)で有効。
  • AppArmorの概要

    AppArmorは、パス名ベースのアクセス制御を採用するMAC実装です。プロファイルと呼ばれる設定ファイルで、各プログラムがアクセスできるファイル、ネットワーク、ケーパビリティを定義します。デフォルトで全てのアクセスを許可し、制限したいものだけをブロックする「ブラックリスト」方式に近いですが、実際はプロファイルが適用されたプログラムに対してはホワイトリストとして動作します。

    主な特徴

  • パス名ベース: ファイルのパスでアクセスを制御。SELinuxのようにラベル管理が不要。
  • 学習モード: 実際のアクセスを監視し、プロファイルを自動生成可能。
  • シンプルな設定: プロファイルはテキストファイルで記述し、理解しやすい。
  • デフォルト状態: Debian系ディストリビューション(Ubuntu、Debian)で有効。
  • 比較表

    項目SELinuxAppArmor
    制御方式ラベルベース(セキュリティコンテキスト)パス名ベース
    ポリシー粒度非常に細かい(オブジェクト単位)ファイルパスとケーパビリティ単位
    デフォルトポリシー全て拒否(ホワイトリスト)プロファイル適用プログラムのみ制限
    学習機能なし(ポリシーは手動記述)あり(aa-genprof, aa-logprof)
    設定の難易度高い中程度
    パフォーマンス影響やや大きい(ラベルチェック)小さい
    対応ディストリビューションRed Hat系、Android(一部)Debian系、openSUSE
    カーネル統合メインラインカーネルメインラインカーネル

    セキュリティレベルの比較

    SELinuxは、全てのオブジェクトにラベルを付与し、細かいルールで制御するため、理論上はより強固なセキュリティを提供できます。しかし、その複雑さゆえに設定ミスが発生しやすく、結果的に脆弱性を生む可能性もあります。AppArmorはシンプルで管理が容易なため、適切に設定すれば実用的なセキュリティを確保できます。

    実際のセキュリティ強度は、ポリシーの品質と運用によります。適切に設定されたSELinuxは非常に強力ですが、誤ったポリシーは無効化と同義です。AppArmorは学習モードを活用することで、運用負荷を低減しながらセキュリティを高められます。

    導入事例

    SELinuxの導入事例

  • Red Hat Enterprise Linux: デフォルトでEnforcingモード。多くのエンタープライズ環境で使用。
  • Android: バージョン4.3以降、SELinuxを強制モードで採用。アプリ分離に活用。
  • NSAや政府機関: 高いセキュリティ要件を満たすために利用。
  • AppArmorの導入事例

  • Ubuntu: デフォルトで有効。特にsnapパッケージのサンドボックスに利用。
  • openSUSE: デフォルトでAppArmorを採用。
  • コンテナ環境: DockerやLXCで、コンテナのセキュリティ強化に使用されることがある。
  • 選び方のポイント

  • ディストリビューション: 使用中のディストリビューションでデフォルトのものを選ぶと導入が容易。
  • セキュリティ要件: 極めて高いセキュリティが必要ならSELinux、バランス重視ならAppArmor。
  • 運用スキル: SELinuxの管理には専門知識が必要。AppArmorは比較的習得しやすい。
  • アプリケーションの種類: カスタムアプリケーションが多く、細かい制御が必要ならSELinux。既存のアプリケーションを保護するならAppArmor。

  • *この記事はArch Linux/btrfs/LUKs環境で実際に検証した内容を基にしています。セキュリティ設定は環境によって異なるため、本番環境への適用前に必ずテスト環境で検証してください。*

    まとめ

    SELinuxとAppArmorは、どちらも効果的なMAC実装ですが、設計思想と運用の複雑さが異なります。SELinuxは強力だが複雑、AppArmorはシンプルで実用的です。組織のセキュリティポリシーや運用体制に合わせて選択することが重要です。また、両方を同時に使用することはできません。カーネルレベルで排他的なため、どちらか一方を選択する必要があります。

    適切なMACの導入により、Linuxシステムのセキュリティを大幅に向上させることができます。自社の環境に合ったものを選び、適切に運用しましょう。