LinuxまたはSELinuxは、最新のLinuxディストリビューションに組み込まれている高度なアクセス制御メカニズムです。よって開発されました。時間が経つにつれて、SELinuxはパブリックドメインでリリースされ、その後さまざまなディストリビューションがコードに組み込みました。多くのシステム管理者は、SELinuxがやや未知の領域だと感じています。このトピックは気が遠くなると思われ、時には非常に混乱します。適切に構成されたSELinuxシステムはセキュリティリスクを大幅に削減できます。それについて少し知っていると、アクセス関連のエラーメッセージのトラブルシューティングに役立ちます。このチュートリアルでは、SELinuxの背後にある概念(パッケージ、コマンド、構成ファイル)、およびアクセスが拒否されたときにログに記録されるエラーメッセージについて学習します。SELinuxを実際に使用する実際的な例もいくつか見られます。7でテストされています。他のディストリビューションでも概念は同じです。_このチュートリアルでは、特に明記しない限り、rootユーザーとしてコマンドを実行します。+」キーワードを付ける必要があります。始める前に、いくつかの概念を理解しましょう。(必須アクセス制御)と呼ばれるものを実装しています。Control)の上に実装されています。DACを理解するために、まず、従来のLinuxファイルセキュリティの仕組みを検討しましょう。従来のセキュリティモデルには、ファイル、ディレクトリに対する読み取り、書き込み、および実行(r、w、x)のアクセス許可の組み合わせを持つことができるユーザー、グループ、およびその他(u、g、o)の3つのエンティティがあります。*グループも同様にアクセス権を持ちます。「他の」エンティティは、おそらくアクセスできません。次のコードブロックでは、joのホームディレクトリの仮想コンテンツを検討できます。*ユーザーを設定する必要はありません。チュートリアルの後半で多くのユーザーを設定します。次のようなコマンドを実行します。/home/jo/次のような出力を表示できます。myscript.shこれで、joはこのアクセスを変更できます。joは、このファイルへのアクセスを他のユーザーやグループに許可(および制限)したり、ファイルの所有者を変更したりできます。これらのアクションにより、重要なファイルがこのアクセスを必要としないアカウントにさらされる可能性があります。joは安全性を高めるように制限することもできますが、それは任意です。システム管理者がシステム内のすべてのファイルに対して強制する方法はありません。別のケースを考えてみましょう。Linuxプロセスが実行されると、rootユーザーまたはスーパーユーザー特権を持つ別のアカウントとして実行される場合があります。ブラックハットのハッカーがアプリケーションを制御した場合、ユーザーはそのアプリケーションを使用して、ユーザーアカウントがアクセスできるリソースにアクセスできます。rootユーザーとして実行されているプロセスの場合、基本的にこれはLinuxサーバー内のすべてを意味します。ユーザーが各自のホームディレクトリからシェルスクリプトを実行できないように制限するシナリオを考えます。これは、実動システムで作業している開発者がいる場合に発生する可能性があります。+」コマンドを使用したり、ホームディレクトリからスクリプトを実行したりしたくない。どのようにそれをしますか?SELinuxは、このようなアクセス制御要件を微調整する方法です。SELinuxを使用すると、ユーザーまたはプロセスができることを定義できます。すべてのプロセスを独自のドメインに限定し、許可されたドメインの特定の種類のファイルや他のプロセスとのみ対話できるようにします。これにより、ハッカーがプロセスをハイジャックしてシステム全体にアクセスすることを防ぎます。テストシステムのセットアップ概念の学習を支援するために、WebサーバーとSFTPサーバーの両方を実行するテストサーバーを構築します。7のベアインストールから開始し、Apacheおよびvsftpデーモンをそのサーバーにインストールします。これらのアプリケーションのいずれも構成しません。クラウドサーバーにいくつかのテストユーザーアカウントを作成します。これらのアカウントは、レッスン全体を通してさまざまな場所で使用します。最後に、必要なSELinux関連パッケージをインストールします。これは、最新のSELinuxコマンドを使用できるようにするためです。*ユーザーとしてサーバーにログインし、次のコマンドを実行してApacheをインストールします。httpd出力には、ダウンロードされるパッケージが表示され、インストールの許可を求められます。Webサーバーデーモンがインストールされます。0:2.4.6-18.el7.centosComplete!デーモンを手動で起動します。status`コマンドを実行すると、サービスが現在実行されていることが表示されます。(httpd)......次に、vsftpdをインストールします。vsftpd出力は次のようになります。*を押してパッケージをインストールします。+`コマンドを使用してvsftpdデーモンを起動します。出力には、次のようなものが表示されます。(vsftpd)......SELinuxパッケージのインストールSELinuxでは多くのパッケージが使用されます。一部はデフォルトでインストールされます。Hatベースのディストリビューションのリストです。policycoreutils(SELinuxを管理するためのユーティリティを提供)policycoreutils-python(SELinuxを管理するためのユーティリティを提供)selinux-policy(SELinux参照ポリシーを提供)selinux-policy-targeted(SELinuxターゲットポリシーを提供)libselinux-utils(SELinuxを管理するためのいくつかのツールを提供)setroubleshoot-server(監査ログメッセージを解読するためのツールを提供)setools(監査ログの監視、クエリポリシー、およびファイルコンテキスト管理のためのツールを提供)setools-console(監査ログの監視、ポリシーのクエリ、およびファイルコンテキスト管理のためのツールを提供)mcstrans(さまざまなレベルをわかりやすい形式に変換するツール)これらのいくつかは既にインストールされています。+`の後に異なる検索語を使用)。selinux出力は次のようになります。mcstransこれで、すべてのSELinuxパッケージがロードされたシステムができました。ApacheおよびSFTPサーバーがデフォルト構成で実行されています。*アカウントに加えて、テスト用に4つの通常のユーザーアカウントが用意されています。SELinuxモードSELinuxをいじくりましょう。SELinuxモードから始めましょう。いつでも、SELinuxは3つの可能なモードのいずれかになります。強制モードでは、SELinuxはLinuxシステムでそのポリシーを「強制」し、ユーザーおよびプロセスによる不正アクセスの試みが拒否されていることを確認します。アクセス拒否は、関連するログファイルにも書き込まれます。SELinuxポリシーと監査ログについては後で説明します。許容モードは、半有効状態のようなものです。SELinuxは許可モードではポリシーを適用しないため、アクセスは拒否されません。ポリシー違反はすべて監査ログに記録されます。SELinuxを実施する前にテストするのに最適な方法です。無効モードは一目瞭然です。システムは強化されたセキュリティで実行されません。+`コマンドを実行して、現在のSELinuxモードを確認できます。getenforceSELinuxは現在無効になっているはずなので、出力は次のようになります。+`コマンドを実行することもできます:sestatusSELinuxが無効になっている場合、出力には次のように表示されます。次のコマンドを実行して、その内容を表示できます。/etc/selinux/config出力は次のようになります。protection.SELINUXTYPE=targetedこのファイルには2つのディレクティブがあります。SELINUXディレクティブはSELinuxモードを指示し、前に説明したように3つの可能な値を持つことができます。SELINUXTYPEディレクティブは、使用されるポリシーを決定します。SELinuxでは、ターゲットポリシーを使用して、アクセス制御のアクセス許可をカスタマイズおよび微調整できます。他の可能な値は、高度な保護モードである「MLS」(マルチレベルセキュリティ)です。MLSでは、追加のパッケージをインストールする必要があります。SELinuxの有効化と無効化SELinuxの有効化は非常に簡単です。無効にするのとは異なり、2段階のプロセスで行う必要があります。SELinuxが現在無効になっており、前のセクションのすべてのSELinuxパッケージがインストールされていると想定しています。+`ファイルを編集して、SELINUXディレクティブを許容モードに変更する必要があります。*に設定する必要があります。すべてのファイルに適切なラベルが付けられていない限り、制限されたドメインで実行されているプロセスは、正しいコンテキストのファイルにアクセスできないため失敗する可能性があります。これにより、ブートプロセスが失敗したり、エラーで開始したりする可能性があります。_contexts_と_domains_はチュートリアルの後半で紹介します。次に、システムの再起動を発行します。reboot再起動プロセスでは、SELinuxコンテキストでラベル付けされたサーバー内のすべてのファイルが表示されます。システムは許容モードで実行されているため、SELinuxエラーとアクセス拒否が報告されますが、何も停止しません。*としてサーバーに再度ログインします。prevent」を検索します。preventing"エラーが報告されていない場合は、次のステップに安全に移動できます。messagesファイルで「SELinux」を含むテキストを検索することをお勧めします。このシステムでは、次のコマンドを実行しました。"SELinux"これにより、実行中のGNOMEデスクトップに関連するいくつかのエラーメッセージが表示されました。これは、SELInuxが無効になっている場合、または許容モードの場合に発生していました。argumentこれらのタイプのエラーは問題ありません。*に変更する必要があります。...SELINUX=enforcing...次に、サーバーを再起動します。+`コマンドを実行してSELinuxステータスを確認できます。サーバーに関する詳細が表示されます。messagesファイルを確認します。"SELinux"エラーはないはずです。出力は次のようになります。+`コマンドを実行して、現在のSELinuxモードを確認できます。getenforceシステムが強制モードで実行されている場合、出力は次のようになります。EnforcingSELinuxが無効になっている場合、出力は異なります。sestatus`コマンドを実行して、より良い画像を取得することもできます。sestatusSELinuxが無効になっていない場合、出力には現在のステータス、現在のモード、構成ファイルで定義されているモード、およびポリシータイプが表示されます。28SELinuxが無効になっている場合、出力には次のように表示されます。`コマンドを使用して、強制モードと許容モードを一時的に切り替えることもできます。+」を実行できないことに注意してください。7システムでSELinuxモードを強制モードから許容モードに変更します。enforcingSELinuxポリシーSELinuxのセキュリティエンジンの中心にあるのは_policy_です。ポリシーとは、その名前が示すとおり、システム内のすべてのセキュリティとアクセス権を定義する一連のルールです。「すべて」と言うとき、ユーザー、ロール、プロセス、およびファイルを意味します。ポリシーは、これらの各エンティティが相互にどのように関連するかを定義します。いくつかの基本的な用語ポリシーを理解するには、基本的な用語を学ぶ必要があります。詳細については後で説明しますが、ここでは簡単に紹介します。SELinuxポリシーは、ロールへのユーザーアクセス、ドメインへのロールアクセス、およびタイプへのドメインアクセスを定義します。ユーザーSELinuxには、あらかじめ構築されたユーザーのセットがあります。通常のLinuxユーザーアカウントはすべて、1人以上のSELinuxユーザーにマップされます。Linuxでは、ユーザーがプロセスを実行します。*がviエディターでドキュメントを開く(viプロセスを実行するjoのアカウントになる)か、httpdデーモンを実行するサービスアカウントと同じくらい簡単です。SELinuxの世界では、プロセス(デーモンまたは実行中のプログラム)は_subject_と呼ばれます。役割_role_は、ユーザーとプロセスの間にあるゲートウェイのようなものです。ロールは、そのプロセスにアクセスできるユーザーを定義します。役割はグループのようなものではなく、フィルターのようなものです。ユーザーは、役割が許可する限り、いつでも役割を入力または引き受けることができます。SELinuxポリシーのロールの定義は、どのユーザーがそのロールにアクセスできるかを定義します。ロール自体がアクセスできるプロセスドメインも定義します。*(RBAC)として知られているものを実装するため、役割が働き始めます。件名とオブジェクト_subject_はプロセスであり、_object_に影響を及ぼす可能性があります。SELinuxの_object_は、実行可能なすべてのものです。これには、ファイル、ディレクトリ、ポート、tcpソケット、カーソル、またはXサーバーがあります。サブジェクトがオブジェクトに対して実行できるアクションは、サブジェクトの_permissions_です。ドメインはサブジェクト用です_domain_は、SELinuxサブジェクト(プロセス)を実行できるコンテキストです。そのコンテキストは、サブジェクトのラッパーのようなものです。プロセスにできることとできないことを伝えます。ドメインは、サブジェクトがアクセスできるファイル、ディレクトリ、リンク、デバイス、またはポートを定義します。タイプはオブジェクト用_type_は、ファイルの目的を規定するファイルのコンテキストのコンテキストです。+`ディレクトリに属する​​か、ファイルの所有者が特定のSELinuxユーザーであることが示される場合があります。ファイルのコンテキストは、SELinuxの用語では_type_と呼ばれます。SELinuxポリシーとは何ですか?SELinuxポリシーは、ロールへのユーザーアクセス、ドメインへのロールアクセス、およびタイプへのドメインアクセスを定義します。最初に、ユーザーはロールの入力を許可され、次にロールがドメインへのアクセスを許可される必要があります。ドメインは、特定の種類のファイルのみにアクセスするように制限されています。ポリシー自体は、まあまあのユーザーはまあまあのロールのみを引き受けることができ、それらのロールはまあまあのドメインのみにアクセスすることを許可されるというルールの束です。ドメインは順番にファイルにのみアクセスできます。次の図は、概念を示しています。Enforcement(TE)と呼ばれます。ポリシーのトピックに戻ると、SELinuxポリシーの実装も通常、デフォルトで「ターゲット」になっています。特定のプロセスのみが対象となります)。対象外のドメインは、制限のないドメインで実行されます。別の方法は、ポリシーで承認されない限り、すべてのアクセスが拒否されるデフォルト拒否モデルです。これは非常に安全な実装になりますが、これはまた、開発者がすべての可能なオブジェクトに対してすべてのプロセスが必要とする可能性のあるあらゆる許可を予測する必要があることを意味します。デフォルトの動作では、SELinuxは特定のプロセスのみに関係します。SELinuxポリシーの動作*SELinuxポリシーは、従来のDACセキュリティを置き換えるものではありません。DACルールがファイルへのユーザーアクセスを禁止している場合、最初の防衛線でアクセスが既にブロックされているため、SELinuxポリシールールは評価されません。DACセキュリティが評価されました。SELinux対応システムが起動すると、ポリシーがメモリにロードされます。SELinuxポリシーは、ブート時にロードされるカーネルモジュールによく似たモジュラー形式で提供されます。カーネルモジュールと同様に、実行時にメモリに動的に追加および削除できます。store_は、ロードされたモジュールを追跡します。`コマンドはポリシーストア名を表示します。+`コマンドは、現在メモリにロードされているSELinuxポリシーモジュールを一覧表示します。less出力は次のようになります。+`は、SELinuxポリシーモジュールのインストール、削除、リロード、アップグレード、有効化、無効化など、他の多くのタスクに使用できます。モジュールファイルの場所を知りたいと思うでしょう。最新のディストリビューションのほとんどには、SELinuxパッケージの一部としてモジュールのバイナリバージョンが含まれています。ポリシーファイルの拡張子は.ppです。7の場合、次のコマンドを実行できます。+」のファイルがいくつか表示されます。+`ファイルは人間が読むことはできません。SELinuxのモジュール化の仕組みは、システムの起動時に、ポリシーモジュールが「アクティブポリシー」と呼ばれるものに結合されることです。次に、このポリシーがメモリにロードされます。+`ディレクトリの下にあります。/etc/selinux/targeted/policy/アクティブなポリシーが表示されます。policy.29SELinuxブール設定の変更ポリシーモジュールファイルを読むことはできませんが、その設定を調整する簡単な方法があります。_booleans_を介して行われます。+`コマンドを実行しましょう。lessこれは、オンまたはオフにできるさまざまなスイッチ、その機能、および現在のステータスを示しています。anyfile......最初のオプションでは、FTPデーモンがユーザーのホームディレクトリにアクセスできます。現在、設定はオフになっています。+`コマンドを使用できます。例として、匿名FTP書き込みアクセスを考えてみましょう。ftpd_anon_writeこれは、現在スイッチがオフになっていることを示しています。off次に、ブール値を変更して有効にします。on値を再度確認すると、変更が表示されます。on変更されたブール値は永続的ではありません。再起動後に元の値に戻ります。+`コマンドで-Pスイッチを使用できます。結論このチュートリアルの最初の部分では、SELinuxに関するいくつかの基本的な概念を理解しようとしました。SELinuxがシステムを保護する方法、有効にする方法、実行できるモードを確認しました。SELinuxポリシーのトピックにも触れました。[SELinuxを使用してアクセスを制限する方法を学びますファイルとプロセスへ]。