SELinuxとAppArmor:違いとどちらを使用すべきか?

SELinux(Security Enhanced Linuxの略)は、ファイルやプロセスへのアクセスを強化することで、Linuxディストリビューションのセキュリティを向上させるために使用されるLinuxカーネルセキュリティモジュールです。この目的のために使用されるもう1つの類似のLinuxカーネルセキュリティモジュールがAppArmorです。これらの2つのモジュールは、Linuxオペレーティングシステムのアクセス制御において重複する役割を持っているため、多くの関心が寄せられています。この記事では、SELinuxとAppArmorの違いを取り上げ、ユーザーが機能と使いやすさの比較を通じて、自分のニーズに最適なモジュールを判断できるようにします。
目次
- SELinuxとは?
- SELinuxの操作とコマンド
- AppArmorとは?
- SELinuxとAppArmorの使いやすさ
- よくある質問
さらに読む: より良いセキュリティのための5つのベストLinux-Libreディストリビューション
SELinuxとは?
SELinuxを使用してサーバーのセキュリティを強化することは、実際のシステムユーザーやロールに基づくDACスタイルのアクセスへの依存を排除します。その代わりに、各プロセスまたはシステムユーザーに対して3つの文字列コンテキストシステムを導入します。ユーザー名、ロール、およびドメインという3つの文字列は、システムアクセスに対するより多くの柔軟性と制御を可能にします。
プロセスは、SELinuxのポリシー設定を介して特定のドメイン内でのみ許可されます。唯一の例外は、runconコマンドを介して明示的に定義されたコンテキスト内でプロセスが起動される場合です。ただし、そのようなプロセスに対する相反するポリシーが既に構成されている場合、SELinuxは他のコンテキストへの移行を拒否することがあります。これにより、SELinuxはデフォルトで拒否する原則に基づいて動作します。任意のプロセスまたはユーザーは、アクセスする前にファイルまたはシステムリソースに対する明示的なアクセス設定を持つ必要があります。
SELinuxの操作とコマンド
SELinuxは、端末の一般的なユーティリティコマンドの拡張として、ファイルやプロセスのセキュリティコンテキストの表示を許可する-Zスイッチを提供します。psやlsといったコマンドは、このスイッチの恩恵を受け、構成エラーの迅速なデバッグや特定を行います。以下にlsコマンドのスクリーンショットを示します。
ls-Z
出力行の最初の部分はドメイン、2番目はオブジェクトの種類、3番目はSELinux構成におけるユーザー名です。このように、SELinuxは各ファイルとプロセスへのアクセスを完全に制御することができます。ファイルやディレクトリのコンテキストを操作するために以下のコマンドが使用されます。
| コマンド | 使用法 |
|---|---|
| chcon -t | 対象ファイルのコンテキストを変更 |
| chcon -R | 対象ディレクトリのコンテキストを変更(この変更は再帰的です) |
| restorecon -v | ファイルのコンテキストをデフォルトに戻す |
| restorecon -v -R | ディレクトリのコンテキストをデフォルトに戻す(この変更は再帰的です) |
| semanage fcontext -a -t | ディレクトリのデフォルトコンテキストをREGEXによって評価されたものに設定 |
例えば、「/srv/web」ディレクトリ内のすべてのファイルのコンテキストを「httpd_sys_content_t」に変更する必要がある場合、以下のコマンドを使用できます。
sudo semanage fcontext -a -t httpd_sys_content_t “/srv/web(/.*)”
スクリーンショットに表示されたこのコンテキストはすでに「/srv/web」ディレクトリに対して再帰的に定義されているため、SELinuxはユーザーに通知するメッセージを表示します。定義されていない場合、成功したsemanage操作は出力を表示しません。
システム管理者とユーザーは、setenforceコマンドを使用してSELinuxを有効化、無効化、または許可することができます。同様に、現在の強制状況を確認するには、以下のスクリーンショットに示すようにgetenforceコマンドを使用できます。

