1. はじめに SELinux が Linux にもたらす主な価値は、柔軟で構成可能な MAC メカニズムを提供することです。 Security-Enhanced Linux (SELinux) は、次の 2 つの部分で構成されています。 1) カーネル SELinux モジュール (/kernel/security/selinux) 2) ユーザーモードツール SELinux は、LSM (Linux セキュリティ モジュール) フレームワークを通じて Linux カーネル 2.6.x に統合されたセキュリティ アーキテクチャです。これは、NSA (米国国家安全保障局) と SELinux コミュニティの共同プロジェクトです。 SELinux は柔軟な強制アクセス制御 (MAC) システムを提供し、Linux カーネルに組み込まれています。 SELinux は、システム内の各ユーザー、プロセス、アプリケーション、およびファイルのアクセス権限と変更権限を定義し、セキュリティ ポリシーを使用してこれらのエンティティ (ユーザー、プロセス、アプリケーション、およびファイル) 間のやり取りを制御します。セキュリティ ポリシーは、厳密なチェック方法と緩いチェック方法を指定します。 SELinux はシステム ユーザーに対して透過的であり、システム管理者のみがサーバー内で厳格なポリシーを策定する方法を検討する必要があります。ポリシーは必要に応じて厳しくしたり緩めたりすることができます。 サブジェクトは、[標準 Linux アクセス制御] と [SELinux アクセス制御] の両方が満たされている場合にのみオブジェクトにアクセスできます。 1.1 DACとMAC(ルートユーザー)の主な違い Security Enhanced Linux (SELinux) は、もともと NSA (国家安全保障局) によって開始され、アプリケーションが必要な最小限の権限で実行できるようにするコア コンポーネントとユーザー ツールのセットとして Linux システムに追加されました。改変されていない Linux システムでは、ユーザーが自分でより高い権限を要求できる任意アクセス制御が使用されるため、マルウェアはほぼすべてのファイルにアクセスでき、ルート権限を与えれば何でも実行できます。 SELinux にはルートの概念はありません。セキュリティ ポリシーは管理者によって定義され、ソフトウェアによって置き換えることはできません。つまり、潜在的なマルウェアが引き起こす可能性のある被害を最小限に抑えることができます。一般的に言えば、データ セキュリティを非常に重視するエンタープライズ レベルのユーザーのみが SELinux を使用します。 オペレーティング システムには、任意アクセス制御 (DAC) と強制アクセス制御 (MAC) の 2 種類のアクセス制御があります。標準的な Linux セキュリティは DAC ですが、SELinux は Linux に柔軟で構成可能な MAC を追加します。 すべての DAC メカニズムには共通の弱点があります。それは、自然人とコンピュータ プログラム間の最も基本的な違いを認識できないことです。簡単に言えば、ユーザーにアクセス権限が与えられているということは、プログラムにもアクセス権限が与えられているということです。プログラムにアクセス権限が与えられている場合は、悪意のあるプログラムにも同じアクセス権が与えられます。 DAC の根本的な弱点は、対象がさまざまなマルウェア攻撃に対して脆弱であることです。MAC はこれらの攻撃を回避する方法です。ほとんどの MAC 機能は、多層セキュリティ モデルを形成します。 SELinux は、Type Enforcement と呼ばれるより柔軟な MAC フォームと、必須ではないマルチレベル セキュリティ フォームを実装します。 Android 4.2 では、SELinux はオプション機能であり、Google はルート権限やその他の機能を直接キャンセルしませんでした。これは、エンタープライズレベルのユーザーやプライバシーデータを重視するユーザー向けに提供されるオプションです。一般消費者はこれを完全にオフにすることができます。 2. SELinuxの動作メカニズム SELinux の決定プロセスを次の図に示します。 サブジェクト (アプリケーションなど) がオブジェクト (ファイルなど) にアクセスしようとすると、カーネル内のポリシー適用サーバーは、サブジェクトとオブジェクトの権限がキャッシュされている AVC (アクセス ベクター キャッシュ) をチェックします。 AVC のデータに基づいて決定できない場合は、セキュリティ サーバーに要求が送信され、セキュリティ サーバーはマトリックス内の「アプリケーション + ファイル」のセキュリティ環境を検索します。クエリ結果に基づいてアクセスが許可または拒否され、拒否メッセージの詳細は /var/log/messages に保存されます。 3. SELinux疑似ファイルシステム /selinux/ 疑似ファイルシステムはカーネルサブシステムでよく使用されるコマンドであり、/proc/ 疑似ファイルシステムに似ています。システム管理者およびユーザーはこの部分を操作する必要はありません。 /selinux/ ディレクトリの例は次のとおりです。 -rw-rw-rw- 1 ルート ルート 0 9月22日 13:14 アクセス dr-xr-xr-x 1 ルート ルート 0 9月22日 13:14 ブール値 --w------ 1 ルート ルート 0 9月22日 13:14 commit_pending_bools -rw-rw-rw- 1 ルート ルート 0 9月22日 13:14 コンテキスト -rw-rw-rw- 1 ルート ルート 0 9月22日 13:14 作成 --w------ 1 root root 0 9月22日 13:14 無効 -rw-r--r-- 1 ルート ルート 0 9月22日 13:14 強制 -rw------ 1 ルート ルート 0 9月22日 13:14 ロード -r--r--r-- 1 ルート ルート 0 9月22日 13:14 mls -r--r--r-- 1 ルート ルート 0 9月22日 13:14 policyvers -rw-rw-rw- 1 ルート ルート 0 9月22日 13:14 ラベル変更 -rw-rw-rw- 1 ルート ルート 0 9月22日 13:14 ユーザー たとえば、cat の強制値は次のようになります。 1: 強制モード 0: 許可モード 4. SELinux 設定ファイル SELinux 構成ファイルまたはポリシー ファイルは、/etc/ ディレクトリにあります。 4.1 /etc/sysconfig/selinux 設定ファイル /etc/sysconfig/selinux はシンボリックリンクです。実際の設定ファイルは /etc/selinux/config です。 SELinux を設定するには 2 つの方法があります。 1) 設定ツールを使用する: セキュリティ レベル設定ツール (system-config-selinux) 2) 設定ファイル (/etc/sysconfig/selinux) を編集します。 1) SELinuxを有効または無効にする 2) システムが実行するポリシーを設定する 3) システムがポリシーを実行する方法を設定する 4.2 設定ファイルのオプション 4.2.1 カーネル SELINUX=enforcing|permissive|disabled — SELinuxの高度な状態を定義します
4.2.2 SELINUXTYPE(セキュリティポリシー) SELINUXTYPE=targeted|strict — 適用するSELinuxポリシーを指定します 対象 — 対象となるネットワークデーモンのみが保護されます。各デーモンがポリシーを実行するかどうかは、system-config-selinux を通じて設定できます。一般的なネットワーク サービスを保護します。これは SELinux のデフォルト値です。 次のツールを使用して、各デーモンのブール値を設定できます。 1) getsebool -a: すべてのSELinuxブール値を一覧表示する 2) setsebool: SELinux ブール値を設定します。例: setsebool -P dhcpd_disable_trans=0。-P は、再起動後もブール値が有効であることを意味します。
4.2.3 SETLOCALDEFS SETLOCALDEFS=0|1 — ローカル定義の設定方法を制御します (ユーザーとブール値)。
4.3 /etc/selinux/ ディレクトリ /etc/selinux/ は、すべてのポリシー ファイルと主要な構成ファイルが保存されるディレクトリです。例は以下のとおりです。 -rw-r--r-- 1 ルート ルート 448 9月 22 17:34 config drwxr-xr-x 5 ルート ルート 4096 9月22日 17:27 厳密 drwxr-xr-x 5 ルート ルート 4096 9月22日 17:28 対象 5. SELinuxツール 1) /usr/sbin/setenforce — SELinux の動作モードを変更します。例は次のとおりです。
SELinuxを無効にするには、設定ファイル/etc/selinux/configまたは/etc/sysconfig/selinuxを変更します。 2) /usr/sbin/sestatus -v — 以下に示すように、詳細なシステムステータスを表示します。 SELinux ステータス: 有効 SELinuxfs マウント: /selinux 現在のモード: 強制 設定ファイルからのモード: 強制 ポリシーバージョン: 21 設定ファイルからのポリシー: 対象 プロセスコンテキスト: 現在のコンテキスト: user_u:system_r:unconfined_t:s0 初期化コンテキスト: system_u:system_r:init_t:s0 /sbin/mingetty システム_u:システム_r:getty_t:s0 3) /usr/bin/newrole — 新しいコンテキストまたはロールで新しいシェルを実行します 4) /sbin/restorecon — 適切なファイルまたはセキュリティ環境に拡張属性をマークして、1つまたは複数のファイルのセキュリティ環境を設定します。 5) /sbin/fixfiles — ファイルシステム内のセキュリティ環境データベースをチェックまたは修正する 6) getsebool — getsebool -a: すべてのブール値を表示 7) setsebool — パラメータ -P、永続的な設定 8) chconはファイルとディレクトリのセキュリティコンテキストを変更します chcon –u [ユーザー] 6. 型強制セキュリティコンテキスト セキュリティ コンテキストは、シンプルで一貫性のあるアクセス制御属性です。SELinux では、タイプ識別子がセキュリティ コンテキストの主な構成要素です。歴史的な理由から、プロセスのタイプはドメインと呼ばれることがよくあります。「ドメイン」と「ドメイン タイプ」は同じ意味です。厳密に区別したり、ドメインという用語の使用を避けたりする必要はありません。通常、[ドメイン]、[ドメイン タイプ]、[サブジェクト タイプ]、[プロセス タイプ] は同義語、つまりセキュリティ コンテキストではすべて「タイプ」であると考えられます。 SELinux は、オブジェクトとサブジェクトのセキュリティ コンテキストを表示するための -Z オプションを追加することで、システム内の多くのコマンドを変更します。 1) システムは、PAM サブシステムの pam_selinux.so モジュールに基づいて、ログオン ユーザーが実行するプログラムのセキュリティ コンテキストを設定します。
3) id -Z シェルのセキュリティ コンテキストを表示します。 4) ps -Z プロセスのセキュリティ コンテキストを確認します。 5) ls -Z ファイルとディレクトリのセキュリティ コンテキストを確認します。 6.1 セキュリティコンテキストフォーマット すべてのオペレーティング システムのアクセス制御は、関連付けられたオブジェクトとサブジェクトに対する何らかのタイプのアクセス制御属性に基づいています。 SELinux では、アクセス制御属性はセキュリティ コンテキストと呼ばれます。すべてのオブジェクト (ファイル、プロセス間通信チャネル、ソケット、ネットワーク ホストなど) とサブジェクト (プロセス) には、セキュリティ コンテキストが関連付けられています。セキュリティ コンテキストは、ユーザー、ロール、およびタイプ識別子の 3 つの部分で構成されます。セキュリティ コンテキストは通常、次の形式で指定または表示されます。 セキュリティ コンテキスト内のユーザーおよびロール識別子は、強制に対するわずかな制約を除き、タイプ強制アクセス制御ポリシーにほとんど影響しません。プロセスの場合、ユーザーおよびロール識別子は、Linux ユーザー アカウントに関連付けられているタイプおよびユーザー識別子の結合を制御するために使用されるため、より意味があります。ただし、オブジェクトの場合、ユーザーおよびロール識別子はほとんど使用されません。標準化された管理では、オブジェクトのロールは多くの場合 object_r であり、オブジェクトのユーザーは多くの場合、オブジェクトを作成したプロセスのユーザー識別子です。これらはアクセス制御にほとんど影響しません。 標準の Linux セキュリティにおけるユーザー ID とセキュリティ コンテキストにおけるユーザー識別子の違いは、技術的に言えば、それぞれ標準およびセキュリティ強化アクセス制御メカニズムに使用される直交識別子であり、両者の相関関係は SELinux ポリシーによって直接強制されるのではなく、ログオン プロセスによって厳密に決定されることです。 6.1.1 ユーザー
3) 対象を絞った政策ではユーザーはそれほど重要ではない。 6.1.2 役割 1) ファイル、ディレクトリ、デバイスの役割: 通常は object_r。 4) ロール情報を保存するには、RBAC(ロールベースアクセス制御)に基づく厳密なMLSポリシーを使用する 6.1.3 タイプ 1) タイプ: サブジェクトとオブジェクトを異なるグループに分割し、システム内の各サブジェクトとオブジェクトのタイプを定義し、プロセス操作に最も低い権限環境を提供するために使用されます。 レベルとカテゴリ: レベルとカテゴリを定義します。MLS 戦略でのみ使用されます。
6.2 SELinux と標準 Linux アクセス制御属性の比較 標準 Linux では、サブジェクトのアクセス制御属性は、カーネル内のプロセス構造を通じてプロセスに関連付けられた実際の有効なユーザー ID とグループ ID です。これらの属性は、ログイン プロセスや setuid プログラムなどのさまざまなツールを使用してカーネルによって保護されます。オブジェクト (ファイルなど) の場合、ファイルの inode には、アクセス モード ビットのセット、ファイルのユーザー ID とグループ ID が含まれます。以前のアクセス制御は、読み取り/書き込み/実行の 3 つの制御ビットに基づいており、1 つはファイル所有者用、1 つはファイル所有者が所属するグループ用、1 つはその他用に設定されていました。 SELinux では、アクセス制御属性は常にセキュリティ コンテキスト トリプレット (ユーザー:ロール:タイプ) の形式であり、すべてのオブジェクトとサブジェクトには関連付けられたセキュリティ コンテキストがあります。 SELinux の主なアクセス制御機能はタイプの強制であるため、セキュリティ コンテキスト内のタイプ識別子によってアクセス権が決定されることに注意することが重要です。 注: SELinux は標準 Linux にタイプ強制 (TE) を追加します。つまり、オブジェクトにアクセスするには、まず標準 Linux と SELinux の両方のアクセス制御を満たす必要があります。たとえば、ファイルに対する SELinux 書き込み権限があっても、そのファイルに対する w 権限がない場合は、そのファイルに書き込むことはできません。次の表は、標準 Linux と SELinux のアクセス制御属性の比較をまとめたものです。 標準Linux プロセスセキュリティ属性の実ユーザーおよび実効ユーザーとグループ ID オブジェクトのセキュリティ属性アクセスモード、ファイルユーザーおよびグループID プロセスユーザー/グループIDとファイルアクセスモードに基づくアクセス制御、 6.3 まとめ 1) システム内の各ファイル、ディレクトリ、ネットワーク ポートなどにはセキュリティ コンテキストが割り当てられ、ポリシーによってセキュリティ コンテキスト間の相互作用のルールが規定されます。 7. タイプエンフォースメント(TE)アクセス制御 SELinux では、すべてのアクセスを明示的に承認する必要があり、Linux ユーザー/グループ ID に関係なく、SELinux はデフォルトではアクセスを許可しません。つまり、SELinux にはデフォルトのスーパーユーザーは存在しません。標準 Linux のルートとは異なり、サブジェクト タイプ (ドメインなど) とオブジェクト タイプを指定して、許可ルールを使用してアクセス権が付与されます。許可ルールは、次の 4 つの部分で構成されます。
以下にいくつか例を挙げます。 user_t bin_t : ファイル {読み取り、getattr の実行} を許可します。 この例では、ソース タイプ (またはサブジェクト タイプまたはドメイン) user_t とターゲット タイプ (またはオブジェクト タイプ) bin_t の 2 つのタイプ識別子を含む TE 許可ルールの基本構文を示します。識別子ファイルは、ポリシーで定義されたオブジェクト クラスの名前です (この場合は通常のファイル)。中括弧で囲まれた権限は、ファイル オブジェクト クラスの有効な権限のサブセットです。このルールは次のように解釈されます。 ドメイン タイプが user_t のプロセスは、タイプが bin_t のファイル オブジェクトの読み取り/実行や属性の取得を行うことができます。 前の例のような SELinux の allow ルールは、実際に SELinux でアクセス権を付与します。実際の課題は、何万ものアクセスが正しく承認され、最大限のセキュリティを実現するために必要な権限のみを付与できるようにすることです。 7.1 標準 Linux セキュリティにおける setuid プログラム 知識豊富なユーザー joe は、既存のパスワードを安全に変更したいと考えています。Linux では、passwd に setuid 値を与えて、ルート権限で実行できるようにすることでこの問題を解決しています。通常の Linux システムでパスワード ファイルを一覧表示すると、次のようになります。 # ls -l /usr/bin/passwd -rwsr-xr-x. 1 ルート ルート 41292 2012年9月7日 /usr/bin/passwd ここで 2 つの点に注意してください。1 つ目は、所有者権限の x 位置が s に設定されていることです。これはいわゆる setuid ビットで、このファイルを実行するすべてのプロセスの有効な UID (ユーザー ID) がファイル所有者の UID に変更されることを意味します。ここで、root はファイルの所有者であるため、パスワード プログラムが実行されると、実際には root ユーザー ID として実行されます。実行プロセスを次の図に示します。 上記の分析から、passwd はルート権限で実行されることがわかります。システムのあらゆるリソースにアクセスできるため、システムにセキュリティ上の問題が生じます。実際、アクセスする必要があるのは shadow とその関連ファイルだけです。そして、shadow は passwd からのアクセスのみを受け入れる必要があります。これは標準の Linux では不可能ですが、TE (type enhancement) を使用するとこの機能を実現できます。 8. ロールベースのアクセス制御 SELinux は、ロールベースのアクセス制御 (RBAC) も提供します。SELinux の RBAC 機能は、タイプ強制に基づいています。SELinux のアクセス制御は、主にタイプを通じて実装されます。ロールは、プロセス セキュリティ コンテキストのロール識別子に基づいて、プロセスが変換できるタイプを制限します。このようにして、ポリシー作成者は、一連のドメイン タイプに変換できるロールを作成し (タイプ強制ルールが変換を許可していると仮定)、ロールの制限を定義できます。 9. SELinux のマルチレベルセキュリティ タイプ強制は、SELinux によって導入された最も重要な強制アクセス制御 (MAC) メカニズムであることは間違いありません。ただし、主に機密性制御アプリケーションのサブセットでは、従来のマルチレベル セキュリティ (MLS) MAC をタイプ強制と組み合わせて使用するとより価値が高まります。このような場合、SELinux には常に何らかの形の MLS 機能が含まれます。MLS 機能はオプションです。SELinux の 2 つの MAC メカニズムのうち、MLS は通常最も重要なものではありません。多くの非機密データ アプリケーションを含む、ほとんどの安全なアプリケーションでは、タイプ強制が最も適したセキュリティ強化メカニズムです。ただし、MLS は一部のアプリケーションのセキュリティを強化します。 ほとんどの SELinux ポリシーでは、機密性 (s0、s1、...) とカテゴリ (c0、c1、...) にワイルドカード名が使用され、意味のあるユーザー名の指定はユーザー空間プログラムとライブラリに任されます。 (たとえば、s0 は UNCLASSIFIED に関連付けられ、s1 は SECRET に関連付けられる可能性があります) ユーザー:ロール:タイプ:感度[:カテゴリ,...] [-感度[:カテゴリ,...]] 次の例は例を示しています。 root@luohj-仮想マシン:~# ps -aZ ラベル PID TTY 時間 コマンド unconfined_u:system_r:insmod_t:s0-s0:c0.c255 4940 ポイント/0 00:00:00 パスワード MLS セキュリティ コンテキストには、少なくとも 1 つのセキュリティ レベル (単一の機密性と 0 個以上のカテゴリで構成) が必要ですが、低 (またはプロセス トレンド) と高 (またはプロセス ギャップ) という 2 つのセキュリティ レベルを含めることができます。高セキュリティ レベルがない場合、低セキュリティ レベルと同じであると見なされます (最も一般的なケース)。実際には、低セキュリティ レベルと高セキュリティ レベルは、通常、オブジェクトとプロセスで同じです。プロセスによく使用されるレベル範囲は、信頼されたサブジェクト (つまり、プロセス信頼ダウングレード情報) またはディレクトリなどの異なるセキュリティ レベルのオブジェクトを含むマルチレイヤー オブジェクトであると見なされます。説明を簡単にするために、すべてのプロセスとオブジェクトには 1 つのセキュリティ レベルのみがあると想定します。 10. 戦略分析ツール apol apol (ポリシー分析) ツールは、setools ツールキット内にある成熟した SELinux ポリシー分析ツールです。これを使用して policy.xx ファイルを開き、関連するすべてのポリシーを分析します。 xx はポリシーコンパイラ (checkpolicy) のバージョン番号です。 11. まとめ SELinux アクセス制御は、すべてのシステム リソース (プロセスを含む) に関連付けられたセキュリティ コンテキストに基づいています。セキュリティ コンテキストは、ユーザー、ロール、およびタイプ識別子の 3 つのコンポーネントで構成されます。タイプ識別子はアクセス制御の主な基礎となります。 SELinux におけるアクセス制御の主な特徴は、サブジェクト (プロセス) とオブジェクト間のアクセス許可を、許可ルール (サブジェクトのタイプ (ドメイン タイプとも呼ばれる) がソース、オブジェクトのタイプがターゲット) を指定して行うタイプ強制です。特定のオブジェクト カテゴリに対してアクセスを許可し、オブジェクト カテゴリごとにきめ細かな権限を設定します。 タイプ強制の主な利点は、特定のドメイン タイプで実行できるプログラムを制御できることです。したがって、個々のプログラムに対するアクセス制御が可能になります (ユーザー レベルのセキュリティ制御よりもはるかに安全です)。プログラムが別のドメインに入ること (つまり、特定のプロセス タイプとして実行すること) を有効にすることをドメイン遷移と呼び、SELinux の許可ルールによって厳密に制御されます。SELinux では、type_transition ファイルによってドメイン遷移を自動的に実行することもできます。 SELinux は、アクセス制御セキュリティ コンテキストでロール識別子を直接使用しません。代わりに、すべてのアクセスはタイプ ベースであり、ロールは許可されたドメイン タイプを関連付けるために使用されます。これにより、タイプが強制される許可された機能をグループ化し、ユーザーをロールとして認証できます。 SELinux は、より多くのアクセス制限を提供するオプションの MLS アクセス制御メカニズムを提供します。MLS 機能は TE メカニズムに基づいて構築されています。MLS は、セキュリティ コンテキストの内容を拡張して、現在の (または低い) セキュリティ レベルとオプションの高セキュリティ レベルを含めます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL 8.0.17 のインストールと設定のグラフィックチュートリアル
>>: vue Nprogress のプログレスバー機能を実装する際の一般的な問題
腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...
#docker ps チェック、すべてのポートがマップされています コンテナID イメージ コマンド...
最近、たくさんの人に改変してもらったフレームワークに取り組んでいます。毎日コードを見ていると目が回り...
1. MySQLが以前にインストールされていたかどうかを確認するコマンド: rpm -qa|grep...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
vue は、ページ上の div ボックスのドラッグ アンド ドロップ ソート機能を実装します。 序文...
この記事では、MySQL 5.6.37のダウンロード、インストール、設定のチュートリアルを参考までに...
歴史的な理由により、MySQL レプリケーションは、REDO ログではなく論理バイナリ ログに基づい...
Vue での img の動的スプライシングを見てみましょう。src 画像アドレス、具体的な内容は次の...
1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...
この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...
reduceメソッドは配列の反復メソッドです。 mapやfilterとは異なり、 reduceメソッ...
CSS レイアウトとスタイルに関する質問: 水平方向の中央揃えと最大幅の制限のバランスをとる方法最近...
mysql ストアド プロシージャの概念:特定のタスク (クエリと更新) を実行できる、データベース...
目次1. シナリオ2. 解決策3. 結論4. 参考文献1. シナリオ日常の開発およびテスト作業には ...