Tools前書きSELinuxチュートリアルのこの最後の部分では、SELinuxユーザーとそのアクセスを微調整する方法について説明します。SELinuxエラーログと、エラーメッセージを理解する方法についても学習します。7でテストされています。他のディストリビューションでも概念は同じです。_このチュートリアルでは、特に明記しない限り、rootユーザーとしてコマンドを実行します。+」キーワードを付ける必要があります。SELinuxユーザーSELinuxユーザーは、ルートアカウントを含む通常のLinuxユーザーアカウントとは異なるエンティティです。SELinuxユーザーは、特別なコマンドで作成するものではなく、サーバーへの独自のログインアクセス権も持ちません。代わりに、起動時にメモリに読み込まれるポリシーでSELinuxユーザーが定義されますが、これらのユーザーはごく少数です。SELinuxユーザーが異なれば、システムに対する権限も異なります。これが、ユーザーを便利にしている理由です。ファイルのセキュリティコンテキストの最初の部分にリストされているSELinuxユーザーは、そのファイルを所有しているユーザーです。+`コマンドの出力からファイルの所有者を見かけるようなものです。プロセスコンテキストのユーザーラベルは、プロセスが実行されているSELinuxユーザーの特権を示します。SELinuxが適用されると、通常のLinuxユーザーアカウントはそれぞれSELinuxユーザーアカウントにマップされます。同じSELinuxユーザーに複数のユーザーアカウントをマップできます。このマッピングにより、通常のアカウントは、SELinuxの同等の権限を継承できます。7では、次のように表示されます。*この表の最初の列「ログイン名」は、ローカルLinuxユーザーアカウントを表します。ここには3つしかリストされていません。して表示されるエントリで表されます。ログインにマッピングされます。これは、unconfined_uというSELinuxユーザーにマップされます。この場合、これは最初の行の2番目の列です。MCS)クラスを示しています。その部分とその後の列(サービス)も無視しましょう。*」ログインにマッピングされるのではなく、独自のエントリが与えられていることに注意してください。SELinuxユーザーにマップされます。system_uは、プロセスまたはデーモンを実行するための異なるクラスのユーザーです。+`コマンドを実行します。7システムの出力は次のようになります。ポリシーで定義されたさまざまなSELinuxユーザーが表示されます。以前unconfined_uやsystem_uなどのユーザーを見てきましたが、現在はguest_u、staff_u、sysadm_u、user_uなどの他のタイプのユーザーも見ています。名前は、それらに関連付けられている権利を多少示しています。sysadm_uユーザーにはguest_uよりも多くのアクセス権があると仮定できます。ゲストを確認するために、5列目のSELinuxロールを見てみましょう。このチュートリアルの最初の部分から思い出すと、SELinuxロールはユーザーとプロセスの間のゲートウェイのようなものです。それらをフィルターと比較しました。ロールが許可する場合、ユーザーはロールを_enter_できます。ロールがプロセスドメインへのアクセスを許可されている場合、そのロールに関連付けられているユーザーはそのプロセスドメインに入ることができます。`ロールにマッピングされていることがわかります。`ドメインでプロセスを実行することを許可します。+`はsysadmrロールに対して許可されていますが、guestuはguest_rロールにマップされています。これらの各ロールには、異なるドメインが割り当てられます。ログインがunconfineduユーザーにマップされることもわかりました。ログインは通常のLinuxユーザーアカウントを表すため、これらのアカウントはsystem_rおよびunconfined_rロールに対しても承認されます。unconfined_uユーザーにマップするLinuxユーザーは、unconfined_tドメイン内で実行されるアプリを実行する特権を持っているということです。*のSELinuxセキュリティコンテキストを示しています。SELinuxユーザーにマップされ、unconfined_uはunconfined_rロールに対して許可され、unconfined_rロールはunconfined_tドメインでプロセスを実行することを許可されます。別のターミナルウィンドウから作成した4人のユーザーと4つの新しいSSHセッションを開始するために時間をかけることをお勧めします。これにより、必要に応じて異なるアカウントを切り替えることができます。次に、通常ユーザーとしてログインしたターミナルセッションに切り替えます。覚えているなら、https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-2-files-and-processesにいくつかのユーザーアカウントを作成しました。[2番目のチュートリアル]、regularuserもその一人です。7システムに通常ユーザーとして接続します。+`コマンドを実行すると、出力は次のようになります。SELinuxユーザーアカウントにマップされ、unconfined_rロールを引き受けることができます。ロールは、制限のないドメインでプロセスを実行できます。これは、rootアカウントがマップする同じSELinuxユーザー/ロール/ドメインです。これは、SELinuxターゲットポリシーにより、ログインしているユーザーが制限のないドメインで実行できるためです。以前に多くのSELinuxユーザーのリストを見てきました。sudoコマンドを実行できません。*:このユーザーはGUIツールにアクセスでき、Firefoxブラウザーを介してネットワークを利用できます。*:このユーザーはゲストアカウント(GUIおよびネットワーク)よりも多くのアクセス権を持ちますが、suまたはsudoを実行してユーザーを切り替えることはできません。*:sudoコマンドを実行してルート権限を取得できることを除いて、user_uと同じ権限。*:このユーザーは、システムサービスを実行するためのものであり、通常のユーザーアカウントにはマッピングされません。1:スイッチユーザーアクセスの制限SELinuxがユーザーアカウントにセキュリティを適用する方法を確認するために、通常のユーザーアカウントについて考えてみましょう。システム管理者は、ユーザーがrootアカウントと同じ無制限の_SELinux特権_を持っていることを知っているので、それを変更したいと思います。具体的には、ユーザーがルートアカウントを含む他のアカウントに切り替えられないようにします。最初に、ユーザーが別のアカウントに切り替える能力を確認しましょう。次のコードスニペットでは、通常ユーザーがスイッチドユーザーアカウントに切り替えています。彼がスイッチドユーザーのパスワードを知っていると仮定します。*ユーザーとしてログインしたターミナルウィンドウに戻り、通常ユーザーのSELinuxユーザーマッピングを変更します。regularuserをuser_uにマッピングします。SELinux(-s)ユーザーアカウントuser_uに通常ユーザーアカウント(-a)を追加しています。通常のユーザーがログアウトして再度ログインするまで、変更は有効になりません。通常のユーザーのターミナルウィンドウに戻り、最初にスイッチドユーザーから切り替えます。logout次に、通常ユーザーもログアウトします。logout次に、新しいターミナルウィンドウを開いて、通常ユーザーとして接続します。次に、switcheduserに再度変更を試みます。switcheduserPassword:これが今見ているものです。+`コマンドを実行してregularuserのSELinuxコンテキストを確認すると、出力が以前とはまったく異なることがわかります。regularuserはuser_uにマップされています。IT組織内のアプリケーション開発チームを考えることができます。そのチームには、会社の最新アプリのコーディングとテストを行う多数の開発者とテスターがいる場合があります。システム管理者は、開発者が自分のアカウントから特権の高いアカウントに切り替えて、サーバーにアドホックな変更を加えることを知っています。アカウントを切り替える機能を制限することで、これを防ぐことができます。(ただし、特権ユーザーとして直接ログインすることはできません)。2:スクリプトを実行するための許可を制限するSELinuxを介したユーザーアクセスを制限する別の例を見てみましょう。*セッションから実行します。デフォルトでは、SELinuxはguest_tアカウントにマップされたユーザーがホームディレクトリからスクリプトを実行できるようにします。+`コマンドを実行して、ブール値を確認できます。allow_guest_exec_content出力は、フラグがオンであることを示しています。onその効果を確認するために、このチュートリアルの最初に作成したguestuserアカウントのSELinuxユーザーマッピングを最初に変更しましょう。rootユーザーとして実行します。SELinuxユーザーアカウントにマッピングされています。*guestuserとしてターミナルウィンドウを開いている場合は、そこからログアウトし、guestuserとして新しいターミナルウィンドウに再度ログインします。次に、ユーザーのホームディレクトリに非常にシンプルなbashスクリプトを作成します。次のコードブロックは、最初にホームディレクトリをチェックし、次にファイルを作成してコンソールで読み取ります。最後に、実行許可が変更されます。+`ホームディレクトリにいることを確認します。pwd/home/guestuserスクリプトを作成します。script"スクリプトを実行可能にします。myscript.shguestuserとしてスクリプトを実行しようとすると、期待どおりに動作します。+」に変更して確認します。offゲストユーザーとしてログインしたコンソールに戻り、スクリプトを再度実行します。今回は、アクセスが拒否されます。deniedこれが、SELinuxがDACの上に追加のセキュリティレイヤーを適用する方法です。ユーザーが自分のホームディレクトリに作成されたスクリプトへの完全な読み取り、書き込み、実行アクセス権を持っている場合でも、実行を停止することができます。実動システムについて考えてください。あなたの会社のために働いている請負業者の一部がそうであるように、開発者はそれへのアクセスを持っていることを知っています。エラーメッセージとログファイルを表示するためにサーバーにアクセスしたいが、シェルスクリプトを実行したくない。これを行うには、まずSELinuxを有効にしてから、対応するブール値が設定されていることを確認します。+`ファイルを確認できます。これをルートセッションから実行します。7サーバーのファイルの最後の2つのメッセージは、アクセス拒否を示しています。+`コマンドを実行することをお勧めします。次のコマンドはこれを示しています(独自のアラートIDを使用します)。-l実際、出力にはエラーに関する詳細が表示されます。**************************...大量の出力ですが、最初の数行に注意してください。bashの実行アクセスを妨げています。*これにより、エラーの原因がかなりわかります。次の数行は、エラーの修正方法も示しています。[このシリーズの最初の部分]では、SELinuxの役割について話しました。ユーザー、ロール、ドメイン、タイプの基本的な用語を紹介しました。ここで、ユーザーアクセスの制限において役割がどのように役割を果たすかを見てみましょう。前述したように、SELinuxの役割はユーザーとプロセスドメインの間に位置し、ユーザーのプロセスがどのドメインに入ることができるかを制御します。ロールは、ファイルセキュリティコンテキストで見るとそれほど重要ではありません。ファイルの場合、object_rの一般的な値でリストされます。ユーザーとプロセスを扱う場合、役割が重要になります。システムでhttpdデーモンが実行されていないことを確認しましょう。rootユーザーとして、次のコマンドを実行してプロセスが停止していることを確認できます。stop次に、制限付きユーザーとしてログインしたターミナルウィンドウに切り替えて、SELinuxセキュリティコンテキストの表示を試みます。ターミナルウィンドウを開いていない場合は、システムに対して新しいターミナルセッションを開始し、このチュートリアルの最初に作成した制限付きユーザーアカウントとしてログインします。-Zunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023そのため、アカウントには、unconfined_uユーザーとして実行され、unconfined_rロールにアクセスするというデフォルトの動作があります。このアカウントには、システム内のプロセスを開始する権利がありません。次のコードブロックは、restricteduserがhttpdデーモンを起動しようとしてアクセス拒否エラーを取得していることを示しています。sudoersファイルに追加されていることを確認します。このアクションにより、restricteduserアカウントがroot特権を使用できるようになります。visudoそして、ファイルに次の行を追加し、保存して終了します。ALL制限付きユーザー端末ウィンドウからログアウトして再度ログインすると、sudo特権でhttpdサービスを開始および停止できます。httpd.serviceユーザーは今すぐサービスを停止することもできます。httpd.serviceそれは非常に普通のことです。システム管理者は、信頼するユーザーアカウントにsudoアクセスを許可します。user_rアカウントにマッピングします。これは、別の例で通常ユーザーアカウントに対して行ったことです。restricteduser制限されたユーザーのターミナルウィンドウに戻り、ログアウトして、制限されたユーザーとして新しいターミナルセッションで再度ログインします。+`コマンドを使用してアクセスを確認できます。-x出力は、user_uが引き受けることができる役割を示しています。これらは、object_rとuser_rです。+`コマンドを実行して、user_rロールが入力を許可されているドメインを確認できます。-xuser_rが入力を許可されているドメインがいくつかあります。フィルターを使用して同じコマンドを試してみましょう。httpdロールがアクセスできるhttpd関連ドメインは多数ありますが、httpd_tはそれらの1つではありません。user_u(restricteduserにマッピング)がuser_rロールを引き受けることができることを知っています。これは、restricteduserアカウントにsudo特権が付与されている場合でも失敗するはずです。制限されたユーザーアカウントのターミナルウィンドウに戻り、httpdデーモンを今すぐ開始しようとします(アカウントにsudo特権が付与されているため、これを停止できました)。permittedしたがって、SELinuxがゲートキーパーのように機能する方法の別の例があります。SELinux監査ログシステム管理者として、SELinuxによってログに記録されたエラーメッセージを確認してください。これらのメッセージは特定のファイルに記録され、アクセス拒否に関する詳細情報を提供できます。7システムでは、次の2つのファイルを見ることができます。messagesこれらのファイルは、それぞれauditdデーモンとrsyslogdデーモンによって生成されます。マニュアルページには、auditdデーモンはLinux監査システムのユーザースペースコンポーネントであり、rsyslogdはメッセージロギングのサポートを提供するシステムユーティリティであると書かれています。簡単に言えば、これらのデーモンは、これら2つのファイルにエラーメッセージを記録します。+`ファイルが使用されます。+`ファイルが使用されます。両方のデーモンが実行されている場合は、両方のファイルが使用されます。2:スクリプトを実行するためのアクセス許可の制限」を参照)。grep`コマンドを使用していました。幸いなことに、SELinuxには、それよりも生活を少し楽にするいくつかのツールが付属しています。これらのツールはデフォルトではインストールされず、このチュートリアルの最初の部分でインストールする必要があるいくつかのパッケージをインストールする必要があります。auditdデーモンが実行されている場合、このコマンドを使用できます。次のコードスニペットでは、httpdデーモンに関連するすべてのエラーメッセージを確認しようとしています。ルートアカウントにいることを確認します。httpd私たちのシステムでは、いくつかのエントリがリストされましたが、最後のエントリに集中します。suがsetuid機能を使用することを妨げています。完全なSELinuxメッセージ用。suがsetuid機能を使用することを妨げています。/etc/selinux/targeted/setrans.conf[source,code-pre]##SELinuxのマルチカテゴリセキュリティ変換テーブル###オブジェクトは、管理者が定義した0〜1023のカテゴリに分類できます。#オブジェクトは一度に複数のカテゴリに属する​​ことができます。#カテゴリは、c0-c1023としてシステムに保存されます。ユーザーはこの#テーブルを使用して、カテゴリをより意味のある出力に変換できます。