1. SELinux の紹介SELinux はカーネル レベルのセキュリティ メカニズムです。SELinux は Linux 2.6 以降カーネルに統合されています。SELinux はカーネル レベルであるため、構成ファイルへの変更を有効にするにはオペレーティング システムを再起動する必要があります。 SELinux メカニズムは現在、主流の Linux バージョンに統合されており、CentOS/RHEL ではデフォルトで SELinux メカニズムが有効になります。 システム リソースはプロセスによって読み取られ、変更されます。システム リソースのセキュリティを確保するために、従来の Linux では、ユーザー パーミッションとファイル パーミッションの概念を使用してリソースへのアクセスを制限しています。これは、プロセスの開始ユーザーとファイル パーミッションを比較して、システム リソースのセキュリティを確保することによって行われます。これは、任意アクセス制御方式 (DAC) です。ただし、システム リソースのセキュリティ要件が増加するにつれて、Linux ではセキュリティ強化メカニズム (SELinux) が登場しました。このメカニズムは、パーミッションに加えて、プロセスとファイルにさらに多くの制限を追加して、アクセス条件を強化します。この方法は、強制アクセス制御 (MAC) です。これら 2 つの方法の最も直感的な比較は、従来の DAC ではルートが任意のファイルにアクセスできるのに対し、MAC ではルートであっても設定で許可されたファイルにしかアクセスできないという点です。 動作原理は次のとおりです。 2. SELinuxの基本概念オペレーティング システムのセキュリティ メカニズムは、実際にはプロセスとシステム リソース (ファイル、ネットワーク ソケット、システム コールなど) の 2 つを制限することがわかっています。 これまでに学んだ知識では、Linux オペレーティング システムは、ユーザーとグループの概念を通じてシステム リソースを制限します。各プロセスを実行するにはユーザーが必要であることはわかっています。 SELinux では、ドメインとコンテキストという 2 つの基本概念が定義されています。 2.1 仕事の種類SELinux にはさまざまなルールがあります。SELinux は、さまざまな作業タイプに応じてこれらのルールをオンまたはオフ (on|off<ブール値 1|0>) にし、ルールをオンまたはオフにすることで、さまざまなプロセスによるファイルの読み取りを具体的に制限します。 getsebool -a または sestatus -b # 現在の作業タイプで各ルールが有効になっているかどうかを確認します setsebool -P ルール名 [0|1] # 現在の作業タイプで指定されたルールの開始と終了を変更します。 -P は、ファイルを同時に変更して永続化することを意味します ドメインはプロセスを制限するために使用され、コンテキストはシステム リソースを制限するために使用されます。 2.2. セキュリティコンテキストの紹介セキュリティ コンテキストはプロセスとファイルに存在します。コンテキストはプロセスとともにメモリに保存され、ファイルのコンテキストは対応する inode に保存されます。したがって、プロセスがファイルにアクセスするときは、まず inode を読み取り、ファイルにアクセスできるかどうかを判断する必要があります。
ps -Z コマンドを使用すると、現在のプロセスのドメイン情報、つまりプロセスの SELinux 情報を表示できます。
ls -Z コマンドを使用すると、ファイルのコンテキスト情報、つまりファイルの SELinux 情報を表示できます。
これらのフィールドが何を表しているかについては、後で説明します。 3. 戦略SELinux では、ポリシーを定義することで、どのドメインがどのコンテキストにアクセスできるかを制御します。 SELinux には、多くの事前設定されたポリシー モードがあります。通常、何らかのサービスやプログラムを保護する必要がない限り、自分でポリシーを定義する必要はありません。 CentOS/RHEL では、ターゲット戦略がデフォルトで使用されます。では、ターゲット戦略とは何でしょうか? ターゲット ポリシーは、ターゲット プロセスのみが SELinux によって制限され、非ターゲット プロセスは SELinux によって制限されないことを定義します。通常、ネットワーク アプリケーションは httpd、mysqld、dhcpd などのターゲット プロセスです。 CentOS SELinux 設定ファイルは、/etc/sysconfig/ ディレクトリの selinux ファイルに保存されます。その内容は次のように確認できます。
4. SELinux モードSELinux には、強制、許可、無効の 3 つの動作モードがあります。 ①強制モード:ポリシーに違反する行為は禁止され、カーネル情報として記録されます ②許可モード:ポリシーに違反する行為は禁止されないが、警告メッセージが表示される ③無効モード:SELinuxを無効にすると、SELinuxのないシステムと同じです。通常、SELinuxについてよく知らない場合は、一部のネットワークアプリケーションにアクセスする際に問題が発生しないように、モードを無効に設定します。 前述のように、SELinuxの主な設定ファイルは/etc/sysconfig/selinuxです。
コマンドを使用して作業モードを変更することは、現時点でのみ有効です。起動時に有効にし、無効モードと他の 2 つのモードを切り替える場合は、構成ファイルのパラメータを変更して再起動するしかありません。構成ファイルは /etc/selinux/config です。/etc/sysconfig/selinux ファイルから変更することもできます。実際、このファイルは /etc/selinux/config のソフト リンク ファイルです。 SELinuxのデフォルトの動作モードはenforcingですが、permissiveまたはdisabledに変更できます。 SELinux の現在の動作ステータスを確認するには、getenforce コマンドを使用します。
現在の動作モードは強制です。現在のSELinuxの動作状態を設定するには、setenforce [0|1]コマンドを使用して変更できます。setenforce 0は許可に設定することを意味し、1は強制することを意味します。 [注意:] setenforceによるSELinuxの設定は一時的な変更であり、システムを再起動すると無効になります。したがって、永続的な変更を行う場合は、SELinuxのメイン設定ファイルを変更してください。
ls -Z コマンドを使用して、ファイルのコンテキスト情報、つまり SELinux 情報を表示できます。
従来の ls コマンドと比較して、system_u:object_r:admin_home_t:s0 が追加されていることがわかりました。このステートメントの意味を分析してみましょう。
①system_u: SElinuxユーザーを指し、rootはルートアカウントのアイデンティティ、user_uは権限のない一般ユーザー、system_uはシステムプロセスを表します。アイデンティティタイプはユーザーを通じて確認でき、通常はロールと一緒に使用されます。異なるロールで使用される場合、異なる ID には異なる権限があります。su コマンドを使用してユーザーを切り替えることはできますが、SElinux ユーザーには変更はありません。アカウントを切り替えても、ユーザー ID は変更されません。ユーザー ID は、ターゲット ポリシー環境では実質的な影響はありません。 ②object_r: object_r は一般的にファイルディレクトリの役割、system_r は一般的にプロセスの役割であり、対象ポリシー環境では、ユーザーの役割は一般的に system_r です。ユーザー ロールは、ユーザー グループの概念に似ています。ロールごとに ID 権限が異なります。ユーザーは複数のロールを持つことができますが、一度に使用できるロールは 1 つだけです。ターゲット ポリシー環境では、ロールは実際の効果を持ちません。ターゲット ポリシー環境では、すべてのプロセス ファイルのロールは system_r ロールです。 ③admin_home: ファイルやプロセスにはタイプがあり、SElinux は関連するタイプの組み合わせに基づいてアクセス権限を制限します。 5. 例例を通してコンテキスト値とSELinuxアクセス制御を見てみましょう たとえば、Web サーバーを構築した場合、www サーバーのデフォルトの Web ページの保存場所は /var/www/html ディレクトリにあることがわかっています。ここで新しい index.html テスト ページを作成し、www サーバーを起動して更新すると、そのコンテンツが表示されます。この時点で、/home ディレクトリに index.html ページを作成し、それを /var/www/html ディレクトリに移動してページを更新すると、正常に表示されますか? まず、httpd サービスを開始します。
次にブラウザを開き、127.0.0.1 を入力してアクセスします。現在表示されているインターフェースは Apache テスト インターフェースです。 現時点では /var/www/html の下にページがないため:
次に、/homeディレクトリにindex.htmlページを作成し、それを/var/www/htmlディレクトリに移動します。
この時点で、通常の状況では、html ディレクトリに index.html ページがあるため、この時点でブラウザ ページを更新すると、index.html ページにジャンプするはずです。 しかし、実際には、ページはまだこのテスト ページのままであることがわかりました。なぜでしょうか?これは SELinux セキュリティ ポリシーに関連しています。/var/log/audit ディレクトリに移動して、audit.log ファイルを表示し、エラー情報を見つけることができます。
このログ ファイルから、更新時に index.html ページが表示されない理由は、SELinux セキュリティ ポリシーによるものであることがわかります。 ls -Z コマンドを使用して、移動したばかりの index.html のコンテキスト情報を確認してみましょう。
3 番目のフィールドの型は home_root_t であることがわかりました。これはなぜでしょうか?この index.html ファイルは /home ディレクトリに作成したばかりなので、デフォルトで上位ディレクトリの SELinux タイプ情報を継承します。/home ディレクトリのコンテキスト情報を確認できます。
3 番目のフィールドは、先ほど見た index.html と同じであることがわかります。これは、ファイルのコンテキスト値が親ディレクトリの影響を受けることを示しています。通常、親ディレクトリのコンテキスト値を継承します。ただし、サービスのインストールによって生成される一部のファイル コンテキスト値は例外であり、親ディレクトリのコンテキスト値を継承しません。サービスは自動的にコンテキスト値を作成します。たとえば、http サービスがインストールされていない場合、/var/ ディレクトリの下に www ディレクトリはありません。httpd サービスをインストールすると、サービスは必要なディレクトリを自動的に作成し、サービスに関連するディレクトリとファイルのコンテキスト値を定義します。親ディレクトリのコンテキスト値は継承されません。
この時点で、/var/www/html ディレクトリのコンテキスト タイプは httpd_sys_content_t であるのに対し、移動した index.html のタイプは home_root_t であることがわかります。現時点では SELinux の動作モードが強制されているため、ポリシーに違反するアクションは禁止されています。そのため、ページを更新しても index.html の情報が表示されません。では、現時点でこの問題をどのように解決すればよいでしょうか。 通常、解決策は 2 つあります。 ① SELinuxの動作モードを直接無効に設定すると、ポリシー傍受の問題は発生しませんが、この場合、システムにはSELinuxのセキュリティ保護がなくなります。 ②restoreconまたはchconコマンドを使用してファイルコンテキスト情報を復元します restorecon コマンドを使用すると、ファイルのデフォルトのコンテキストを復元できます。
chcon コマンドはファイルのコンテキスト情報を変更できます。通常、変更を行うには参照ファイルを使用します。
ここでは、restorecon コマンドを使用してファイルのデフォルトのコンテキストを復元します。
restorecon コマンドを使用した後、index.html のコンテキスト情報が上位ディレクトリ html のコンテキスト情報を継承していることがわかります。この時点で、ページを更新すると index.html の内容を確認できます。 この例を通して、ファイルのコンテキスト情報と SELinux の関係を理解し、ログ ファイル /var/log/audit/audit.log の情報を表示してエラーを見つける方法と、restorecon コマンドを使用してファイルのコンテキスト情報を修復する方法を知ります。 6. SELinux ログ管理SELinux によってブロックされたプロセスのログ レコードは、/var/log/audit/audit.log ファイルに保存されます。ただし、このファイルの内容を読むユーザー エクスペリエンスは非常に悪いです。cat /var/log/audit/audit.log にアクセスして確認できます。そのため、システムでは、ログ ファイルの整理に役立つ sealert ツールが提供されています。sealert ツールがログ ファイルを処理するには、少し時間がかかります。しばらくお待ちください。 また、SELinux のログ機能を使用するには、auditd.service サービスを有効にする必要があります。 例 (Apache SELinux 構成) を使用して、sealert ツールについて学習しましょう。 1. このマシンでhttpdサービスが設定され、オンになっていることを確認します。 2. /usr/sbin/httpd コマンドは、/var/www/html/ ディレクトリ内の .html で終わるファイルを読み取るプロセスを開始します。次に、ホーム ディレクトリに ~/index.html ファイルを作成し、任意のコンテンツを書き込んでから、新しく作成したファイルを /var/www/html/ に移動します。 3. ブラウザを使用して、アドレスバーにローカル IP を入力し、成功したかどうかを確認します。次のインターフェイスが表示された場合、アクセスが失敗したことを意味します。 4. サービスの設定時に問題がないことを確認しました。この時点で、SELinux がアクセスをブロックしている可能性があると考えるべきです。コマンドを渡す
SELinux ログを確認し、キーワード httpd を見つけます。内容を読んでください。下の図の内容が主に気になる部分です。残りは /var/log/audit/audit.log の内容なので無視してかまいません。最終的に、変更が最も少ないソリューション、つまり SELinux ラベルの変更を優先しました。 5. コマンドを実行する
ファイルをhttpdがアクセスできるデフォルトのラベルに変更するだけです 6. ブラウザを使用して再度アクセスし、結果を表示します。今回は成功です。 上記は、Linux での SELinux の理解方法の詳細です。Linux SELinux の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...
序文これまで当社ではMySQLの5.7シリーズを使用していましたが、バージョン8.0のリリースに合わ...
mysql 行から列へ、列から行へ難しい文章ではないので、詳しく説明はしません。文章を読むときは、一...
目次1. MySQLをダウンロードする2. 圧縮パッケージを解凍する3. MySQLを初期化する4....
タイトル通りです!一般的に使用される font-family はブラウザの組み込みフォントを読み込み...
場所表現タイプ~ は大文字と小文字を区別して通常の一致を実行することを示します~*は大文字と小文字を...
1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...
選択して変更: クリックすると現在の値が表示され、ページ UI が表示され、CSS スタイルが変更さ...
今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...
ステップ1: ディレクトリに入ります: cd /etc/mysql、debian.cnfファイルを表...
この記事から、MySQL を紹介し学習するための新しい一連の記事がスタートします。なぜ MySQL ...
Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config...
方法1: var a = [1,2,3]; var b = [4,5] b を連結します。 コンソー...
開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...
目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...