さらに読む: SCPを使用してLinuxでファイルを安全に転送する方法
AppArmorとは?
AppArmorは、Ubuntuディストリビューションを開発する親会社であるCanonicalが開発をサポートしています。AppArmorはSELinuxよりもシンプルで使いやすくなることを目指しており、そのプロファイルは「/etc/apparmor.d/」ディレクトリに作成されます。「/usr/bin/man」プロセスのAppArmorプロファイルは、以下のスクリーンショットに示されます。

AppArmorの操作とコマンド
Apparmorの状態を確認するには、aa-statusコマンドを使用します。以下にコマンドのサンプル出力を示します。

AppArmorプロファイルは、「/etc/apparmor.d/」のディレクトリ内容をリストすることで表示できます。以下に示します。

上記のプロファイルのリストから、ユーザーがusr.bin.manプロファイルを無効にしたい場合、以下のコマンドを使用できます。
sudo aa-complain /usr/bin/man無効にされたプロファイルは、メインのAppArmorプロファイルディレクトリの無効化サブディレクトリ内にあります。無効にされたプロファイルを再有効にするには、次のコマンドを使用します。
sudo aa-enforce /usr/bin/manSELinuxとAppArmorの使いやすさ
AppArmorは、SELinuxが各ファイルの文字列で作業するのに対し、ファイルシステム内のファイルパスで動作します。AppArmorの利点の一つは、読み取り、書き込み、ロックなどのファイル操作がSELinuxよりも簡単に設定できることです。一方、SELinuxはファイルアクセス制御のためのより多くの機能を提供しますが、それらの機能はシステムのずっと低いレベルで実装されています。
したがって、ユーザーはSELinuxを使用するためにmknod、ネットワークソケット、その他のシステム操作を学ぶ必要があります。システム管理者でない人にとっては、AppArmorの使い方を学ぶ方がはるかに簡単です。
AppArmorは、アクセス制御の違反をログ記録するために使用される学習モードも提供しています。このモードは、違反が発生した場合にアクセスを制限したり防止したりすることはなく、時間の経過とともにデータを収集し、記録されたアクセス違反に基づいてプログラムの動作に基づく別のAppArmorプロファイルを作成することを可能にします。SELinuxには、同様のモードは存在しません。
さらに読む: Linuxホームサーバーを安全に保つ方法
よくある質問
SELinuxとAppArmorがプリインストールされているLinuxディストリビューションは?
RedHat傘下のすべてのLinuxディストリビューションには、RHEL、CentOS、Fedoraなど、SELinuxがプリインストールされているか、セットアップされています。AppArmorは、Debian、Ubuntu、その派生ディストリビューション、SUSE Enterprise ServerおよびOpenSUSEディストリビューションにプリインストールされています。
新しいLinuxユーザーに最適なセキュリティモジュールは?
ほとんどの主要なLinuxディストリビューションは、デフォルトでシステムにセキュリティモジュールのいずれかをインストールしています。したがって、新しいLinuxユーザーがボックスから出てきたときに、セキュリティモジュールがないことは考えにくいです。SELinuxとAppArmorの機能と使いやすさの比較は、オペレーティングシステムに対してより細かい制御を求めるパワーユーザーやシステム管理者にはSELinuxが最適であり、他のすべての人にはAppArmorがより良い選択であることを示しています。
SELinuxとAppArmorはファイアウォール、アンチウイルス、その他のユーザーまたはデータ安全ソフトウェアの代替品ですか?
SELinuxとAppArmorは、システムのセキュリティとデータの整合性に対するアンチウイルスや適切に設定されたファイアウォールの代替ではありません。したがって、より良いデータ保護のために、システムにアンチウイルスプログラムを追加することをお勧めします。
画像のクレジット:AppArmorのウィキページおよびSELinuxのウィキページ。すべてのスクリーンショットはZeeman Memonによるものです。