SELinux とは
SELinux (Security-Enhanced Linux) は、システムにアクセスできるユーザーを管理者がよりきめ細かく制御するための、Linux® システム向けセキュリティ・アーキテクチャです。もともとは、Linux Security Modules (LSM) を使用した Linux カーネルへの一連のパッチとして、アメリカ国家安全保障局 (NSA) によって開発されました。 SELinux は 2000 年にオープンソース・コミュニティにリリースされ、2003 年にアップストリームの Linux カーネルに統合されました。
セキュリティとコンプライアンスに対する Red Hat のアプローチ (動画の再生時間:2:21)
SELinux の仕組み
SELinux は、システム上のアプリケーション、プロセス、ファイルに対するアクセス制御を定義します。アクセス可能な範囲とそれ以外を指定した一連のルール (セキュリティポリシー) を使用することで、ポリシーベースのアクセス制御を強制します。
サブジェクト (アプリケーションやプロセス) が、オブジェクト (ファイルなど) にアクセスリクエストを行うと、SELinux はアクセス・ベクター・キャッシュ (AVC ) を使って検証します。AVC では、サブジェクトとオブジェクトの権限がキャッシュされています。
キャッシュされた権限に基づいてアクセス許可を決定できない場合、SELinux はセキュリティサーバーにリクエストを送ります。セキュリティサーバーは、アプリケーションやプロセスとファイルのセキュリティ・コンテキストを確認します。セキュリティ・コンテキストの確認では SELinux ポリシーデータベースを参照します。その後、許可の可否が決定されます。
許可が拒否された場合、「avc: denied」というメッセージが /var/log.messages に表示されます。
SELinux の設定方法
システムを保護するために SELinux を設定する方法はいくつかあります。最も一般的な方法は、ターゲットポリシーやマルチレベル・セキュリティ (MLS) です。
ターゲットポリシーはデフォルトのオプションで、さまざまなプロセス、タスク、サービスに対応します。MLS は非常に複雑であり、主に政府機関のみが使います。
システムのモードは、etc/sysconfig/selinux ファイルを見れば把握できます。ファイルの特定のセクションに、SELinux のモード (Permissive モード、Enforcing モード、無効) や読み込むポリシーが記述されています。
SELinux におけるラベル付けと Type Enforcement
SELinux において、Type Enforcement (TE) とラベル付けは最も重要な概念です。
SELinux はラベル付けシステムとして機能します。これにより、システム内のすべてのファイル、プロセス、ポートに SELinux ラベルが割り当てられることになります。ラベルとは、要素をグループ化する論理的な方法のことです。カーネルは、ブート中にラベルを管理します。
ラベルの形式は、user:role:type:level (level はオプション) になります。user、role、level は、MLS といった、SELinux のより高度な実装で使用されます。ラベルの種類は、ターゲットポリシーにとって最も重要です。
SELinux は、システム上で定義されたポリシーを強制するために、Type Enforcement (TE) を使用します。Type Enforcement は SELinux ポリシーの一部で、あるタイプで実行されているプロセスが、どのタイプでラベル付けされたファイルにアクセスできるかを定義します。
SELinux を有効にする方法
現在の環境で SELinux が無効になっている場合、/etc/selinux/config を編集して SELINUX=permissive と設定することで、SElinux を有効にすることができます。ただし SELinux を有効化した直後に Enforcing モードに切り替えることは避けてください。正常にラベル付けされず、システムが起動しなくなる危険性があるからです。
ルートディレクトリに .autorelabel という空のファイルを作成し、再起動することで、システムがファイルシステムを自動的に再度ラベル付けできます。システムにエラーが多すぎる場合は、正常に起動できるよう、Permissive モードで再起動する必要があります。再度のラベル付けが終わったら、/etc/selinux/config で SELinux を Enforcing モードに設定し、再起動するか、setenforce 1 を実行します。
コマンドラインに不慣れの場合、SELinux 管理用のグラフィックツールを利用できます。
SELinux は、Linux ディストリビューションに組み込まれているシステムにセキュリティレイヤーを追加します。万が一システムが危険にさらされた場合にも保護できるよう、常に有効にしておくべきです。
Red Hat のリソース
任意アクセス制御 (DAC) と強制アクセス制御 (MAC) の比較
従来、Linux と UNIX システムは DAC を使ってきました。SELinux は、Linux 用の MAC システムの一例です。
DAC では、ファイルとプロセスに所有者 (ユーザーやグループなど) が指定されます。ユーザーは自身が所有するファイルの権限を変更することができます。
DAC システムでは、root ユーザーは完全なアクセス権限を持つことになります。root 権限があれば、他のユーザーのファイルにアクセスするなど、制限なくシステムを操作できます。
対照的に SELinux のような MAC システムでは、管理目的でアクセスポリシーが設定されます。ホームディレクトリの DAC 設定が変更されても、他のユーザーやプロセスがディレクトリにアクセスできないように SELinux ポリシーが設定されていれば、システムの安全性が保たれます。
SELinux ポリシーは具体的に定義することが可能で、数多くのプロセスに対応することができます。SELinux を変更することで、ユーザー、ファイル、ディレクトリなどの間でアクセスを制限できます。
SELinux のエラーを解決する方法
SELinux でエラーが出る場合、大半は次の問題のいずれかに該当します。
- 正しくラベル付けされていない:ラベル付けが正しくない場合は、ツールを使って修正できます。
- ポリシーを修正する必要がある:変更が SELinux に反映されていないか、ポリシーを調整する必要があります。ポリシーはブール値やポリシーモジュールを使って修正できます。
- ポリシーにバグが含まれている:ポリシーにバグがあり、修正が必要なことがあります。
- システムが侵入された:SELinux は多くのシナリオでシステムを保護できますが、侵入される可能性がゼロになることはありません。侵入された疑いがある場合は、直ちに対処してください。
ブール値とは
SELinux の機能のオン/オフは、ブール値で指定します。対象となる項目は何百もありますが、その多くは事前に設定されています。設定済みのブール値については、getsebool -a を実行することで確認できます。
Red Hat が提供できるサポート
Red Hat Enterprise Linux は世界有数のオープンソース Linux プラットフォームです。リスクの緩和、セキュリティ構成とポリシーの適用、コンプライアンス戦略の最適化の実現を支援します。
Red Hat Enterprise Linux システムロールは、サポートされている Ansible® ロールのコレクションであり、一貫したワークフローを提供し、手動タスクの実行を最適化します。システムロールは、セキュリティのワークフローを自動化し、それらを一定期間、大規模に、また最小限のリソースで維持するのに役立ち、ガバナンスとコンプライアンス要件を最適化します。SELinux システムロールを使って、SELinux のデプロイメントと管理を自動化できます。これには以下が含まれます。
- SELinux で Enforcing または Permissive モードを有効にし、制御の一貫性を確保する。
- SELinux ポリシーのブール値、ファイルのコンテキスト、ポートおよびログインをカスタマイズして要件に対応する。
- システムロールを使用して、特定のファイルまたはディレクトリについてファイルのコンテキストを調整する。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。