セキュリティーの強化
Red Hat Enterprise Linux 9 システムのセキュリティー強化
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 インストール中およびインストール直後の RHEL の保護 リンクのコピーリンクがクリップボードにコピーされました!
セキュリティーへの対応は、Red Hat Enterprise Linux をインストールする前にすでに始まっています。最初からシステムのセキュリティーを設定することで、追加のセキュリティー設定を実装することがより簡単になります。
1.1. ディスクパーティション設定 リンクのコピーリンクがクリップボードにコピーされました!
ディスクパーティション設定の推奨プラクティスは、ベアメタルマシンへのインストールと、インストール済みオペレーティングシステムを含む仮想ディスクハードウェアおよびファイルシステムの調整をサポートする仮想化環境またはクラウド環境とでは異なります。
ベアメタルインストール でデータの分離と保護を確実に行うには、/boot、/、/home、/tmp、/var/tmp/ ディレクトリー用に個別のパーティションを作成します。
/boot-
このパーティションは、システムの起動時にシステムが最初に読み込むパーティションです。RHEL 9 でシステムを起動するのに使用するブートローダーとカーネルイメージはこのパーティションに保存されます。このパーティションは暗号化しないでください。このパーティションが
/に含まれており、そのパーティションが暗号化されているなどの理由で利用できなくなると、システムを起動できなくなります。 /home-
ユーザーデータ (
/home) が別のパーティションではなく/に保存されていると、このパーティションが満杯になり、オペレーティングシステムが不安定になる可能性があります。また、システムを、RHEL 9 の次のバージョンにアップグレードする際に、/homeパーティションにデータを保存できると、このデータはインストール時に上書きされないため、アップグレードが非常に簡単になります。root パーティション (/) が破損すると、データが完全に失われます。したがって、パーティションを分けることが、データ損失に対する保護につながります。また、このパーティションを、頻繁にバックアップを作成する対象にすることも可能です。 /tmpおよび/var/tmp/-
/tmpディレクトリーおよび/var/tmp/ディレクトリーは、どちらも長期保存の必要がないデータを保存するために使用されます。しかし、このいずれかのディレクトリーでデータがあふれると、ストレージ領域がすべて使用されてしまう可能性があります。このディレクトリーは/に置かれているため、こうした状態が発生すると、システムが不安定になり、クラッシュする可能性があります。そのため、このディレクトリーは個別のパーティションに移動することが推奨されます。
仮想マシンまたはクラウドインスタンス の場合、/boot、/home、/tmp、および /var/tmp パーティションの分離は任意です。/ パーティションがいっぱいになり始めたら、仮想ディスクのサイズとそのパーティションを拡張できるためです。/ パーティションがいっぱいにならないように、その使用状況を定期的にチェックするモニタリングを設定してから、仮想ディスクのサイズを適宜拡張してください。
インストールプロセス時に、パーティションを暗号化するオプションがあります。パスフレーズを入力する必要があります。これは、パーティションのデータを保護するのに使用されるバルク暗号鍵を解除する鍵として使用されます。
1.2. インストールプロセス時のネットワーク接続の制限 リンクのコピーリンクがクリップボードにコピーされました!
RHEL9 をインストールする際に使用するインストールメディアは、特定のタイミングで作成されたスナップショットです。そのため、セキュリティー修正が最新のものではなく、このインストールメディアで設定するシステムが公開されてから修正された特定の問題に対して安全性に欠ける場合があります。
脆弱性が含まれる可能性のあるオペレーティングシステムをインストールする場合には、必ず、公開レベルを、必要最小限のネットワークゾーンに限定してください。最も安全な選択肢は、インストールプロセス時にマシンをネットワークから切断した状態にする “ネットワークなし” ゾーンです。インターネット接続からのリスクが最も高く、一方で LAN またはイントラネット接続で十分な場合もあります。セキュリティーのベストプラクティスに従い、ネットワークから RHEL 9 をインストールする場合は、お使いのリポジトリーに最も近いゾーンを選択してください。
1.3. 必要なパッケージの最小限のインストール リンクのコピーリンクがクリップボードにコピーされました!
コンピューターの各ソフトウェアには脆弱性が潜んでいる可能性があるため、実際に使用するパッケージのみをインストールすることがベストプラクティスになります。インストールを DVD から行う場合は、インストールしたいパッケージのみを選択するようにします。その他のパッケージが必要になる場合は、後でいつでもシステムに追加できます。
1.4. インストール後の手順 リンクのコピーリンクがクリップボードにコピーされました!
以下は、RHEL 9 のインストール直後に実行する必要があるセキュリティー関連の手順です。
システムを更新します。root で以下のコマンドを実行します。
dnf update
# dnf updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールサービスの
firewalldは、Red Hat Enterprise Linux のインストールによって自動的に有効になりますが、キックスタート設定などで明示的に無効になっている場合があります。このような場合は、ファイアウォールを再度有効にしてください。firewalldを開始するには、root で次のコマンドを実行します。systemctl start firewalld systemctl enable firewalld
# systemctl start firewalld # systemctl enable firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow セキュリティーを強化するために、不要なサービスは無効にしてください。たとえば、コンピューターにプリンターがインストールされていない場合は、次のコマンドを使用して、
cupsサービスを無効にします。systemctl disable cups
# systemctl disable cupsCopy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブなサービスを確認するには、次のコマンドを実行します。
systemctl list-units | grep service
$ systemctl list-units | grep serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. Web コンソールを使用して CPU のセキュリティーの問題を防ぐために SMT を無効化する手順 リンクのコピーリンクがクリップボードにコピーされました!
CPU SMT (Simultaneous Multi Threading) を悪用する攻撃が発生した場合に SMT を無効にします。SMT を無効にすると、L1TF や MDS などのセキュリティー脆弱性を軽減できます。
SMT を無効にすると、システムパフォーマンスが低下する可能性があります。
前提条件
- RHEL 9 Web コンソールがインストールされている。
- cockpit サービスが有効になっている。
ユーザーアカウントが Web コンソールにログインできる。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
手順
RHEL 9 Web コンソールにログインします。
詳細は、Web コンソールへのログイン を参照してください。
- Overview タブで、System information フィールドを見つけて、View hardware details をクリックします。
CPU Security 行で、Mitigations をクリックします。
このリンクがない場合は、システムが SMT に対応していないため、攻撃を受けません。
- CPU Security Toggles テーブルで、Disable simultaneous multithreading (nosmt) オプションに切り替えます。
- ボタンをクリックします。
システムの再起動後、CPU は SMT を使用しなくなりました。
第2章 FIPS モードへの RHEL の切り替え リンクのコピーリンクがクリップボードにコピーされました!
連邦情報処理標準 (FIPS) 140-3 で義務付けられている暗号化モジュールの自己チェックを有効にするには、FIPS モードで RHEL 9 を操作する必要があります。FIPS 準拠を目指す場合は、FIPS モードでインストールを開始することを推奨します。
暗号化モジュールの検証ステータスは、Red Hat カスタマーポータルの Product compliance ページの FIPS - Federal Information Processing Standards セクションで確認できます。
2.1. Federal Information Processing Standards 140 および FIPS モード リンクのコピーリンクがクリップボードにコピーされました!
Federal Information Processing Standards (FIPS) Publication 140 は、暗号化モジュールの品質を確保するために National Institute of Standards and Technology (NIST) によって開発された一連のコンピューターセキュリティー標準です。FIPS 140 標準は、暗号化ツールがアルゴリズムを正しく実装できるようにします。ランタイム暗号アルゴリズムと整合性セルフテストは、システムが標準の要件を満たす暗号を使用していることを確認するためのメカニズムの一部です。
FIPS モードの RHEL
RHEL システムで FIPS 承認のアルゴリズムだけを使用してすべての暗号鍵を生成および使用するには、RHEL を FIPS モードに切り替える必要があります。
次のいずれかの方法を使用して、FIPS モードを有効にできます。
- FIPS モードでのインストールの開始
- インストール後に FIPS モードにシステムを切り替えます。
FIPS 準拠を目指す場合は、FIPS モードでインストールを開始してください。これにより、デプロイ済みのシステムの変換に伴う暗号鍵マテリアルの再生成と、変換後のシステムのコンプライアンス再評価を行う必要がなくなります。
FIPS 準拠のシステムを運用するには、すべての暗号化キーマテリアルを FIPS モードで作成します。さらに、暗号鍵マテリアルは、セキュアにラップされていない限り、絶対に FIPS 環境の外部に出さないでください。また、絶対に FIPS 以外の環境でラップを解除しないでください。
Red Hat カスタマーポータルの Product compliance ページの FIPS - Federal Information Processing Standards セクションで、選択した RHEL マイナーリリースの暗号化モジュール検証ステータスの概要を確認できます。
インストール後に FIPS モードに切り替える
fips-mode-setup ツールを使用してシステムを FIPS モードに切り替えても、FIPS 140 標準への準拠は保証されません。システムを FIPS モードに設定した後にすべての暗号キーを再生成することは、可能でない場合があります。たとえば、ユーザーの暗号キーを含む既存の IdM レルムの場合、すべてのキーを再生成することはできません。FIPS モードでインストールを開始できない場合は、インストール後の設定手順を実行したり、ワークロードをインストールしたりする前に、インストール後の最初の手順として常に FIPS モードを有効にしてください。
fips-mode-setup ツールも内部的に FIPS システム全体の暗号化ポリシーを使用します。ただし、update-crypto-policies --set FIPS コマンドが実行する内容に加え、fips-mode-setup は、fips-finish-install ツールを使用して FIPS dracut モジュールを確実にインストールします。また、fips=1 ブートオプションをカーネルコマンドラインに追加し、初期 RAM ディスクを再生成します。
さらに、FIPS モードで必要な制限の適用は、/proc/sys/crypto/fips_enabled ファイルの内容によって異なります。ファイルに 1 が含まれている場合、RHEL コア暗号化コンポーネントは、FIPS 承認の暗号化アルゴリズムの実装のみを使用するモードに切り替わります。/proc/sys/crypto/fips_enabled に 0 が含まれている場合、暗号化コンポーネントは FIPS モードを有効にしません。
暗号化ポリシーにおける FIPS
FIPS システム全体の暗号化ポリシーは、より高いレベルの制限を設定するのに役立ちます。したがって、暗号化の俊敏性をサポートする通信プロトコルは、選択時にシステムが拒否する暗号をアナウンスしません。たとえば、ChaCha20 アルゴリズムは FIPS によって承認されておらず、FIPS 暗号化ポリシーは、TLS サーバーおよびクライアントが TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS 暗号スイートをアナウンスしないようにします。これは、そのような暗号を使用しようとすると失敗するためです。
RHEL を FIPS モードで操作し、独自の FIPS モード関連の設定オプションを提供するアプリケーションを使用する場合は、これらのオプションと対応するアプリケーションのガイダンスを無視してください。FIPS モードで実行されているシステムとシステム全体の暗号化ポリシーは、FIPS 準拠の暗号化のみを適用します。たとえば、システムが FIPS モードで実行されている場合、Node.js 設定オプション --enable-fips は無視されます。FIPS モードで実行されていないシステムで --enable-fips オプションを使用すると、FIPS-140 準拠の要件を満たせなくなります。
FIPS モードで実行されている RHEL 9.2 以降のシステムでは、FIPS 140-3 標準の要件に従って、TLS 1.2 接続で Extended Master Secret (EMS) 拡張機能 (RFC 7627) を使用する必要があります。したがって、EMS または TLS 1.3 をサポートしていないレガシークライアントは、FIPS モードで実行されている RHEL 9 サーバーに接続できません。FIPS モードの RHEL 9 クライアントは、EMS なしで TLS 1.2 のみをサポートするサーバーに接続できません。詳細は、Red Hat ナレッジベースのソリューション TLS Extension "Extended Master Secret" enforced with Red Hat Enterprise Linux 9.2 を参照してください。
2.2. FIPS モードが有効なシステムのインストール リンクのコピーリンクがクリップボードにコピーされました!
連邦情報処理規格 (FIPS) 140 で義務付けられている暗号化モジュールの自己チェックを有効にするには、システムのインストール時に FIPS モードを有効にします。
RHEL のインストール中に FIPS モードを有効にするだけで、システムは FIPS で承認されるアルゴリズムと継続的な監視テストですべての鍵を生成するようになります。
FIPS モードのセットアップを完了した後、FIPS モードをオフにすると、システムが必ず不整合な状態になります。このような変更が必要な場合、システムを完全に再インストールするのが唯一の正しい方法です。
手順
-
システムのインストール時に
fips=1オプションをカーネルコマンドラインに追加します。 - ソフトウェアの選択段階で、サードパーティーのソフトウェアをインストールしないでください。
- インストール後に、システムは FIPS モードで自動的に起動します。
検証
システムが起動したら、FIPS モードが有効になっていることを確認します。
fips-mode-setup --check FIPS mode is enabled.
$ fips-mode-setup --check FIPS mode is enabled.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. FIPS モードへのシステムの切り替え リンクのコピーリンクがクリップボードにコピーされました!
システム全体の暗号化ポリシーには、連邦情報処理標準 (FIPS) Publication 140 の要件に従って暗号化アルゴリズムを有効にするポリシーレベルが含まれています。FIPS モードを有効または無効にする fips-mode-setup ツールは、内部的に FIPS のシステム全体の暗号化ポリシーを使用します。
FIPS システム全体の暗号化ポリシーを使用してシステムを FIPS モードに切り替えても、FIPS 140 標準への準拠は保証されません。システムを FIPS モードに設定した後にすべての暗号キーを再生成することは、可能でない場合があります。たとえば、ユーザーの暗号キーを含む既存の IdM レルムの場合、すべてのキーを再生成することはできません。
RHEL のインストール中に FIPS モード を有効にするだけで、システムは FIPS で承認されるアルゴリズムと継続的な監視テストですべてのキーを生成するようになります。
fips-mode-setup ツールは、FIPS ポリシーを内部的に使用します。ただし、--set FIPS オプションを指定した update-crypto-policies コマンドが実行する内容に加え、fips-mode-setup は、fips-finish-install ツールを使用して FIPS dracut モジュールを確実にインストールします。また、fips=1 ブートオプションをカーネルコマンドラインに追加し、初期 RAM ディスクを再生成します。
FIPS モードのセットアップを完了した後、FIPS モードをオフにすると、システムが必ず不整合な状態になります。このような変更が必要な場合、システムを完全に再インストールするのが唯一の正しい方法です。
手順
システムを FIPS モードに切り替えるには、以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動して、カーネルを FIPS モードに切り替えます。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
システムが再起動したら、FIPS モードの現在の状態を確認できます。
fips-mode-setup --check FIPS mode is enabled.
# fips-mode-setup --check FIPS mode is enabled.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. コンテナーでの FIPS モードの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Federal Information Processing Standard Publication 140-2 (FIPS モード) で義務付けられている暗号化モジュールのセルフチェックの完全なセットを有効にするには、ホストシステムのカーネルが FIPS モードで実行されている必要があります。podman ユーティリティーは、サポートされているコンテナーで FIPS モードを自動的に有効にします。
コンテナーで fips-mode-setup コマンドが正しく機能せず、このシナリオでこのコマンドを使用して FIPS モードを有効にしたり確認することができません。
前提条件
- ホストシステムが FIPS モードである必要があります。
手順
-
FIPS モードが有効になっているシステムでは、
podmanユーティリティーはサポートされているコンテナーで FIPS モードを自動的に有効にします。
2.5. FIPS 140-3 に準拠していない暗号化を使用している RHEL アプリケーションのリスト リンクのコピーリンクがクリップボードにコピーされました!
FIPS 140-3 などの関連するすべての暗号化認定に合格するには、コア暗号化コンポーネントセットのライブラリーを使用します。これらのライブラリーは、libgcrypt を除き、RHEL システム全体の暗号化ポリシーに従います。
コア暗号化コンポーネントの概要、そのコンポーネントの選択方法、オペレーティングシステムへの統合方法、ハードウェアセキュリティーモジュールおよびスマートカードのサポート方法、暗号化による認定の適用方法の概要は、Red Hat ナレッジベースの記事 RHEL core cryptographic components を参照してください。
FIPS 140-3 に準拠していない暗号化を使用している RHEL 9 アプリケーションのリスト
- Bacula
- CRAM-MD5 認証プロトコルを実装します。
- Cyrus SASL
- SCRAM-SHA-1 認証方式を使用します。
- Dovecot
- SCRAM-SHA-1 を使用します。
- Emacs
- SCRAM-SHA-1 を使用します。
- FreeRADIUS
- 認証プロトコルに MD5 および SHA-1 を使用します。
- Ghostscript
- ドキュメントを暗号化および復号化するためのカスタムの cryptography 実装 (MD5、RC4、SHA-2、AES)
- GRUB
-
SHA-1 を必要とするレガシーファームウェアプロトコルをサポートし、
libgcryptライブラリーを含みます。 - iPXE
- TLS スタックを実装します。
- Kerberos
- SHA-1 (Windows との相互運用性) のサポートを維持します。
- Lasso
-
lasso_wsse_username_token_derive_key ()鍵導出関数 (KDF) は SHA-1 を使用します。 - MariaDB、MariaDB コネクター
-
mysql_native_password認証プラグインは SHA-1 を使用します。 - MySQL
-
mysql_native_passwordは SHA-1 を使用します。 - OpenIPMI
- RAKP-HMAC-MD5 認証方式は、FIPS の使用が承認されておらず、FIPS モードでは機能しません。
- OVMF (UEFI ファームウェア)、Edk2、shim
- 完全な暗号スタック (OpenSSL ライブラリーの埋め込みコピー)。
- Perl
- HMAC、HMAC-SHA1、HMAC-MD5、SHA-1、SHA-224 などを使用します。
- Pidgin
- DES および RC4 暗号を実装します。
- PKCS #12 ファイル処理 (OpenSSL、GnuTLS、NSS、Firefox、Java)
- ファイル全体の HMAC の計算に使用されるキー派生関数 (KDF) が FIPS で承認されていないため、PKCS #12 のすべての使用は FIPS に準拠していません。そのため、PKCS #12 ファイルは、FIPS 準拠のためにプレーンテキストと見なされます。鍵転送の目的で、FIPS 承認の暗号化方式を使用して PKCS #12 (.p12) ファイルをラップします。
- Poppler
- 元の PDF (MD5、RC4、SHA-1 など) に存在する場合は、許可されていないアルゴリズムに基づいて署名、パスワード、および暗号化を使用して PDF を保存できます。
- PostgreSQL
- Blowfish、DES、MD5 を実装します。KDF は SHA-1 を使用します。
- QAT エンジン
- 暗号化プリミティブのハードウェアおよびソフトウェア実装 (RSA、EC、DH、AES、…)
- Ruby
- 安全でないライブラリー関数 MD5 および SHA-1 を提供します。
- Samba
- RC4 および DES (Windows との相互運用性) のサポートを維持します。
- Syslinux
- BIOS パスワードは SHA-1 を使用します。
- SWTPM
- OpenSSL の使用時に FIPS モードを明示的に無効にします。
- Unbound
- DNS 仕様では、DNSSEC リゾルバーが検証のために DNSKEY レコードで SHA-1 ベースのアルゴリズムを使用する必要があります。
- Valgrind
- AES、SHA ハッシュ。[1]
- zip
- パスワードを使用してアーカイブを暗号化および復号化するためのカスタム暗号化実装 (セキュアでない PKWARE 暗号化アルゴリズム)。
第3章 システム全体の暗号化ポリシーの使用 リンクのコピーリンクがクリップボードにコピーされました!
システム全体の暗号化ポリシーは、コア暗号化サブシステムを設定するシステムコンポーネントで、TLS、IPsec、SSH、DNSSec、および Kerberos の各プロトコルに対応します。これにより、管理者が選択できる小規模セットのポリシーを提供します。
3.1. システム全体の暗号化ポリシー リンクのコピーリンクがクリップボードにコピーされました!
システム全体のポリシーを設定すると、RHEL のアプリケーションはそのポリシーに従い、ポリシーを満たしていないアルゴリズムやプロトコルを使用するように明示的に要求されない限り、その使用を拒否します。つまり、システムが提供した設定で実行する際に、デフォルトのアプリケーションの挙動にポリシーを適用しますが、必要な場合は上書きできます。
RHEL 9 には、以下の定義済みポリシーが含まれています。
DEFAULT- デフォルトのシステム全体の暗号化ポリシーレベルで、現在の脅威モデルに対して安全なものです。TLS プロトコルの 1.2 と 1.3、IKEv2 プロトコル、および SSH2 プロトコルが使用できます。RSA 鍵と Diffie-Hellman パラメーターは長さが 2048 ビット以上であれば許容されます。
LEGACY- Red Hat Enterprise Linux 6 以前との互換性を最大限に確保します。攻撃対象領域が増えるため、セキュリティーが低下します。SHA-1 は、TLS ハッシュ、署名、およびアルゴリズムとして使用できます。CBC モードの暗号は、SSH と併用できます。GnuTLS を使用するアプリケーションは、SHA-1 で署名した証明書を許可します。TLS プロトコルの 1.2 と 1.3、IKEv2 プロトコル、および SSH2 プロトコルが使用できます。RSA 鍵と Diffie-Hellman パラメーターは長さが 2048 ビット以上であれば許容されます。
FUTURE将来の潜在的なポリシーをテストすることを目的とした、より厳格な将来を見据えたセキュリティーレベル。このポリシーでは、DNSSec または HMAC としての SHA-1 の使用は許可されません。SHA2-224 および SHA3-224 ハッシュは拒否されます。128 ビット暗号は無効になります。CBC モードの暗号は、Kerberos を除き無効になります。TLS プロトコルの 1.2 と 1.3、IKEv2 プロトコル、および SSH2 プロトコルが使用できます。RSA 鍵と Diffie-Hellman パラメーターは、ビット長が 3072 以上だと許可されます。システムが公共のインターネット上で通信する場合、相互運用性の問題が発生する可能性があります。
重要カスタマーポータル API の証明書が使用する暗号化鍵は
FUTUREのシステム全体の暗号化ポリシーが定義する要件を満たさないので、現時点でredhat-support-toolユーティリティーは、このポリシーレベルでは機能しません。この問題を回避するには、カスタマーポータル API への接続中に
DEFAULT暗号化ポリシーを使用します。FIPSFIPS 140 要件に準拠します。RHEL システムを FIPS モードに切り替える
fips-mode-setupツールは、このポリシーを内部的に使用します。FIPSポリシーに切り替えても、FIPS 140 標準への準拠は保証されません。また、システムを FIPS モードに設定した後、すべての暗号キーを再生成する必要があります。多くのシナリオでは、これは不可能です。また、RHEL はシステム全体のサブポリシー
FIPS:OSPPを提供します。これには、Common Criteria (CC) 認証に必要な暗号化アルゴリズムに関する追加の制限が含まれています。このサブポリシーを設定すると、システムの相互運用性が低下します。たとえば、3072 ビットより短い RSA 鍵と DH 鍵、追加の SSH アルゴリズム、および複数の TLS グループを使用できません。また、FIPS:OSPPを設定すると、Red Hat コンテンツ配信ネットワーク (CDN) 構造への接続が防止されます。さらに、FIPS:OSPPを使用する IdM デプロイメントには Active Directory (AD) を統合できません。FIPS:OSPPを使用する RHEL ホストと AD ドメイン間の通信が機能しないか、一部の AD アカウントが認証できない可能性があります。注記FIPS:OSPP暗号化サブポリシーを設定すると、システムが CC 非準拠になります。RHEL システムを CC 標準に準拠させる唯一の正しい方法は、cc-configパッケージで提供されているガイダンスに従うことです。認定済み RHEL バージョン、検証レポート、CC ガイドへのリンクのリストについては、Red Hat カスタマーポータルの Product compliance ページの Common Criteria セクションを参照してください。
Red Hat は、LEGACY ポリシーを使用する場合を除き、すべてのライブラリーがセキュアなデフォルト値を提供するように、すべてのポリシーレベルを継続的に調整します。LEGACY プロファイルはセキュアなデフォルト値を提供しませんが、このプロファイルには、簡単に悪用できるアルゴリズムは含まれていません。このため、提供されたポリシーで有効なアルゴリズムのセットまたは許容可能な鍵サイズは、Red Hat Enterprise Linux の存続期間中に変更する可能性があります。
このような変更は、新しいセキュリティー標準や新しいセキュリティー調査を反映しています。Red Hat Enterprise Linux のライフサイクル全体にわたって特定のシステムとの相互運用性を確保する必要がある場合は、そのシステムと対話するコンポーネントのシステム全体の暗号化ポリシーからオプトアウトするか、カスタム暗号化ポリシーを使用して特定のアルゴリズムを再度有効にする必要があります。
ポリシーレベルで許可されていると記載されている特定のアルゴリズムと暗号は、アプリケーションがそれらをサポートしている場合にのみ使用できます。
LEGACY | DEFAULT | FIPS | FUTURE | |
|---|---|---|---|---|
| IKEv1 | いいえ | いいえ | いいえ | いいえ |
| 3DES | いいえ | いいえ | いいえ | いいえ |
| RC4 | いいえ | いいえ | いいえ | いいえ |
| DH | 最低 2048 ビット | 最低 2048 ビット | 最低 2048 ビット | 最低 3072 ビット |
| RSA | 最低 2048 ビット | 最低 2048 ビット | 最低 2048 ビット | 最低 3072 ビット |
| DSA | いいえ | いいえ | いいえ | いいえ |
| TLS v1.1 以前 | いいえ | いいえ | いいえ | いいえ |
| TLS v1.2 以降 | はい | はい | はい | はい |
| デジタル署名および証明書の SHA-1 | はい | いいえ | いいえ | いいえ |
| CBC モード暗号 | はい | いいえ[a] | いいえ[b] | いいえ[c] |
| 256 ビットより小さい鍵を持つ対称暗号 | はい | はい | はい | いいえ |
[a]
CBC 暗号は SSH で無効になります。
[b]
CBC 暗号は、Kerberos を除くすべてのプロトコルで無効になります。
[c]
CBC 暗号は、Kerberos を除くすべてのプロトコルで無効になります。
| ||||
3.2. システム全体の暗号化ポリシーの変更 リンクのコピーリンクがクリップボードにコピーされました!
update-crypto-policies ツールを使用してシステムを再起動すると、システム全体の暗号化ポリシーを変更できます。
前提条件
- システムの root 権限がある。
手順
オプション: 現在の暗号化ポリシーを表示します。
update-crypto-policies --show DEFAULT
$ update-crypto-policies --show DEFAULTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい暗号化ポリシーを設定します。
update-crypto-policies --set <POLICY> <POLICY>
# update-crypto-policies --set <POLICY> <POLICY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <POLICY>は、設定するポリシーまたはサブポリシー (FUTURE、LEGACY、FIPS:OSPPなど) に置き換えます。システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
現在の暗号化ポリシーを表示します。
update-crypto-policies --show <POLICY>
$ update-crypto-policies --show <POLICY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. システム全体の暗号化ポリシーを以前のリリースと互換性のあるモードに切り替える リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux 9 におけるデフォルトのシステム全体の暗号化ポリシーでは、現在は古くて安全ではないプロトコルは許可されません。Red Hat Enterprise Linux 6 およびそれ以前のリリースとの互換性が必要な場合には、安全でない LEGACY ポリシーレベルを利用できます。
LEGACY ポリシーレベルに設定すると、システムおよびアプリケーションの安全性が低下します。
手順
システム全体の暗号化ポリシーを
LEGACYレベルに切り替えるには、rootで以下のコマンドを実行します。update-crypto-policies --set LEGACY Setting system policy to LEGACY
# update-crypto-policies --set LEGACY Setting system policy to LEGACYCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. SHA-1 を再度有効に リンクのコピーリンクがクリップボードにコピーされました!
署名を作成および検証するための SHA-1 アルゴリズムの使用は、DEFAULT 暗号化ポリシーで制限されています。シナリオで既存またはサードパーティーの暗号署名を検証するために SHA-1 を使用する必要がある場合は、RHEL 9 がデフォルトで提供する SHA1 サブポリシーを適用することで有効にできます。システムのセキュリティーが弱くなることに注意してください。
前提条件
-
このシステムは、
DEFAULTシステム全体の暗号化ポリシーを使用します。
手順
SHA1サブポリシーをDEFAULT暗号化ポリシーに適用します。update-crypto-policies --set DEFAULT:SHA1 Setting system policy to DEFAULT:SHA1 Note: System-wide crypto policies are applied on application start-up. It is recommended to restart the system for the change of policies to fully take place.
# update-crypto-policies --set DEFAULT:SHA1 Setting system policy to DEFAULT:SHA1 Note: System-wide crypto policies are applied on application start-up. It is recommended to restart the system for the change of policies to fully take place.Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
現在の暗号化ポリシーを表示します。
update-crypto-policies --show DEFAULT:SHA1
# update-crypto-policies --show DEFAULT:SHA1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
update-crypto-policies --set LEGACY コマンドを使用して LEGACY 暗号化ポリシーに切り替えると、署名に対して SHA-1 も有効になります。ただし、LEGACY 暗号化ポリシーは、他の弱い暗号化アルゴリズムも有効にすることで、システムをはるかに脆弱にします。この回避策は、SHA-1 署名以外のレガシー暗号化アルゴリズムを有効にする必要があるシナリオでのみ使用してください。
3.5. Web コンソールでシステム全体の暗号化ポリシーを設定する リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールインターフェイスで、システム全体の暗号化ポリシーとサブポリシーのいずれかを直接設定できます。4 つの事前定義されたシステム全体の暗号化ポリシーに加え、グラフィカルインターフェイスを介して、次のポリシーとサブポリシーの組み合わせを適用することもできます。
DEFAULT:SHA1-
SHA-1アルゴリズムが有効になっているDEFAULTポリシー。 LEGACY:AD-SUPPORT-
Active Directory サービスの相互運用性を向上させる、セキュリティーの低い設定を含む
LEGACYポリシー。 FIPS:OSPP-
Common Criteria for Information Technology Security Evaluation 標準によって要求される追加の制限を含む
FIPSポリシー。
システム全体のサブポリシー FIPS:OSPP には、Common Criteria (CC) 認定に必要な暗号化アルゴリズムに関する追加の制限が含まれています。そのため、このサブポリシーを設定すると、システムの相互運用性が低下します。たとえば、3072 ビットより短い RSA 鍵と DH 鍵、追加の SSH アルゴリズム、および複数の TLS グループを使用できません。また、FIPS:OSPP を設定すると、Red Hat コンテンツ配信ネットワーク (CDN) 構造への接続が防止されます。さらに、FIPS:OSPP を使用する IdM デプロイメントには Active Directory (AD) を統合できません。FIPS:OSPP を使用する RHEL ホストと AD ドメイン間の通信が機能しないか、一部の AD アカウントが認証できない可能性があります。
FIPS:OSPP 暗号化サブポリシーを設定すると、システムが CC 非準拠になる ことに注意してください。RHEL システムを CC 標準に準拠させる唯一の正しい方法は、cc-config パッケージで提供されているガイダンスに従うことです。認定された RHEL バージョン、検証レポート、および National Information Assurance Partnership (NIAP) の Web サイトでホストされる CC ガイドへのリンクのリストは、Red Hat カスタマーポータルページの Product compliance の Common Criteria セクションを参照してください。
前提条件
- RHEL 9 Web コンソールがインストールされている。
- cockpit サービスが有効になっている。
ユーザーアカウントが Web コンソールにログインできる。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
-
root特権、またはsudoを使用して管理コマンドを入力する権限がある。
手順
RHEL 9 Web コンソールにログインします。
詳細は、Web コンソールへのログイン を参照してください。
Overview ページの Configuration カードで、Crypto policy の横にある現在のポリシー値をクリックします。
Change crypto policy ダイアログウィンドウで、システムで使用を開始するポリシーをクリックします。
- ボタンをクリックします。
検証
再起動後、Web コンソールに再度ログインし、暗号化ポリシー の値が選択したものと一致していることを確認します。
あるいは、
update-crypto-policies --showコマンドを入力して、現在のシステム全体の暗号化ポリシーをターミナルに表示することもできます。
3.6. システム全体の暗号化ポリシーからアプリケーションを除外する リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションで使用される暗号化関連の設定をカスタマイズする必要がある場合は、サポートされる暗号スイートとプロトコルをアプリケーションで直接設定することが推奨されます。
/etc/crypto-policies/back-ends ディレクトリーからアプリケーション関連のシンボリックリンクを削除することもできます。カスタマイズした暗号化設定に置き換えることもできます。この設定により、除外されたバックエンドを使用するアプリケーションに対するシステム全体の暗号化ポリシーが使用できなくなります。この修正は、Red Hat ではサポートされていません。
3.6.1. システム全体の暗号化ポリシーをオプトアウトする例 リンクのコピーリンクがクリップボードにコピーされました!
wget
wget ネットワークダウンローダーで使用される暗号化設定をカスタマイズするには、--secure-protocol オプションおよび --ciphers オプションを使用します。以下に例を示します。
wget --secure-protocol=TLSv1_1 --ciphers="SECURE128" https://example.com
$ wget --secure-protocol=TLSv1_1 --ciphers="SECURE128" https://example.com
詳細は、wget(1) man ページの HTTPS (SSL/TLS) Options のセクションを参照してください。
curl
curl ツールで使用する暗号を指定するには、--ciphers オプションを使用して、その値に、コロンで区切った暗号化のリストを指定します。以下に例を示します。
curl https://example.com --ciphers '@SECLEVEL=0:DES-CBC3-SHA:RSA-DES-CBC3-SHA'
$ curl https://example.com --ciphers '@SECLEVEL=0:DES-CBC3-SHA:RSA-DES-CBC3-SHA'
詳細は、curl(1) の man ページを参照してください。
Firefox
Web ブラウザーの Firefox でシステム全体の暗号化ポリシーをオプトアウトできない場合でも、Firefox の設定エディターで、対応している暗号と TLS バージョンをさらに詳細に制限できます。アドレスバーに about:config と入力し、必要に応じて security.tls.version.min の値を変更します。たとえば、security.tls.version.min を 1 に設定すると、最低でも TLS 1.0 が必要になり、security.tls.version.min 2 が TLS 1.1 になります。
OpenSSH
OpenSSH サーバーのシステム全体の暗号化ポリシーをオプトアウトするには、/etc/ssh/sshd_config.d/ ディレクトリーにあるドロップイン設定ファイルに暗号化ポリシーを指定します。このとき、辞書式順序で 50-redhat.conf ファイルよりも前に来るように、50 未満の 2 桁の数字接頭辞と、.conf という接尾辞を付けます (例: 49-crypto-policy-override.conf)。
詳細は、sshd_config(5) の man ページを参照してください。
OpenSSH クライアントのシステム全体の暗号化ポリシーをオプトアウトするには、次のいずれかのタスクを実行します。
-
指定のユーザーの場合は、
~/.ssh/configファイルのユーザー固有の設定でグローバルのssh_configを上書きします。 -
システム全体の場合は、
/etc/ssh/ssh_config.d/ディレクトリーにあるドロップイン設定ファイルに暗号化ポリシーを指定します。このとき、辞書式順序で50-redhat.confファイルよりも前に来るように、50 未満の 2 桁の接頭辞と、.confという接尾辞を付けます (例:49-crypto-policy-override.conf)。
詳細は、ssh_config(5) の man ページを参照してください。
Libreswan
詳細は、Securing networks の Configuring IPsec connections that opt out of the system-wide crypto policies を参照してください。
3.7. サブポリシーを使用したシステム全体の暗号化ポリシーのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
この手順を使用して、有効な暗号化アルゴリズムまたはプロトコルのセットを調整します。
既存のシステム全体の暗号化ポリシーの上にカスタムサブポリシーを適用するか、そのようなポリシーを最初から定義することができます。
スコープが設定されたポリシーの概念により、バックエンドごとに異なるアルゴリズムセットを有効にできます。各設定ディレクティブは、特定のプロトコル、ライブラリー、またはサービスに限定できます。
また、ディレクティブでは、ワイルドカードを使用して複数の値を指定する場合にアスタリスクを使用できます。
/etc/crypto-policies/state/CURRENT.pol ファイルには、ワイルドカードデプロイメント後に現在適用されているシステム全体の暗号化ポリシーのすべての設定がリスト表示されます。暗号化ポリシーをより厳密にするには、/usr/share/crypto-policies/policies/FUTURE.pol ファイルにリストされている値を使用することを検討してください。
サブポリシーの例は、/usr/share/crypto-policies/policies/modules/ ディレクトリーにあります。このディレクトリーのサブポリシーファイルには、コメントアウトされた行に説明が含まれています。
手順
/etc/crypto-policies/policies/modules/ディレクトリーをチェックアウトします。cd /etc/crypto-policies/policies/modules/
# cd /etc/crypto-policies/policies/modules/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 調整用のサブポリシーを作成します。次に例を示します。
touch MYCRYPTO-1.pmod touch SCOPES-AND-WILDCARDS.pmod
# touch MYCRYPTO-1.pmod # touch SCOPES-AND-WILDCARDS.pmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要ポリシーモジュールのファイル名には大文字を使用します。
任意のテキストエディターでポリシーモジュールを開き、システム全体の暗号化ポリシーを変更するオプションを挿入します。次に例を示します。
vi MYCRYPTO-1.pmod
# vi MYCRYPTO-1.pmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow min_rsa_size = 3072 hash = SHA2-384 SHA2-512 SHA3-384 SHA3-512
min_rsa_size = 3072 hash = SHA2-384 SHA2-512 SHA3-384 SHA3-512Copy to Clipboard Copied! Toggle word wrap Toggle overflow vi SCOPES-AND-WILDCARDS.pmod
# vi SCOPES-AND-WILDCARDS.pmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更をモジュールファイルに保存します。
ポリシーの調整を、システム全体の暗号化ポリシーレベル
DEFAULTに適用します。update-crypto-policies --set DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDS
# update-crypto-policies --set DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDSCopy to Clipboard Copied! Toggle word wrap Toggle overflow 暗号化設定を実行中のサービスやアプリケーションで有効にするには、システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
/etc/crypto-policies/state/CURRENT.polファイルに変更が含まれていることを確認します。以下に例を示します。cat /etc/crypto-policies/state/CURRENT.pol | grep rsa_size min_rsa_size = 3072
$ cat /etc/crypto-policies/state/CURRENT.pol | grep rsa_size min_rsa_size = 3072Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.8. システム全体のカスタム暗号化ポリシーの作成および設定 リンクのコピーリンクがクリップボードにコピーされました!
完全なポリシーファイルを作成して使用することで、システム全体の暗号化ポリシーを特定の状況向けにカスタマイズできます。
手順
カスタマイズのポリシーファイルを作成します。
cd /etc/crypto-policies/policies/ touch MYPOLICY.pol
# cd /etc/crypto-policies/policies/ # touch MYPOLICY.polCopy to Clipboard Copied! Toggle word wrap Toggle overflow または、定義されている 4 つのポリシーレベルのいずれかをコピーします。
cp /usr/share/crypto-policies/policies/DEFAULT.pol /etc/crypto-policies/policies/MYPOLICY.pol
# cp /usr/share/crypto-policies/policies/DEFAULT.pol /etc/crypto-policies/policies/MYPOLICY.polCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、テキストエディターでファイルを編集します。以下のようにしてカスタム暗号化ポリシーを使用します。
vi /etc/crypto-policies/policies/MYPOLICY.pol
# vi /etc/crypto-policies/policies/MYPOLICY.polCopy to Clipboard Copied! Toggle word wrap Toggle overflow システム全体の暗号化ポリシーをカスタムレベルに切り替えます。
update-crypto-policies --set MYPOLICY
# update-crypto-policies --set MYPOLICYCopy to Clipboard Copied! Toggle word wrap Toggle overflow 暗号化設定を実行中のサービスやアプリケーションで有効にするには、システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9. crypto_policies RHEL システムロールを使用した FUTURE 暗号化ポリシーによるセキュリティーの強化 リンクのコピーリンクがクリップボードにコピーされました!
crypto_policies RHEL システムロールを使用して、管理対象ノードで FUTURE ポリシーを設定できます。このポリシーは、たとえば次のことを実現するのに役立ちます。
- 将来の新たな脅威への対応: 計算能力の向上を予測します。
- セキュリティーの強化: 強力な暗号化標準により、より長い鍵長とよりセキュアなアルゴリズムを必須にします。
- 高度なセキュリティー標準への準拠: 医療、通信、金融などの分野ではデータの機密性が高く、強力な暗号化を利用できることが重要です。
通常、FUTURE は、機密性の高いデータを扱う環境、将来の規制に備える環境、長期的なセキュリティーストラテジーを採用する環境に適しています。
レガシーのシステムやソフトウェアでは、FUTURE ポリシーによって強制される、より最新しく厳格なアルゴリズムやプロトコルをサポートする必要はありません。たとえば、古いシステムでは TLS 1.3 以上の鍵サイズがサポートされていない可能性があります。これにより互換性の問題が発生する可能性があります。
また、強力なアルゴリズムを使用すると、通常、計算負荷が増加し、システムのパフォーマンスに悪影響が及ぶ可能性があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
crypto_policies_policy: FUTURE-
管理対象ノードで必要な暗号化ポリシー (
FUTURE) を設定します。これは、基本ポリシー、またはいくつかのサブポリシーを含む基本ポリシーのどちらかです。指定した基本ポリシーとサブポリシーが、管理対象ノードで使用可能である必要があります。デフォルト値はnullです。つまり、設定は変更されず、crypto_policiesRHEL システムロールは Ansible fact のみを収集します。 crypto_policies_reboot_ok: true-
すべてのサービスとアプリケーションが新しい設定ファイルを読み取るように、暗号化ポリシーの変更後にシステムを再起動します。デフォルト値は
falseです。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.crypto_policies/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
システム全体のサブポリシー FIPS:OSPP には、Common Criteria (CC) 認定に必要な暗号化アルゴリズムに関する追加の制限が含まれています。そのため、このサブポリシーを設定すると、システムの相互運用性が低下します。たとえば、3072 ビットより短い RSA 鍵と DH 鍵、追加の SSH アルゴリズム、および複数の TLS グループを使用できません。また、FIPS:OSPP を設定すると、Red Hat コンテンツ配信ネットワーク (CDN) 構造への接続が防止されます。さらに、FIPS:OSPP を使用する IdM デプロイメントには Active Directory (AD) を統合できません。FIPS:OSPP を使用する RHEL ホストと AD ドメイン間の通信が機能しないか、一部の AD アカウントが認証できない可能性があります。
FIPS:OSPP 暗号化サブポリシーを設定すると、システムが CC 非準拠になる ことに注意してください。RHEL システムを CC 標準に準拠させる唯一の正しい方法は、cc-config パッケージで提供されているガイダンスに従うことです。認定された RHEL バージョン、検証レポート、および National Information Assurance Partnership (NIAP) の Web サイトでホストされる CC ガイドへのリンクのリストは、Red Hat カスタマーポータルページの Product compliance の Common Criteria セクションを参照してください。
検証
コントロールノードで、たとえば
verify_playbook.ymlという名前の別の Playbook を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
crypto_policies_active-
crypto_policies_policy変数で受け入れられる形式の現在アクティブなポリシー名が含まれているエクスポートされた Ansible fact。
Playbook の構文を検証します。
ansible-playbook --syntax-check ~/verify_playbook.yml
$ ansible-playbook --syntax-check ~/verify_playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Playbook を実行します。
ansible-playbook ~/verify_playbook.yml TASK [debug] ************************** ok: [host] => { "crypto_policies_active": "FUTURE" }$ ansible-playbook ~/verify_playbook.yml TASK [debug] ************************** ok: [host] => { "crypto_policies_active": "FUTURE" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow crypto_policies_active変数は、管理対象ノード上のアクティブなポリシーを示します。
第4章 PKCS #11 で暗号化ハードウェアを使用するようにアプリケーションを設定 リンクのコピーリンクがクリップボードにコピーされました!
スマートカードや、エンドユーザー認証用の暗号化トークン、サーバーアプリケーション用のハードウェアセキュリティーモジュール (HSM) など、専用の暗号化デバイスで秘密情報の一部を分離することで、セキュリティー層が追加されます。RHEL では、PKCS #11 API を使用した暗号化ハードウェアへの対応がアプリケーション間で統一され、暗号ハードウェアでの秘密の分離が複雑なタスクではなくなりました。
4.1. PKCS #11 による暗号化ハードウェアへの対応 リンクのコピーリンクがクリップボードにコピーされました!
Public-Key Cryptography Standard (PKCS) #11 は、暗号化情報を保持し、暗号化機能を実行する暗号化デバイスへのアプリケーションプログラミングインターフェイス (API) を定義します。
PKCS #11 では、各ハードウェアまたはソフトウェアデバイスを統一された方法でアプリケーションに提示するオブジェクトである 暗号化トークン が導入されています。したがって、アプリケーションは、通常はユーザーによって使用されるスマートカードなどのデバイスや、通常はコンピューターによって使用されるハードウェアセキュリティーモジュールを PKCS #11 暗号化トークンとして認識します。
PKCS #11 トークンには、証明書、データオブジェクト、公開鍵、秘密鍵、または秘密鍵を含むさまざまなオブジェクトタイプを保存できます。これらのオブジェクトは、PKCS #11 Uniform Resource Identifier (URI) スキームを通じて一意に識別できます。
PKCS #11 の URI は、オブジェクト属性に従って、PKCS #11 モジュールで特定のオブジェクトを識別する標準的な方法です。これにより、URI の形式で、すべてのライブラリーとアプリケーションを同じ設定文字列で設定できます。
RHEL では、デフォルトでスマートカード用に OpenSC PKCS #11 ドライバーが提供されています。ただし、ハードウェアトークンと HSM には、システムにカウンターパートを持たない独自の PKCS #11 モジュールがあります。この PKCS #11 モジュールは p11-kit ツールで登録できます。これは、システムの登録済みスマートカードドライバーにおけるラッパーとして機能します。
システムで独自の PKCS #11 モジュールを有効にするには、新しいテキストファイルを /etc/pkcs11/modules/ ディレクトリーに追加します。
/etc/pkcs11/modules/ ディレクトリーに新しいテキストファイルを作成すると、独自の PKCS #11 モジュールをシステムに追加できます。たとえば、p11-kit の OpenSC 設定ファイルは、以下のようになります。
cat /usr/share/p11-kit/modules/opensc.module module: opensc-pkcs11.so
$ cat /usr/share/p11-kit/modules/opensc.module
module: opensc-pkcs11.so
4.2. スマートカードに保存した SSH 鍵による認証 リンクのコピーリンクがクリップボードにコピーされました!
スマートカードに ECDSA 鍵と RSA 鍵を作成して保存し、そのスマートカードを使用して OpenSSH クライアントで認証することができます。スマートカード認証は、デフォルトのパスワード認証に代わるものです。
前提条件
-
クライアントで、
openscパッケージをインストールして、pcscdサービスを実行している。
手順
PKCS #11 の URI を含む OpenSC PKCS #11 モジュールが提供する鍵のリストを表示し、その出力を
keys.pubファイルに保存します。ssh-keygen -D pkcs11: > keys.pub
$ ssh-keygen -D pkcs11: > keys.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 公開鍵をリモートサーバーに転送します。
ssh-copy-idコマンドを使用し、前の手順で作成したkeys.pubファイルを指定します。ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
$ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ECDSA 鍵を使用して <ssh-server-example.com> に接続します。鍵を一意に参照する URI のサブセットのみを使用することもできます。次に例を示します。
ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenSSH は
p11-kit-proxyラッパーを使用し、OpenSC PKCS #11 モジュールがp11-kitツールに登録されているため、前のコマンドを簡略化できます。ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow PKCS #11 の URI の
id=の部分を飛ばすと、OpenSSH が、プロキシーモジュールで利用可能な鍵をすべて読み込みます。これにより、必要な入力の量を減らすことができます。ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
~/.ssh/configファイルで同じ URI 文字列を使用して、設定を永続的にすることができます。cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow sshクライアントユーティリティーが、この URI とスマートカードの鍵を自動的に使用するようになります。
4.3. スマートカード上の証明書を使用して認証するアプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションでスマートカードを使用して認証することにより、セキュリティーが強化され、自動化が簡素化される場合があります。次の方法を使用して、Public Key Cryptography Standard (PKCS) #11 URI をアプリケーションに統合できます。
-
FirefoxWeb ブラウザーは、p11-kit-proxyPKCS #11 モジュールを自動的にロードします。つまり、システムで対応しているすべてのスマートカードが自動的に検出されます。TLS クライアント認証を使用する場合、追加のセットアップは必要ありません。サーバーが要求したときにスマートカードの鍵と証明書が自動的に使用されます。 -
アプリケーションが
GnuTLSまたはNSSライブラリーを使用している場合、PKCS #11 URI はすでにサポートされています。また、OpenSSLライブラリーに依存するアプリケーションは、openssl-pkcs11パッケージによって提供されるpkcs11エンジンを通じて、スマートカードを含む暗号化ハードウェアモジュールにアクセスできます。 -
スマートカード上の秘密鍵を操作する必要があり、
NSS、GnuTLS、OpenSSLを使用しないアプリケーションは、特定の PKCS #11 モジュールの PKCS #11 API を使用するのではなく、p11-kitAPI を直接使用して、スマートカードを含む暗号化ハードウェアモジュールを操作できます。 wgetネットワークダウンローダーを使用すると、ローカルに保存された秘密鍵と証明書へのパスの代わりに PKCS #11 URI を指定できます。これにより、安全に保管された秘密鍵と証明書を必要とするタスクのスクリプトの作成が簡素化される可能性があります。以下に例を示します。wget --private-key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --certificate 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/
$ wget --private-key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --certificate 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow また、
curlツールを使用する場合は、PKCS #11 URI を指定することもできます。curl --key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --cert 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/
$ curl --key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --cert 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記PIN は、スマートカードに保存されている鍵へのアクセスを制御するセキュリティー対策であり、設定ファイルにはプレーンテキスト形式の PIN が含まれているため、攻撃者が PIN を読み取れないように追加の保護を検討してください。たとえば、
pin-source属性を使用して、ファイルから PIN を読み取るためのfile:URI を指定できます。詳細は、RFC 7512: PKCS #11 URI Scheme Query Attribute Semantics を参照してください。コマンドパスをpin-source属性の値として使用することには対応していないことに注意してください。
4.4. Apache で秘密鍵を保護する HSM の使用 リンクのコピーリンクがクリップボードにコピーされました!
Apache HTTP サーバーは、ハードウェアセキュリティーモジュール (HSM) に保存されている秘密鍵と連携できます。これにより、鍵の漏えいや中間者攻撃を防ぐことができます。通常、これを行うには、ビジーなサーバーに高パフォーマンスの HSM が必要になります。
HTTPS プロトコルの形式でセキュアな通信を行うために、Apache HTTP サーバー (httpd) は OpenSSL ライブラリーを使用します。OpenSSL は、PKCS #11 にネイティブに対応しません。HSM を使用するには、エンジンインターフェイスを介して PKCS #11 モジュールへのアクセスを提供する openssl-pkcs11 パッケージをインストールする必要があります。通常のファイル名ではなく PKCS #11 の URI を使用すると、/etc/httpd/conf.d/ssl.conf 設定ファイルでサーバーの鍵と証明書を指定できます。以下に例を示します。
SSLCertificateFile "pkcs11:id=%01;token=softhsm;type=cert" SSLCertificateKeyFile "pkcs11:id=%01;token=softhsm;type=private?pin-value=111111"
SSLCertificateFile "pkcs11:id=%01;token=softhsm;type=cert"
SSLCertificateKeyFile "pkcs11:id=%01;token=softhsm;type=private?pin-value=111111"
httpd-manual パッケージをインストールして、TLS 設定を含む Apache HTTP サーバーの完全ドキュメントを取得します。/etc/httpd/conf.d/ssl.conf 設定ファイルで利用可能なディレクティブの詳細は、/usr/share/httpd/manual/mod/mod_ssl.html を参照してください。
4.5. Nginx で秘密鍵を保護する HSM の使用 リンクのコピーリンクがクリップボードにコピーされました!
Nginx HTTP サーバーは、ハードウェアセキュリティーモジュール (HSM) に保存されている秘密鍵と連携できます。これにより、鍵の漏えいや中間者攻撃を防ぐことができます。通常、これを行うには、ビジーなサーバーに高パフォーマンスの HSM が必要になります。
Nginx は暗号化操作に OpenSSL を使用するため、PKCS #11 への対応は openssl-pkcs11 エンジンを介して行う必要があります。Nginx は現在、HSM からの秘密鍵の読み込みのみに対応します。また、証明書は通常のファイルとして個別に提供する必要があります。/etc/nginx/nginx.conf 設定ファイルの server セクションで ssl_certificate オプションおよび ssl_certificate_key オプションを変更します。
ssl_certificate /path/to/cert.pem ssl_certificate_key "engine:pkcs11:pkcs11:token=softhsm;id=%01;type=private?pin-value=111111";
ssl_certificate /path/to/cert.pem
ssl_certificate_key "engine:pkcs11:pkcs11:token=softhsm;id=%01;type=private?pin-value=111111";
Nginx 設定ファイルの PKCS #11 URI に接頭辞 engine:pkcs11: が必要なことに注意してください。これは、他の pkcs11 接頭辞がエンジン名を参照するためです。
第5章 polkit を使用したスマートカードへのアクセスの制御 リンクのコピーリンクがクリップボードにコピーされました!
PIN、PIN パッド、バイオメトリックなどのスマートカードに組み込まれたメカニズムでは防ぐことができない脅威に対処するため、およびより詳細な制御のために、RHEL は polkit フレームワークを使用してスマートカードへのアクセス制御を制御します。
システム管理者は、非特権ユーザーや非ローカルユーザー、サービスに対するスマートカードアクセスなど、特定のシナリオに合わせて polkit を設定できます。
5.1. polkit を介したスマートカードアクセス制御 リンクのコピーリンクがクリップボードにコピーされました!
PC/SC (Personal Computer/Smart Card) プロトコルは、スマートカードとそのリーダーをコンピューティングシステムに統合するための標準を指定します。RHEL では、pcsc-lite パッケージが、PC/SC の API を使用するスマートカードにアクセスするミドルウェアを提供します。このパッケージの一部である pcscd (PC/SC スマートカード) デーモンにより、システムが PC/SC プロトコルを使用してスマートカードにアクセスできるようになります。
PIN、PIN パッド、バイオメトリックなどのスマートカードに組み込まれたアクセス制御メカニズムは、考えられるすべての脅威をカバーするものではないため、RHEL は、より強力なアクセス制御に polkit フレームワークを使用します。polkit 認可マネージャーは、特権操作へのアクセスを許可できます。ディスクへのアクセスを許可することに加えて、polkit を使用して、スマートカードのセキュリティーを保護するポリシーを指定することもできます。たとえば、スマートカードで操作を実行できるユーザーを定義できます。
pcsc-lite パッケージをインストールし、pcscd デーモンを起動すると、システムは、/usr/share/polkit-1/actions/ ディレクトリーで定義されているポリシーを強制します。システム全体のデフォルトのポリシーは、/usr/share/polkit-1/actions/org.debian.pcsc-lite.policy ファイルにあります。Polkit ポリシーファイルは XML 形式を使用します。構文は、システム上の polkit(8) man ページで説明されています。
polkitd は、/etc/polkit-1/rules.d/ ディレクトリーおよび /usr/share/polkit-1/rules.d/ ディレクトリーで、これらのディレクトリーに保存されているルールファイルの変更を監視します。ファイルには、JavaScript 形式の認可ルールが含まれています。システム管理者は、両方のディレクトリーにカスタムルールファイルを追加し、polkitd がファイル名に基づいてアルファベット順に読み込むことができます。2 つのファイルが同じ名前である場合は、最初に /etc/polkit-1/rules.d/ 内のファイルが読み込まれます。
System Security Services Daemon (SSSD) が root として実行されていないときにスマートカードのサポートを有効にする必要がある場合は、sssd-polkit-rules パッケージをインストールする必要があります。このパッケージは、SSSD と polkit の統合を提供します。
5.3. PC/SC への polkit 認可の詳細情報の表示 リンクのコピーリンクがクリップボードにコピーされました!
デフォルト設定では、polkit 認可フレームワークは、限られた情報のみをジャーナルログに送信します。新しいルールを追加することで、PC/SC プロトコル関連の polkit ログエントリーを拡張できます。
前提条件
-
システムに
pcsc-liteパッケージをインストールしている。 -
pcscdデーモンが実行中である。
手順
/etc/polkit-1/rules.d/ディレクトリーに新規ファイルを作成します。touch /etc/polkit-1/rules.d/00-test.rules
# touch /etc/polkit-1/rules.d/00-test.rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 選択したエディターでファイルを編集します。以下に例を示します。
vi /etc/polkit-1/rules.d/00-test.rules
# vi /etc/polkit-1/rules.d/00-test.rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の行を挿入します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルを保存して、エディターを終了します。
pcscdサービスおよびpolkitサービスを再起動します。systemctl restart pcscd.service pcscd.socket polkit.service
# systemctl restart pcscd.service pcscd.socket polkit.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
pcscdの認可リクエストを作成します。たとえば、Firefox の Web ブラウザーを開くか、openscが提供するpkcs11-tool -Lを使用します。 拡張ログエントリーを表示します。以下に例を示します。
journalctl -u polkit --since "1 hour ago" polkitd[1224]: <no filename>:4: action=[Action id='org.debian.pcsc-lite.access_pcsc'] polkitd[1224]: <no filename>:5: subject=[Subject pid=2020481 user=user' groups=user,wheel,mock,wireshark seat=null session=null local=true active=true]
# journalctl -u polkit --since "1 hour ago" polkitd[1224]: <no filename>:4: action=[Action id='org.debian.pcsc-lite.access_pcsc'] polkitd[1224]: <no filename>:5: subject=[Subject pid=2020481 user=user' groups=user,wheel,mock,wireshark seat=null session=null local=true active=true]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第6章 設定コンプライアンスおよび脆弱性スキャンの開始 リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンス監査は、指定したオブジェクトが、コンプライアンスポリシーに指定されているすべてのルールに従っているかどうかを判断するプロセスです。コンプライアンスポリシーは、コンピューティング環境で使用される必要な設定を指定するセキュリティー専門家が定義します。これは多くの場合は、チェックリストの形式を取ります。
コンプライアンスポリシーは組織により大幅に異なることがあり、同一組織内でもシステムが異なるとポリシーが異なる可能性があります。ポリシーは、各システムの目的や、組織におけるシステム重要性により異なります。カスタマイズしたソフトウェア設定や導入の特徴によっても、カスタマイズしたポリシーのチェックリストが必要になってきます。
6.1. RHEL における設定コンプライアンスツール リンクのコピーリンクがクリップボードにコピーされました!
次の設定コンプライアンスツールを使用すると、Red Hat Enterprise Linux で完全に自動化されたコンプライアンス監査を実行できます。このツールは SCAP (Security Content Automation Protocol) 規格に基づいており、コンプライアンスポリシーの自動化に合わせるように設計されています。
- SCAP Workbench
-
scap-workbenchグラフィカルユーティリティーは、単一のローカルシステムまたはリモートシステム上で設定および脆弱性スキャンを実行するように設計されています。これらのスキャンと評価に基づくセキュリティーレポートの生成にも使用できます。 - OpenSCAP
OpenSCAPライブラリーは、付随するoscapコマンドラインユーティリティーとともに、ローカルシステムで設定スキャンと脆弱性スキャンを実行するように設計されています。これにより、設定コンプライアンスのコンテンツを検証し、スキャンおよび評価に基づいてレポートおよびガイドを生成します。重要OpenSCAP の使用中にメモリー消費の問題が発生する可能性があります。これにより、プログラムが途中で停止し、結果ファイルが生成されない可能性があります。詳細は、ナレッジベース記事 OpenSCAP のメモリー消費の問題 を参照してください。
- SCAP Security Guide (SSG)
-
scap-security-guideパッケージは、Linux システム用のセキュリティーポリシーのコレクションを提供します。このガイダンスは、セキュリティー強化に関する実践的なアドバイスのカタログで構成されています (該当する場合は、法規制要件へのリンクが含まれます)。このプロジェクトは、一般的なポリシー要件と特定の実装ガイドラインとの間にあるギャップを埋めることを目的としています。 - Script Check Engine (SCE)
-
SCAP プロトコルの拡張機能である SCE を使用すると、管理者は Bash、Python、Ruby などのスクリプト言語を使用してセキュリティーコンテンツを作成できます。SCE 拡張機能は、
openscap-engine-sceパッケージで提供されます。SCE 自体は SCAP 標準規格の一部ではありません。
複数のリモートシステムで自動コンプライアンス監査を実行する必要がある場合は、Red Hat Satellite 用の OpenSCAP ソリューションを利用できます。
6.2. 脆弱性スキャン リンクのコピーリンクがクリップボードにコピーされました!
6.2.1. Red Hat Security Advisories OVAL フィード リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux のセキュリティー監査機能は、標準規格セキュリティー設定共通化手順 (Security Content Automation Protocol (SCAP)) を基にしています。SCAP は、自動化された設定、脆弱性およびパッチの確認、技術的な制御コンプライアンスアクティビティー、およびセキュリティーの測定に対応している多目的な仕様のフレームワークです。
SCAP 仕様は、スキャナーまたはポリシーエディターの実装が義務付けられていなくても、セキュリティーコンテンツの形式がよく知られて標準化されているエコシステムを作成します。これにより、組織は、採用しているセキュリティーベンダーの数に関係なく、セキュリティーポリシー (SCAP コンテンツ) を構築するのは一度で済みます。
セキュリティー検査言語 OVAL (Open Vulnerability Assessment Language) は、SCAP に不可欠で最も古いコンポーネントです。その他のツールやカスタマイズされたスクリプトとは異なり、OVAL は、宣言型でリソースが必要な状態を記述します。OVAL コードは、スキャナーと呼ばれる OVAL インタープリターツールを使用して直接実行されることは決してありません。OVAL が宣言型であるため、評価されるシステムの状態が偶然修正されることはありません。
他のすべての SCAP コンポーネントと同様に、OVAL は XML に基づいています。SCAP 標準規格は、いくつかのドキュメント形式を定義します。この形式にはそれぞれ異なる種類の情報が記載され、異なる目的に使用されます。
Red Hat 製品セキュリティー を使用すると、Red Hat 製品をお使いのお客様に影響を及ぼすセキュリティー問題をすべて追跡して調査します。Red Hat カスタマーポータルで簡潔なパッチやセキュリティーアドバイザリーを適時提供します。Red Hat は OVAL パッチ定義を作成してサポートし、マシンが判読可能なセキュリティーアドバイザリーを提供します。
プラットフォーム、バージョン、およびその他の要因が異なるため、Red Hat 製品セキュリティーによる脆弱性の重大度定性評価は、サードパーティーが提供する Common Vulnerability Scoring System (CVSS) のベースライン評価と完全に一致しているわけではありません。したがって、サードパーティーが提供する定義ではなく、RHSA OVAL 定義を使用することが推奨されます。
各 RHSA OVAL 定義 は完全なパッケージとして利用でき、新しいセキュリティーアドバイザリーが Red Hat カスタマーポータルで利用可能になってから 1 時間以内に更新されます。
各 OVAL パッチ定義は、Red Hat セキュリティーアドバイザリー (RHSA) と 1 対 1 にマッピングしています。RHSA には複数の脆弱性に対する修正が含まれるため、各脆弱性は、共通脆弱性識別子 (Common Vulnerabilities and Exposures (CVE)) 名ごとに表示され、公開バグデータベースの該当箇所へのリンクが示されます。
RHSA OVAL 定義は、システムにインストールされている RPM パッケージで脆弱なバージョンを確認するように設計されています。この定義は拡張でき、パッケージが脆弱な設定で使用されているかどうかを見つけるなど、さらに確認できるようにすることができます。この定義は、Red Hat が提供するソフトウェアおよび更新に対応するように設計されています。サードパーティーソフトウェアのパッチ状態を検出するには、追加の定義が必要です。
Red Hat Insights for Red Hat Enterprise Linux コンプライアンスサービス は、IT セキュリティーおよびコンプライアンス管理者が Red Hat Enterprise Linux システムのセキュリティーポリシーのコンプライアンスを評価、監視、およびレポートするのに役立ちます。また、コンプライアンスサービス UI 内で完全に SCAP セキュリティーポリシーを作成および管理することもできます。
6.2.2. システムの脆弱性のスキャン リンクのコピーリンクがクリップボードにコピーされました!
oscap コマンドラインユーティリティーを使用すると、ローカルシステムのスキャン、設定コンプライアンスコンテンツの確認、ならびにスキャンおよび評価を基にしたレポートとガイドの生成が可能です。このユーティリティーは、OpenSCAP ライブラリーのフロントエンドとしてサービスを提供し、その機能を処理する SCAP コンテンツのタイプに基づいてモジュール (サブコマンド) にグループ化します。
前提条件
-
openscap-scannerおよびbzip2パッケージがインストールされます。
手順
システムに最新 RHSA OVAL 定義をダウンロードします。
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2 | bzip2 --decompress > rhel-9.oval.xml
# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2 | bzip2 --decompress > rhel-9.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムの脆弱性をスキャンし、vulnerability.html ファイルに結果を保存します。
oscap oval eval --report vulnerability.html rhel-9.oval.xml
# oscap oval eval --report vulnerability.html rhel-9.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
結果をブラウザーで確認します。以下に例を示します。
firefox vulnerability.html &
$ firefox vulnerability.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3. リモートシステムの脆弱性のスキャン リンクのコピーリンクがクリップボードにコピーされました!
SSH プロトコル経由で oscap-ssh ツールを使用して、OpenSCAP スキャナーでリモートシステムの脆弱性をチェックできます。
前提条件
-
openscap-utilsおよびbzip2パッケージは、スキャンに使用するシステムにインストールされます。 -
リモートシステムに
openscap-scannerパッケージがインストールされている。 - リモートシステムで SSH サーバーが実行している。
手順
システムに最新 RHSA OVAL 定義をダウンロードします。
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2 | bzip2 --decompress > rhel-9.oval.xml
# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2 | bzip2 --decompress > rhel-9.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow リモートシステムの脆弱性をスキャンし、結果をファイルに保存します。
oscap-ssh <username>@<hostname> <port> oval eval --report <scan-report.html> rhel-9.oval.xml
# oscap-ssh <username>@<hostname> <port> oval eval --report <scan-report.html> rhel-9.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように置き換えます。
-
<username>@<hostname>は、リモートシステムのユーザー名とホスト名に置き換えます。 -
<port>は、リモートシステムにアクセスできるポート番号 (例:22) です。 -
<scan-report.html>は、oscapがスキャン結果を保存するファイル名です。
-
6.3. 設定コンプライアンススキャン リンクのコピーリンクがクリップボードにコピーされました!
6.3.1. RHEL の設定コンプライアンス リンクのコピーリンクがクリップボードにコピーされました!
設定コンプライアンススキャンを使用して、特定の組織で定義されているベースラインに準拠できます。たとえば、米国政府と協力している場合は、システムを Operating System Protection Profile (OSPP) に準拠させ、支払い処理業者の場合は、システムを Payment Card Industry Data Security Standard (PCI-DSS) に準拠させなければならない場合があります。設定コンプライアンススキャンを実行して、システムセキュリティーを強化することもできます。
Red Hat は、対象コンポーネント向けの Red Hat のベストプラクティスに従っているため、SCAP Security Guide パッケージで提供される Security Content Automation Protocol (SCAP) コンテンツに従うことを推奨します。
SCAP Security Guide パッケージは、SCAP 1.2 および SCAP 1.3 標準規格に準拠するコンテンツを提供します。openscap scanner ユーティリティーは、SCAP Security Guide パッケージで提供される SCAP 1.2 および SCAP 1.3 コンテンツの両方と互換性があります。
設定コンプライアンススキャンを実行しても、システムが準拠しているとは限りません。
SCAP Security Guide スイートは、データストリームドキュメントの形式で、複数のプラットフォームのプロファイルを提供します。データストリームは、定義、ベンチマーク、プロファイル、および個々のルールが含まれるファイルです。各ルールでは、コンプライアンスの適用性と要件を指定します。RHEL は、セキュリティーポリシーを扱う複数のプロファイルを提供します。Red Hat データストリームには、業界標準の他に、失敗したルールの修正に関する情報も含まれます。
コンプライアンススキャンリソースの構造
プロファイルは、OSPP、PCI-DSS、Health Insurance Portability and Accountability Act (HIPAA) などのセキュリティーポリシーに基づく一連のルールです。これにより、セキュリティー標準規格に準拠するために、システムを自動で監査できます。
プロファイルを変更 (調整) して、パスワードの長さなどの特定のルールをカスタマイズできます。プロファイルの調整の詳細は、SCAP Workbench を使用したセキュリティープロファイルのカスタマイズ を参照してください。
6.3.2. OpenSCAP スキャン結果の例 リンクのコピーリンクがクリップボードにコピーされました!
OpenSCAP スキャンに適用されるデータストリームとプロファイル、およびシステムのさまざまなプロパティーに応じて、各ルールから特定の結果が生成される場合があります。以下に考えられる結果とその意味の簡単な説明を示します。
- Pass
- スキャンでは、このルールとの競合が見つかりませんでした。
- Fail
- スキャンで、このルールとの競合が検出されました。
- Not checked
- OpenSCAP はこのルールの自動評価を実行しません。システムがこのルールに手動で準拠しているかどうかを確認してください。
- Not applicable
- このルールは、現在の設定には適用されません。
- Not selected
- このルールはプロファイルには含まれません。OpenSCAP はこのルールを評価せず、結果にこのようなルールは表示されません。
- Error
-
スキャンでエラーが発生しました。詳細は、
--verbose DEVELオプションを指定してoscapコマンドで確認できます。Red Hat カスタマーポータル でサポートケースを作成するか、Red Hat Jira の RHEL プロジェクト でチケットを作成します。 - Unknown
-
スキャンで予期しない状況が発生しました。詳細は、
`--verbose DEVELオプションを指定してoscapコマンドを入力できます。Red Hat カスタマーポータル でサポートケースを作成するか、Red Hat Jira の RHEL プロジェクト でチケットを作成します。
6.3.3. 設定コンプライアンスのプロファイルの表示 リンクのコピーリンクがクリップボードにコピーされました!
スキャンまたは修復にプロファイルを使用することを決定する前に、oscap info サブコマンドを使用して、プロファイルを一覧表示し、詳細な説明を確認できます。
前提条件
-
openscap-scannerパッケージおよびscap-security-guideパッケージがインストールされている。
手順
SCAP Security Guide プロジェクトが提供するセキュリティーコンプライアンスプロファイルで利用可能なファイルをすべて表示します。
ls /usr/share/xml/scap/ssg/content/ ssg-rhel9-ds.xml
$ ls /usr/share/xml/scap/ssg/content/ ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oscap infoサブコマンドを使用して、選択したデータストリームに関する詳細情報を表示します。データストリームを含む XML ファイルは、名前に-ds文字列で示されます。Profilesセクションでは、利用可能なプロファイルと、その ID のリストを確認できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow データストリームファイルからプロファイルを選択し、選択したプロファイルに関する追加情報を表示します。そのためには、
oscap infoに--profileオプションを指定した後に、直前のコマンドの出力で表示された ID の最後のセクションを指定します。たとえば、HIPPA プロファイルの ID はxccdf_org.ssgproject.content_profile_hipaaで、--profileオプションの値はhipaaです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.4. 特定のベースラインによる設定コンプライアンスの評価 リンクのコピーリンクがクリップボードにコピーされました!
oscap コマンドラインツールを使用して、システムまたはリモートシステムが特定のベースラインに準拠しているかどうかを判断し、結果をレポートに保存できます。
前提条件
-
openscap-scannerパッケージおよびscap-security-guideパッケージがインストールされている。 - システムが準拠する必要があるベースライン内のプロファイルの ID を知っている必要があります。ID を見つけるには、設定コンプライアンスのプロファイルの表示 セクションを参照してください。
手順
ローカルシステムをスキャンして、選択したプロファイルへの準拠を評価し、スキャン結果をファイルに保存します。
oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
$ oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように置き換えます。
-
<scan-report.html>は、oscapがスキャン結果を保存するファイル名です。 -
<profileID>は、システムが準拠する必要があるプロファイル ID (例:hipaa) です。
-
オプション: リモートシステムをスキャンして、選択したプロファイルへの準拠を評価し、スキャン結果をファイルに保存します。
oscap-ssh <username>@<hostname> <port> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
$ oscap-ssh <username>@<hostname> <port> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように置き換えます。
-
<username>@<hostname>は、リモートシステムのユーザー名とホスト名に置き換えます。 -
<port>は、リモートシステムにアクセスできるポート番号です。 -
<scan-report.html>は、oscapがスキャン結果を保存するファイル名です。 -
<profileID>は、システムが準拠する必要があるプロファイル ID (例:hipaa) です。
-
6.4. 特定のベースラインに合わせたシステムの修正 リンクのコピーリンクがクリップボードにコピーされました!
特定のベースラインに合わせて RHEL システムを修正できます。SCAP Security Guide で提供されるプロファイルに合わせてシステムを修正できます。使用可能なプロファイルのリストの詳細は、設定コンプライアンスのプロファイルの表示 を参照してください。
修正 オプションが有効な状態でのシステム評価は、慎重に行わないとシステムが機能不全に陥る場合があります。Red Hat は、セキュリティーを強化した修正で加えられた変更を元に戻す自動手段は提供していません。修復は、デフォルト設定の RHEL システムで対応しています。インストール後にシステムが変更した場合は、修正を実行しても、必要なセキュリティープロファイルに準拠しない場合があります。
前提条件
-
scap-security-guideパッケージがインストールされている。
手順
--remediateオプションを指定したoscapコマンドを使用してシステムを修復します。oscap xccdf eval --profile <profileID> --remediate /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap xccdf eval --profile <profileID> --remediate /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow <profileID>は、システムが準拠する必要があるプロファイル ID (例:hipaa) に置き換えます。- システムを再起動します。
検証
システムがプロファイルに準拠しているかどうかを評価し、スキャン結果をファイルに保存します。
oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
$ oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように置き換えます。
-
<scan-report.html>は、oscapがスキャン結果を保存するファイル名です。 -
<profileID>は、システムが準拠する必要があるプロファイル ID (例:hipaa) です。
-
6.5. SSG Ansible Playbook を使用した特定のベースラインに合わせたシステムの修正 リンクのコピーリンクがクリップボードにコピーされました!
SCAP Security Guide プロジェクトの Ansible Playbook ファイルを使用して、特定のベースラインに合わせてシステムを修正できます。SCAP Security Guide によって提供されるすべてのプロファイルに合わせて修正できます。
Remediate オプションが有効な状態でのシステム評価は、慎重に行わないとシステムが機能不全に陥る場合があります。Red Hat は、セキュリティーを強化した修正で加えられた変更を元に戻す自動手段は提供していません。修復は、デフォルト設定の RHEL システムで対応しています。インストール後にシステムが変更した場合は、修正を実行しても、必要なセキュリティープロファイルに準拠しない場合があります。
前提条件
-
scap-security-guideパッケージがインストールされている。 -
ansible-coreパッケージがインストールされている。詳細は、Ansible インストールガイド を参照してください。 -
rhc-worker-playbookパッケージがインストールされている。 - システムの修正に使用するプロファイルの ID がわかっている。詳細は、設定コンプライアンスのプロファイルの表示 を参照してください。
手順
Ansible を使用して、選択したプロファイルに準拠するようにシステムを修正します。
ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local /usr/share/scap-security-guide/ansible/rhel9-playbook-<profileID>.yml
# ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local /usr/share/scap-security-guide/ansible/rhel9-playbook-<profileID>.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドで Playbook を実行するには、
ANSIBLE_COLLECTIONS_PATH環境変数が必要です。<profileID>は、選択したプロファイルのプロファイル ID に置き換えます。- システムを再起動します。
検証
システムが選択したプロファイルに準拠しているかどうかを評価し、スキャン結果をファイルに保存します。
oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow <scan-report.html>は、oscapがスキャン結果を保存するファイル名に置き換えます。
6.6. システムを特定のベースラインに合わせるための修復用 Ansible Playbook の作成 リンクのコピーリンクがクリップボードにコピーされました!
システムを特定のベースラインに合わせるために必要な修復のみを含む Ansible Playbook を作成できます。この Playbook は、すでに満たされている要件を含んでいないため、小型です。Playbook を作成しても、システムは一切変更されません。ここでは、後で適用するためのファイルを準備するだけです。
RHEL 9 では、Ansible Engine は、組み込みモジュールのみを含む ansible-core パッケージに置き換えられました。Ansible 修復の多くは、community コレクションおよび Portable Operating System Interface (POSIX) コレクションのモジュールを使用することに注意してください。これは組み込みモジュールには含まれていません。この場合は、Bash 修復を Ansible 修復の代わりに使用できます。RHEL 9.0 の Red Hat Connector には、修復 Playbook が Ansible Core で機能するために必要な Ansible モジュールが含まれています。
前提条件
-
scap-security-guideパッケージがインストールされている。 -
ansible-coreパッケージがインストールされている。詳細は、Ansible インストールガイド を参照してください。 -
rhc-worker-playbookパッケージがインストールされている。 - システムの修正に使用するプロファイルの ID がわかっている。詳細は、設定コンプライアンスのプロファイルの表示 を参照してください。
手順
システムをスキャンして結果を保存します。
oscap xccdf eval --profile <profileID> --results <profile-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap xccdf eval --profile <profileID> --results <profile-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果が含まれるファイルで、結果 ID の値を見つけます。
oscap info <profile-results.xml>
# oscap info <profile-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ステップ 1 で生成されたファイルに基づいて Ansible Playbook を生成します。
oscap xccdf generate fix --fix-type ansible --result-id xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_<profileID> --output <profile-remediations.yml> <profile-results.xml>
# oscap xccdf generate fix --fix-type ansible --result-id xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_<profileID> --output <profile-remediations.yml> <profile-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
生成された
<profile-remediations.yml>ファイルに、ステップ 1 で実行したスキャンで失敗したルールに対する Ansible 修復が含まれていることを確認します。 Ansible を使用して、選択したプロファイルに準拠するようにシステムを修正します。
ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local <profile-remediations.yml>`
# ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local <profile-remediations.yml>`Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドで Playbook を実行するには、
ANSIBLE_COLLECTIONS_PATH環境変数が必要です。警告Remediateオプションが有効な状態でのシステム評価は、慎重に行わないとシステムが機能不全に陥る場合があります。Red Hat は、セキュリティーハードニング関連の修復によって行われた変更を自動的に元に戻す方法は提供していません。修復は、デフォルト設定の RHEL システムで対応しています。インストール後にシステムが変更した場合は、修正を実行しても、必要なセキュリティープロファイルに準拠しない場合があります。
検証
システムが選択したプロファイルに準拠しているかどうかを評価し、スキャン結果をファイルに保存します。
oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow <scan-report.html>は、oscapがスキャン結果を保存するファイル名に置き換えます。
6.7. 後でアプリケーションを修復するための Bash スクリプトの作成 リンクのコピーリンクがクリップボードにコピーされました!
この手順を使用して、システムを HIPAA などのセキュリティープロファイルと調整する修正を含む Bash スクリプトを作成します。次の手順では、システムに変更を加えることなく、後のアプリケーション用にファイルを準備する方法を説明します。
前提条件
-
RHEL システムに、
scap-security-guideパッケージがインストールされている。
手順
oscapコマンドを使用してシステムをスキャンし、結果を XML ファイルに保存します。以下の例では、oscapはhipaaプロファイルに対してシステムを評価します。oscap xccdf eval --profile hipaa --results <hipaa-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap xccdf eval --profile hipaa --results <hipaa-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果が含まれるファイルで、結果 ID の値を見つけます。
oscap info <hipaa-results.xml>
# oscap info <hipaa-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手順 1 で生成された結果ファイルに基づいて Bash スクリプトを生成します。
oscap xccdf generate fix --fix-type bash --result-id <xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_hipaa> --output <hipaa-remediations.sh> <hipaa-results.xml>
# oscap xccdf generate fix --fix-type bash --result-id <xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_hipaa> --output <hipaa-remediations.sh> <hipaa-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<hipaa-remediations.sh>ファイルには、手順 1 で実行されたスキャン中に失敗したルールの修復が含まれます。この生成されたファイルを確認したら、このファイルと同じディレクトリー内で、./<hipaa-remediations.sh>コマンドを使用してファイルを適用できます。
検証
-
お使いのテキストエディターで、手順 1 で実行したスキャンで失敗したルールが
<hipaa-remediations.sh>ファイルに含まれていることを確認します。
6.8. SCAP Workbench を使用したカスタムプロファイルでシステムのスキャン リンクのコピーリンクがクリップボードにコピーされました!
SCAP Workbench (scap-workbench) パッケージはグラフィカルユーティリティーで、1 台のローカルシステムまたはリモートシステムで設定スキャンと脆弱性スキャンを実行し、システムの修復を実行して、スキャン評価に基づくレポートを生成します。oscap コマンドラインユーティリティーとの比較は、SCAP Workbench には限定的な機能しかないことに注意してください。SCAP Workbench は、データストリームファイルの形式でセキュリティーコンテンツを処理します。
6.8.1. SCAP Workbench を使用したシステムのスキャンおよび修復 リンクのコピーリンクがクリップボードにコピーされました!
選択したセキュリティーポリシーに対してシステムを評価するには、以下の手順に従います。
前提条件
-
scap-workbenchパッケージがシステムにインストールされている。
手順
GNOME Classicデスクトップ環境からSCAP Workbenchを実行するには、Super キーを押してアクティビティーの概要を開き、scap-workbenchと入力して Enterを押します。または、次のコマンドを実行します。scap-workbench &
$ scap-workbench &Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のオプションのいずれかを使用してセキュリティーポリシーを選択します。
-
開始ウィンドウの
Load Contentボタン -
Open content from SCAP Security Guide FileメニューのOpen Other Contentで、XCCDF、SCAP RPM、またはデータストリームファイルの各ファイルを検索します。
-
開始ウィンドウの
チェックボックスを選択して、システム設定の自動修正を行うことができます。このオプションを有効にすると、
SCAP Workbenchは、ポリシーにより適用されるセキュリティールールに従ってシステム設定の変更を試みます。このプロセスは、システムスキャン時に失敗した関連チェックを修正する必要があります。警告修正オプションが有効な状態でのシステム評価は、慎重に行わないとシステムが機能不全に陥る場合があります。Red Hat は、セキュリティーを強化した修正で加えられた変更を元に戻す自動手段は提供していません。修復は、デフォルト設定の RHEL システムで対応しています。インストール後にシステムが変更した場合は、修正を実行しても、必要なセキュリティープロファイルに準拠しない場合があります。ボタンをクリックし、選択したプロファイルでシステムをスキャンします。
-
スキャン結果を XCCDF ファイル、ARF ファイル、または HTML ファイルの形式で保存するには、 コンボボックスをクリックします。
HTML Reportオプションを選択して、スキャンレポートを、人間が判読できる形式で生成します。XCCDF 形式および ARF (データストリーム) 形式は、追加の自動処理に適しています。3 つのオプションはすべて繰り返し選択できます。 - 結果ベースの修復をファイルにエクスポートするには、ポップアップメニューの を使用します。
6.8.2. SCAP Workbench を使用したセキュリティープロファイルのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
セキュリティープロファイルをカスタマイズするには、特定のルール (パスワードの最小長など) のパラメーターを変更し、別の方法で対象とするルールを削除し、追加のルールを選択して内部ポリシーを実装できます。プロファイルをカスタマイズして新しいルールの定義はできません。
以下の手順では、SCAP Workbench を使用してプロファイルをカスタマイズ (調整) します。oscap コマンドラインユーティリティーで使用するようにカスタマイズしたプロファイルを保存することもできます。
前提条件
-
scap-workbenchパッケージがシステムにインストールされている。
手順
-
SCAP Workbenchを実行し、Open content from SCAP Security GuideまたはFileメニューのOpen Other Contentを使用してカスタマイズするプロファイルを選択します。 選択したセキュリティープロファイルを必要に応じて調整するには、 ボタンをクリックします。
これにより、元のデータストリームファイルを変更せずに現在選択されているプロファイルを変更できる新しいカスタマイズウィンドウが開きます。新しいプロファイル ID を選択します。
- 論理グループに分けられたルールを持つツリー構造を使用するか、 フィールドを使用して変更するルールを検索します。
ツリー構造のチェックボックスを使用した include ルールまたは exclude ルール、または必要に応じてルールの値を変更します。
- ボタンをクリックして変更を確認します。
変更内容を永続的に保存するには、以下のいずれかのオプションを使用します。
-
FileメニューのSave Customization Onlyを使用して、カスタマイズファイルを別途保存します。 FileメニューSave Allを選択して、すべてのセキュリティーコンテンツを一度に保存します。Into a directoryオプションを選択すると、SCAP Workbenchは、データストリームファイルおよびカスタマイズファイルの両方を、指定した場所に保存します。これはバックアップソリューションとして使用できます。As RPMオプションを選択すると、SCAP Workbenchに、データストリームファイル、ならびにカスタマイズファイルを含む RPM パッケージの作成を指示できます。これは、リモートでスキャンできないシステムにセキュリティーコンテンツを配布したり、詳細な処理のためにコンテンツを配信するのに便利です。
-
-
SCAP Workbenchは、カスタマイズしたプロファイル向けの結果ベースの修正に対応していないため、oscapコマンドラインユーティリティーでエクスポートした修正を使用します。
6.9. インストール直後にセキュリティープロファイルに準拠するシステムのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
OpenSCAP スイートを使用して、インストールプロセスの直後に、OSPP や PCI-DSS、HIPAA プロファイルなどのセキュリティープロファイルに準拠する RHEL システムをデプロイできます。このデプロイメント方法を使用すると、修正スクリプトを使用して後で適用できない特定のルール (パスワードの強度とパーティション化のルールなど) を適用できます。
6.9.1. Server with GUI と互換性のないプロファイル リンクのコピーリンクがクリップボードにコピーされました!
SCAP Security Guide の一部として提供される一部のセキュリティープロファイルは、Server with GUI ベース環境に含まれる拡張パッケージセットと互換性がありません。したがって、次のいずれかのプロファイルに準拠するシステムをインストールする場合は、Server with GUI を選択しないでください。
| プロファイル名 | プロファイル ID | 理由 | 注記 |
|---|---|---|---|
| [ドラフト] CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
|
パッケージ | |
| [ドラフト] CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
|
パッケージ | |
| DISA STIG for Red Hat Enterprise Linux 9 |
|
パッケージ | RHEL システムを DISA STIG に準拠したServer with GUI としてインストールするには、DISA STIG with GUI プロファイルを使用できます (BZ#1648162) |
6.9.2. グラフィカルインストールを使用したベースライン準拠の RHEL システムのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
この手順を使用して、特定のベースラインに合わせた RHEL システムをデプロイします。この例では、OSPP (Protection Profile for General Purpose Operating System) を使用します。
SCAP Security Guide の一部として提供される一部のセキュリティープロファイルは、Server with GUI ベース環境に含まれる拡張パッケージセットと互換性がありません。詳細は、GUI サーバーと互換性のないプロファイル を参照してください。
前提条件
-
グラフィカルインストールプログラムでシステムを起動している。OSCAP Anaconda アドオン はインタラクティブなテキストのみのインストールをサポートしていないことに注意してください。 -
インストール概要画面を開いている。
手順
-
インストール概要画面で、ソフトウェアの選択をクリックします。ソフトウェアの選択画面が開きます。 -
ベース環境ペインで、サーバー環境を選択します。ベース環境は、1 つだけ選択できます。 -
完了をクリックして設定を適用し、インストール概要画面に戻ります。 -
OSPP には、準拠する必要がある厳密なパーティション分割要件があるため、
/boot、/home、/var、/tmp、/var/log、/var/tmp、および/var/log/auditにそれぞれパーティションを作成します。 -
セキュリティーポリシーをクリックします。セキュリティーポリシー画面が開きます。 -
システムでセキュリティーポリシーを有効にするには、
セキュリティーポリシーの適用をONに切り替えます。 -
プロファイルペインで
Protection Profile for General Purpose Operating Systemsプロファイルを選択します。 -
プロファイルの選択をクリックして選択を確定します。 -
画面下部に表示される
Changes that were done or need to be doneの変更を確定します。残りの手動変更を完了します。 グラフィカルインストールプロセスを完了します。
注記グラフィカルインストールプログラムは、インストールに成功すると、対応するキックスタートファイルを自動的に作成します。
/root/anaconda-ks.cfgファイルを使用して、OSPP 準拠のシステムを自動的にインストールできます。
検証
インストール完了後にシステムの現在のステータスを確認するには、システムを再起動して新しいスキャンを開始します。
oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.9.3. キックスタートを使用したベースライン準拠の RHEL システムのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
特定のベースラインに準拠した RHEL システムをデプロイできます。この例では、OSPP (Protection Profile for General Purpose Operating System) を使用します。
前提条件
-
RHEL 9 システムに、
scap-security-guideパッケージがインストールされている。
手順
-
キックスタートファイル
/usr/share/scap-security-guide/kickstart/ssg-rhel9-ospp-ks.cfgを、選択したエディターで開きます。 -
設定要件を満たすように、パーティション設定スキームを更新します。OSPP に準拠するには、
/boot、/home、/var、/tmp、/var/log、/var/tmp、および/var/log/auditの個別のパーティションを保持する必要があります。パーティションのサイズのみ変更することができます。 - キックスタートを使用した自動インストールの実行 の説明に従って、キックスタートインストールを開始します。
キックスタートファイルのパスワードでは、OSPP の要件が確認されていません。
検証
インストール完了後にシステムの現在のステータスを確認するには、システムを再起動して新しいスキャンを開始します。
oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10. コンテナーおよびコンテナーイメージの脆弱性スキャン リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用して、コンテナーまたはコンテナーイメージのセキュリティー脆弱性を検索します。
前提条件
-
openscap-utilsおよびbzip2パッケージがインストールされます。
手順
システムに最新 RHSA OVAL 定義をダウンロードします。
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2 | bzip2 --decompress > rhel-9.oval.xml
# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2 | bzip2 --decompress > rhel-9.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーまたはコンテナーイメージの ID を取得します。以下に例を示します。
podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi9/ubi latest 096cae65a207 7 weeks ago 239 MB
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi9/ubi latest 096cae65a207 7 weeks ago 239 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーまたはコンテナーイメージで脆弱性をスキャンし、結果を vulnerability.html ファイルに保存します。
oscap-podman 096cae65a207 oval eval --report vulnerability.html rhel-9.oval.xml
# oscap-podman 096cae65a207 oval eval --report vulnerability.html rhel-9.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oscap-podmanコマンドには root 権限が必要で、コンテナーの ID は最初の引数であることに注意してください。
検証
結果をブラウザーで確認します。以下に例を示します。
firefox vulnerability.html &
$ firefox vulnerability.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11. 特定のベースラインを使用したコンテナーまたはコンテナーイメージのセキュリティーコンプライアンスの評価 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーまたはコンテナーイメージが、Operating System Protection Profile (OSPP)、Payment Card Industry Data Security Standard (PCI-DSS)、Health Insurance Portability and Accountability Act (HIPAA) などの特定のセキュリティーベースラインに準拠しているかどうかを評価できます。
前提条件
-
openscap-utilsパッケージおよびscap-security-guideパッケージがインストールされている。 - システムへの root アクセス権があります。
手順
コンテナーまたはコンテナーイメージの ID を見つけます。
-
コンテナーの ID を見つけるには、
podman ps -aコマンドを入力します。 -
コンテナーイメージの ID を見つけるには、
podman imagesコマンドを入力します。
-
コンテナーの ID を見つけるには、
コンテナーまたはコンテナーイメージがプロファイルに準拠しているかどうかを評価し、スキャン結果をファイルに保存します。
oscap-podman <ID> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# oscap-podman <ID> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように置き換えます。
-
<ID>は、コンテナーまたはコンテナーイメージの ID です。 -
<scan-report.html>は、oscapがスキャン結果を保存するファイル名です。 -
<profileID>は、システムが準拠する必要があるプロファイル ID (例:hipaa、ospp、pci-dss) です。
-
検証
結果をブラウザーで確認します。以下に例を示します。
firefox <scan-report.html> &
$ firefox <scan-report.html> &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
notapplicable とマークされたルールは、ベアメタルおよび仮想化システムにのみ適用され、コンテナーまたはコンテナーイメージには適用されません。
6.12. RHEL 9 でサポートされる SCAP Security Guide プロファイル リンクのコピーリンクがクリップボードにコピーされました!
RHEL の特定のマイナーリリースで提供される SCAP コンテンツだけを使用してください。これは、ハードニングに関与するコンポーネントが新しい機能で更新されることがあるためです。SCAP コンテンツは、この更新を反映するように変更されますが、以前のバージョンと互換性があるとは限りません。
oscap info コマンドを使用すると、システムにインストールされている scap-security-guide RPM のバージョンに関連する情報を取得できます。詳細は、設定コンプライアンスのプロファイルの表示 を参照してください。
以下の表では、RHEL 9 で提供されるプロファイルと、プロファイルが適合するポリシーのバージョンを紹介しています。
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level |
| 2.0 |
| CCN Red Hat Enterprise Linux 9 - Advanced |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Basic |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Intermediate |
| 2022-10 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
| 2.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
| 2.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
| 2.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
| 2.0.0 |
| [ドラフト] Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) |
| r2 |
| Australian Cyber Security Centre (ACSC) Essential Eight |
| バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) |
| バージョン付けなし |
| Australian Cyber Security Centre (ACSC) ISM Official |
| バージョン付けなし |
| Protection Profile for General Purpose Operating Systems |
| 4.3 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 9 |
| 4.0.1 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Enterprise Linux 9 |
| V2R3 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) with GUI for Red Hat Enterprise Linux 9 |
| V2R3 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level |
| 2.0 |
| CCN Red Hat Enterprise Linux 9 - Advanced |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Basic |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Intermediate |
| 2022-10 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
| 2.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
| 2.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
| 2.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
| 2.0.0 |
| [ドラフト] Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) |
| r2 |
| Australian Cyber Security Centre (ACSC) Essential Eight |
| バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) |
| バージョン付けなし |
| Australian Cyber Security Centre (ACSC) ISM Official |
| バージョン付けなし |
| Protection Profile for General Purpose Operating Systems |
| 4.3 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 9 |
|
RHEL9.5.0: 4.0 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Enterprise Linux 9 |
| V2R3 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) with GUI for Red Hat Enterprise Linux 9 |
| V2R3 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level |
| 2.0 |
| CCN Red Hat Enterprise Linux 9 - Advanced |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Basic |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Intermediate |
| 2022-10 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
|
RHEL 9.4.0 から RHEL 9.4.2: 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
|
RHEL 9.4.0 から RHEL 9.4.2: 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
|
RHEL 9.4.0 から RHEL 9.4.2: 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
|
RHEL 9.4.0 から RHEL 9.4.2: 1.0.0 |
| [ドラフト] Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) |
| r2 |
| Australian Cyber Security Centre (ACSC) Essential Eight |
| バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) |
| バージョン付けなし |
| Australian Cyber Security Centre (ACSC) ISM Official |
| バージョン付けなし |
| Protection Profile for General Purpose Operating Systems |
| 4.3 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 9 |
|
RHEL 9.4.0 から RHEL 9.4.4: 4.0 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Enterprise Linux 9 |
| V2R3 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) with GUI for Red Hat Enterprise Linux 9 |
| V2R3 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level |
| 2.0 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level |
| 2.0 |
| CCN Red Hat Enterprise Linux 9 - Advanced |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Basic |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Intermediate |
| 2022-10 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
| 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
| 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
| 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
| 1.0.0 |
| [ドラフト] Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) |
| r2 |
| Australian Cyber Security Centre (ACSC) Essential Eight |
| バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) |
| バージョン付けなし |
| Australian Cyber Security Centre (ACSC) ISM Official |
| バージョン付けなし |
| Protection Profile for General Purpose Operating Systems |
| 4.3 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 9 |
|
RHEL 9.3.0 から RHEL 9.3.2:3.2.1 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Enterprise Linux 9 |
|
RHEL 9.3.0: ドラフト[a] |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) with GUI for Red Hat Enterprise Linux 9 |
|
RHEL 9.3.0: ドラフト[a] |
[a]
DISA は RHEL 9 の公式ベンチマークを公開していません。
| ||
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level |
|
RHEL 9.2.0 から RHEL 9.2.2: 1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level |
|
RHEL 9.2.0 から RHEL 9.2.2: 1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level |
|
RHEL 9.2.0 から RHEL 9.2.2: 1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level |
|
RHEL 9.2.0 から RHEL 9.2.2: 1.2 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
|
RHEL 9.2.0 から RHEL 9.2.10: 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
|
RHEL 9.2.0 から RHEL 9.2.10: 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
|
RHEL 9.2.0 から RHEL 9.2.10: 1.0.0 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
|
RHEL 9.2.0 から RHEL 9.2.10: 1.0.0 |
| [ドラフト] Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) |
| r2 |
| Australian Cyber Security Centre (ACSC) Essential Eight |
| バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) |
| バージョン付けなし |
| Australian Cyber Security Centre (ACSC) ISM Official |
| バージョン付けなし |
| Protection Profile for General Purpose Operating Systems |
| 4.2.1 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 9 |
|
RHEL 9.2.0 から RHEL 9.2.5: 3.2.1 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Enterprise Linux 9 |
| V2R3 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) with GUI for Red Hat Enterprise Linux 9 |
| V2R3 |
| CCN Red Hat Enterprise Linux 9 - Basic |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Intermediate |
| 2022-10 |
| CCN Red Hat Enterprise Linux 9 - Advanced |
| 2022-10 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level |
| 1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level |
| 1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level |
| 1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level |
| 1.2 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
|
RHEL 9.1.0 および RHEL 9.1.1: ドラフト[a] |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
|
RHEL 9.1.0 および RHEL 9.1.1: ドラフト[a] |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
|
RHEL 9.1.0 および RHEL 9.1.1: ドラフト[a] |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
|
RHEL 9.1.0 および RHEL 9.1.1: ドラフト[a] |
| [ドラフト] Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) |
| r2 |
| Australian Cyber Security Centre (ACSC) Essential Eight |
| バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) |
| バージョン付けなし |
| Australian Cyber Security Centre (ACSC) ISM Official |
| バージョン付けなし |
| Protection Profile for General Purpose Operating Systems |
| 4.2.1 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 9 |
| 3.2.1 |
| [ドラフト] The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Enterprise Linux 9 |
| ドラフト[a] |
| [ドラフト] The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) with GUI for Red Hat Enterprise Linux 9 |
| ドラフト[a] |
[a]
CIS は RHEL 9 の公式ベンチマークを公開していません。
| ||
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level |
|
RHEL 9.0.0 から RHEL 9.0.10:1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level |
|
RHEL 9.0.0 から RHEL 9.0.10:1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level |
|
RHEL 9.0.0 から RHEL 9.0.10:1.2 |
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level |
|
RHEL 9.0.0 から RHEL 9.0.10:1.2 |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Server |
|
RHEL 9.0.0 から RHEL 9.0.6: DRAFT[a] |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Server |
|
RHEL 9.0.0 から RHEL 9.0.6: DRAFT[a] |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
|
RHEL 9.0.0 から RHEL 9.0.6: DRAFT[a] |
| CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
|
RHEL 9.0.0 から RHEL 9.0.6: DRAFT[a] |
| [ドラフト] Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) |
| r2 |
| Australian Cyber Security Centre (ACSC) Essential Eight |
| バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) |
| バージョン付けなし |
| Australian Cyber Security Centre (ACSC) ISM Official |
| バージョン付けなし |
| Protection Profile for General Purpose Operating Systems |
|
RHEL 9.0.0 から RHEL 9.0.2: ドラフト |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 9 |
|
RHEL 9.0.0 から RHEL 9.0.14: 3.2.1 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Enterprise Linux 9 |
| V2R3 |
| The Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) with GUI for Red Hat Enterprise Linux 9 |
| V2R3 |
| CCN Red Hat Enterprise Linux 9 - Basic |
| RHEL 9.0.11 以降:2022-10 |
| CCN Red Hat Enterprise Linux 9 - Intermediate |
| RHEL 9.0.11 以降:2022-10 |
| CCN Red Hat Enterprise Linux 9 - Advanced |
| RHEL 9.0.11 以降:2022-10 |
第7章 Keylime でシステムの整合性を確保する リンクのコピーリンクがクリップボードにコピーされました!
Keylime を使用すると、リモートシステムの整合性を継続的に監視し、起動時にシステムの状態を確認できます。また、暗号化されたファイルを監視対象システムに送信し、監視対象システムが整合性テストに失敗するたびにトリガーされる自動アクションを指定することもできます。
7.1. Keylime の仕組み リンクのコピーリンクがクリップボードにコピーされました!
Keylime エージェントを設定すると、次の操作を 1 つ以上実行できます。
- ランタイム整合性監視
- Keylime のランタイム整合性監視では、エージェントがデプロイされているシステムを継続的に監視し、許可リストに含まれるファイルと除外リストに含まれないファイルの整合性を評価します。
- ブート測定
- Keylime のブート測定では、起動時にシステムの状態を検証します。
Keylime の信頼の概念は、Trusted Platform Module (TPM) テクノロジーに基づいています。TPM は、暗号化鍵が統合されたハードウェア、ファームウェア、または仮想コンポーネントです。TPM クォートをポーリングし、オブジェクトのハッシュを比較することで、Keylime はリモートシステムの初期監視とランタイム監視を提供します。
Keylime を仮想マシン内で実行するか、仮想 TPM を使用するかは、基盤となるホストの整合性によって異なります。仮想環境での Keylime 測定を利用する前に、必ずホスト環境を信頼してください。
Keylime は、次の 3 つの主要コンポーネントで構成されています。
- verifier
-
エージェントを実行するシステムの整合性を最初から継続的に検証します。verifier は、パッケージからデプロイすることも、コンテナーとしてデプロイすることも、
keylime_serverRHEL システムロールを使用してデプロイすることもできます。 - registrar
-
すべてのエージェントのデータベースを含んでおり、TPM ベンダーの公開鍵をホストします。registrar は、パッケージからデプロイすることも、コンテナーとしてデプロイすることも、
keylime_serverRHEL システムロールを使用してデプロイすることもできます。 - エージェント
- verifier によって測定されるリモートシステムにデプロイされます。
さらに、Keylime は、ターゲットシステムでのエージェントのプロビジョニングを含む多くの機能に keylime_tenant ユーティリティーを使用します。
図7.1 設定による Keylime コンポーネント間の接続
Keylime は、コンポーネントとテナントの間で交換される鍵と証明書を使用して、信頼の連鎖で監視対象システムの整合性を保証します。このチェーンの安全な基盤として、信頼できる認証局 (CA) を使用してください。
エージェントが鍵と証明書を受け取らない場合は、CA の関与なしに鍵と自己署名証明書を生成します。
図7.2 Keylime コンポーネントの証明書と鍵の間の接続
7.2. パッケージから Keylime verifier をデプロイする リンクのコピーリンクがクリップボードにコピーされました!
verifier は、Keylime で最も重要なコンポーネントです。システム整合性の初期および定期的なチェックを行い、エージェントを使用して暗号化鍵を安全にブートストラップすることをサポートします。verifier は、制御インターフェイスに相互 TLS 暗号化を使用します。
信頼の連鎖を維持するには、verifier を実行するシステムをセキュアに管理してください。
要件に応じて、verifier を別のシステムにインストールすることも、Keylime registrar と同じシステムにインストールすることもできます。verifier と registrar を別々のシステムで実行すると、パフォーマンスが向上します。
設定ファイルをドロップインディレクトリー内に整理するには、/etc/keylime/verifier.conf.d/00-verifier-ip.conf のように、2 桁の数字の接頭辞を付けたファイル名を使用します。設定処理は、ドロップインディレクトリー内のファイルを辞書順で読み取り、各オプションを最後に読み取った値に設定します。
前提条件
-
root権限と、Keylime コンポーネントをインストールするシステムへのネットワーク接続がある。 - 認証局からの有効な鍵と証明書がある。
オプション: Keylime が verifier からのデータを保存するデータベースにアクセスできます。次のデータベース管理システムのいずれかを使用できます。
- SQLite (デフォルト)
- PostgreSQL
- MySQL
- MariaDB
手順
Keylime verifier をインストールします。
dnf install keylime-verifier
# dnf install keylime-verifierCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/keylime/verifier.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/verifier.conf.d/00-verifier-ip.confなど) を作成して、verifier の IP アドレスとポートを定義します。[verifier] ip = <verifier_IP_address>
[verifier] ip = <verifier_IP_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<verifier_IP_address>は、verifier の IP アドレスに置き換えます。あるいは、ip = *またはip = 0.0.0.0を使用して、使用可能なすべての IP アドレスに verifier をバインドします。 -
必要に応じて、
portオプションを使用して、verifier のポートをデフォルト値8881から変更することもできます。
-
オプション: エージェントのリスト用に verifier のデータベースを設定します。デフォルトの設定では、verifier の
/var/lib/keylime/cv_data.sqliteディレクトリーにある SQLite データベースを使用します。/etc/keylime/verifier.conf.d/ディレクトリーに次の内容の新しい.confファイル (/etc/keylime/verifier.conf.d/00-db-url.confなど) を作成することで、別のデータベースを定義できます。[verifier] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
[verifier] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>は、データベースの URL (例:postgresql://verifier:UQ?nRNY9g7GZzN7@198.51.100.1/verifierdb) に置き換えます。使用する認証情報が、Keylime にデータベース構造を作成するための権限を提供していることを確認してください。
verifier に証明書と鍵を追加します。Keylime にそれらを生成させることも、既存の鍵と証明書を使用することもできます。
-
デフォルトの
tls_dir =generateオプションを使用すると、Keylime は verifier、registrar、およびテナントの新しい証明書を/var/lib/keylime/cv_ca/ディレクトリーに生成します。 既存の鍵と証明書を設定にロードするには、verifier 設定でそれらの場所を定義します。Keylime サービスの実行者である
keylimeユーザーが証明書にアクセスできる必要があります。/etc/keylime/verifier.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/verifier.conf.d/00-keys-and-certs.confなど) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記絶対パスを使用して、鍵と証明書の場所を定義します。また、相対パスは
tls_dirオプションで定義されたディレクトリーから解決されます。
-
デフォルトの
ファイアウォールでポートを開きます。
firewall-cmd --add-port 8881/tcp firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port 8881/tcp # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のポートを使用する場合は、
8881を.confファイルで定義されているポート番号に置き換えます。verifier サービスを開始します。
systemctl enable --now keylime_verifier
# systemctl enable --now keylime_verifierCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルト設定では、verifier が他の Keylime コンポーネントの CA と証明書を作成するため、
keylime_registrarサービスを起動する前にkeylime_verifierを起動します。カスタム証明書を使用する場合、この順序で起動する必要はありません。
検証
keylime_verifierサービスがアクティブで実行中であることを確認します。systemctl status keylime_verifier ● keylime_verifier.service - The Keylime verifier Loaded: loaded (/usr/lib/systemd/system/keylime_verifier.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:08 EST; 1min 45s ago# systemctl status keylime_verifier ● keylime_verifier.service - The Keylime verifier Loaded: loaded (/usr/lib/systemd/system/keylime_verifier.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:08 EST; 1min 45s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3. Keylime verifier をコンテナーとしてデプロイする リンクのコピーリンクがクリップボードにコピーされました!
Keylime verifier は、システム整合性の初期チェックと定期チェックを実行し、エージェントを使用した暗号化鍵のセキュアなブートストラップをサポートします。Keylime verifier は、ホスト上にバイナリーやパッケージがなくても、RPM 方式ではなくコンテナーとして設定できます。コンテナーとしてデプロイすることにより、Keylime コンポーネントの分離性、モジュール性、再現性が向上します。
コンテナーを起動すると、Keylime verifier がデフォルトの設定ファイルとともにデプロイされます。次の 1 つ以上の方法を使用して設定をカスタマイズできます。
- 設定ファイルを含むホストのディレクトリーをコンテナーにマウントします。これは、RHEL 9 のすべてのバージョンで使用できます。
- コンテナーで環境変数を直接変更します。これは、RHEL 9.3 以降のバージョンで使用できます。環境変数を変更すると、設定ファイルの値がオーバーライドされます。
前提条件
-
podmanパッケージとその依存関係がシステムにインストールされている。 オプション: Keylime が verifier からのデータを保存するデータベースにアクセスできます。次のデータベース管理システムのいずれかを使用できます。
- SQLite (デフォルト)
- PostgreSQL
- MySQL
- MariaDB
- 認証局からの有効な鍵と証明書がある。
手順
オプション: 設定ファイルにアクセスするには、
keylime-verifierパッケージをインストールします。このパッケージがなくてもコンテナーを設定することはできますが、パッケージに付属する設定ファイルを変更する方が簡単な場合があります。dnf install keylime-verifier
# dnf install keylime-verifierCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/keylime/verifier.conf.d/ディレクトリーに新しい.confファイル (例:/etc/keylime/verifier.conf.d/00-verifier-ip.conf) を作成し、次の内容を記述して、verifier をすべての使用可能な IP アドレスにバインドします。[verifier] ip = *
[verifier] ip = *Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
必要に応じて、
portオプションを使用して、verifier のポートをデフォルト値8881から変更することもできます。
-
必要に応じて、
オプション: エージェントのリスト用に verifier のデータベースを設定します。デフォルトの設定では、verifier の
/var/lib/keylime/cv_data.sqliteディレクトリーにある SQLite データベースを使用します。/etc/keylime/verifier.conf.d/ディレクトリーに次の内容の新しい.confファイル (/etc/keylime/verifier.conf.d/00-db-url.confなど) を作成することで、別のデータベースを定義できます。[verifier] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
[verifier] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>は、データベースの URL (例:postgresql://verifier:UQ?nRNY9g7GZzN7@198.51.100.1/verifierdb) に置き換えます。使用する認証情報に、Keylime がデータベース構造を作成するための権限があることを確認してください。
verifier に証明書と鍵を追加します。Keylime にそれらを生成させることも、既存の鍵と証明書を使用することもできます。
-
デフォルトの
tls_dir =generateオプションを使用すると、Keylime は verifier、registrar、およびテナントの新しい証明書を/var/lib/keylime/cv_ca/ディレクトリーに生成します。 既存の鍵と証明書を設定にロードするには、verifier 設定でそれらの場所を定義します。Keylime プロセスの実行者である
keylimeユーザーが証明書にアクセスできる必要があります。/etc/keylime/verifier.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/verifier.conf.d/00-keys-and-certs.confなど) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記絶対パスを使用して、鍵と証明書の場所を定義します。また、相対パスは
tls_dirオプションで定義されたディレクトリーから解決されます。
-
デフォルトの
ファイアウォールでポートを開きます。
firewall-cmd --add-port 8881/tcp firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port 8881/tcp # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のポートを使用する場合は、
8881を.confファイルで定義されているポート番号に置き換えます。コンテナーを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
-pオプションは、ホスト上とコンテナー上のデフォルトポート8881を開きます。 -vオプションは、コンテナーへのディレクトリーのバインドマウントを作成します。-
Zオプションを指定すると、Podman がコンテンツにプライベート非共有ラベルを付けます。つまり、現在のコンテナーだけがプライベートボリュームを使用できます。
-
-
-dオプションは、コンテナーをデタッチしてバックグラウンドで実行します。 -
オプション
-e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD=<passphrase1>は、サーバーの鍵のパスフレーズを定義します。 -
オプション
-e KEYLIME_VERIFIER_CLIENT_KEY_PASSWORD=<passphrase2>は、クライアントの鍵のパスフレーズを定義します。 -
オプション
-e KEYLIME_VERIFIER_<ENVIRONMENT_VARIABLE>=<value>を指定すると、環境変数で設定オプションをオーバーライドできます。複数のオプションを変更するには、環境変数ごとに-eオプションを個別に挿入します。環境変数とそのデフォルト値の完全なリストは、Keylime の環境変数 を参照してください。
-
検証
コンテナーが実行されていることを確認します。
podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 80b6b9dbf57c registry.access.redhat.com/rhel9/keylime-verifier:latest keylime_verifier 14 seconds ago Up 14 seconds 0.0.0.0:8881->8881/tcp keylime-verifier
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 80b6b9dbf57c registry.access.redhat.com/rhel9/keylime-verifier:latest keylime_verifier 14 seconds ago Up 14 seconds 0.0.0.0:8881->8881/tcp keylime-verifierCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4. パッケージから Keylime registrar をデプロイする リンクのコピーリンクがクリップボードにコピーされました!
registrar は、すべてのエージェントのデータベースを含む Keylime コンポーネントであり、TPM ベンダーの公開鍵をホストします。registrar の HTTPS サービスは、Trusted Platform Module (TPM) 公開鍵を受け入れると、クォートを確認するためにこれらの公開鍵を取得するインターフェイスを提供します。
信頼の連鎖を維持するには、registrar を実行するシステムをセキュアに管理してください。
要件に応じて、registrar を別のシステムにインストールすることも、Keylime verifier と同じシステムにインストールすることもできます。verifier と registrar を別々のシステムで実行すると、パフォーマンスが向上します。
設定ファイルをドロップインディレクトリー内に整理するには、/etc/keylime/registrar.conf.d/00-registrar-ip.conf のように、2 桁の数字の接頭辞を付けたファイル名を使用します。設定処理は、ドロップインディレクトリー内のファイルを辞書順で読み取り、各オプションを最後に読み取った値に設定します。
前提条件
- Keylime verifier がインストールされ実行されているシステムへのネットワークアクセスがある。詳細は、「パッケージから Keylime verifier をデプロイする」 を参照してください。
-
root権限と、Keylime コンポーネントをインストールするシステムへのネットワーク接続がある。 Keylime が registrar からのデータを保存するデータベースにアクセスできる。次のデータベース管理システムのいずれかを使用できます。
- SQLite (デフォルト)
- PostgreSQL
- MySQL
- MariaDB
- 認証局からの有効な鍵と証明書がある。
手順
Keylime registrar をインストールします。
dnf install keylime-registrar
# dnf install keylime-registrarCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/keylime/registrar.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/registrar.conf.d/00-registrar-ip.confなど) を作成して、registrar の IP アドレスとポートを定義します。[registrar] ip = <registrar_IP_address>
[registrar] ip = <registrar_IP_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<registrar_IP_address>を registrar の IP アドレスに置き換えます。あるいは、ip = *またはip = 0.0.0.0を使用して、使用可能なすべての IP アドレスに registrar をバインドします。 -
必要に応じて、
portオプションを使用して、Keylime エージェントが接続するポートを変更します。デフォルト値は8890です。 -
必要に応じて、
tls_portオプションを使用して、Keylime verifier とテナントが接続する TLS ポートを変更します。デフォルト値は8891です。
-
オプション: エージェントのリスト用に registrar のデータベースを設定します。デフォルト設定では、registrar の
/var/lib/keylime/reg_data.sqliteディレクトリーにある SQLite データベースを使用します。/etc/keylime/registrar.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/registrar.conf.d/00-db-url.confなど) を作成できます。[registrar] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
[registrar] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>は、データベースの URL (例:postgresql://registrar:EKYYX-bqY2?#raXm@198.51.100.1/registrardb) に置き換えます。使用する認証情報に、Keylime がデータベース構造を作成するための権限があることを確認してください。
registrar に証明書と鍵を追加します。
-
デフォルトの設定を使用して、鍵と証明書を
/var/lib/keylime/reg_caディレクトリーにロードできます。 または、設定で鍵と証明書の場所を定義することもできます。
/etc/keylime/registrar.conf.d/ディレクトリーに新しい.confファイルを作成します (例:/etc/keylime/registrar.conf.d/00-keys-and-certs.confの内容は次のとおりです)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記絶対パスを使用して、鍵と証明書の場所を定義します。または、
tls_dirオプションでディレクトリーを定義し、そのディレクトリーからの相対パスを使用することもできます。
-
デフォルトの設定を使用して、鍵と証明書を
ファイアウォールでポートを開きます。
firewall-cmd --add-port 8890/tcp --add-port 8891/tcp firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port 8890/tcp --add-port 8891/tcp # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のポートを使用する場合は、
8890または8891を.confファイルで定義されているポート番号に置き換えます。keylime_registrarサービスを起動します。systemctl enable --now keylime_registrar
# systemctl enable --now keylime_registrarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルト設定では、verifier が他の Keylime コンポーネントの CA と証明書を作成するため、
keylime_registrarサービスを起動する前にkeylime_verifierを起動します。カスタム証明書を使用する場合、この順序で起動する必要はありません。
検証
keylime_registrarサービスがアクティブで実行中であることを確認します。systemctl status keylime_registrar ● keylime_registrar.service - The Keylime registrar service Loaded: loaded (/usr/lib/systemd/system/keylime_registrar.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:17 EST; 1min 42s ago ...# systemctl status keylime_registrar ● keylime_registrar.service - The Keylime registrar service Loaded: loaded (/usr/lib/systemd/system/keylime_registrar.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:17 EST; 1min 42s ago ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5. Keylime registrar をコンテナーとしてデプロイする リンクのコピーリンクがクリップボードにコピーされました!
registrar は、すべてのエージェントのデータベースを格納する Keylime コンポーネントであり、Trusted Platform Module (TPM) ベンダーの公開鍵をホストします。registrar の HTTPS サービスは、TPM 公開鍵を受け入れると、クォートをチェックするために、この公開鍵を取得するためのインターフェイスを提供します。Keylime registrar は、ホスト上にバイナリーやパッケージがなくても、RPM 方式ではなくコンテナーとして設定できます。コンテナーとしてデプロイすることにより、Keylime コンポーネントの分離性、モジュール性、再現性が向上します。
コンテナーを起動すると、Keylime registrar がデフォルトの設定ファイルとともにデプロイされます。次の 1 つ以上の方法を使用して設定をカスタマイズできます。
- 設定ファイルを含むホストのディレクトリーをコンテナーにマウントします。これは、RHEL 9 のすべてのバージョンで使用できます。
- コンテナーで環境変数を直接変更します。これは、RHEL 9.3 以降のバージョンで使用できます。環境変数を変更すると、設定ファイルの値がオーバーライドされます。
前提条件
-
podmanパッケージとその依存関係がシステムにインストールされている。 オプション: Keylime が registrar からデータを保存するデータベースにアクセスできます。次のデータベース管理システムのいずれかを使用できます。
- SQLite (デフォルト)
- PostgreSQL
- MySQL
- MariaDB
- 認証局からの有効な鍵と証明書がある。
手順
オプション: 設定ファイルにアクセスするには、
keylime-registrarパッケージをインストールします。このパッケージがなくてもコンテナーを設定することはできますが、パッケージに付属する設定ファイルを変更する方が簡単な場合があります。dnf install keylime-registrar
# dnf install keylime-registrarCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/keylime/registrar.conf.d/ディレクトリーに新しい.confファイル (例:/etc/keylime/registrar.conf.d/00-registrar-ip.conf) を作成し、次の内容を記述して、registrar を使用可能なすべての IP アドレスにバインドします。[registrar] ip = *
[registrar] ip = *Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
必要に応じて、
portオプションを使用して、Keylime エージェントが接続するポートを変更します。デフォルト値は8890です。 -
必要に応じて、
tls_portオプションを使用して、Keylime テナントが接続する TLS ポートを変更します。デフォルト値は8891です。
-
必要に応じて、
オプション: エージェントのリスト用に registrar のデータベースを設定します。デフォルト設定では、registrar の
/var/lib/keylime/reg_data.sqliteディレクトリーにある SQLite データベースを使用します。/etc/keylime/registrar.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/registrar.conf.d/00-db-url.confなど) を作成できます。[registrar] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
[registrar] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>は、データベースの URL (例:postgresql://registrar:EKYYX-bqY2?#raXm@198.51.100.1/registrardb) に置き換えます。使用する認証情報に、Keylime がデータベース構造を作成するための権限があることを確認してください。
registrar に証明書と鍵を追加します。
-
デフォルトの設定を使用して、鍵と証明書を
/var/lib/keylime/reg_caディレクトリーにロードできます。 または、設定で鍵と証明書の場所を定義することもできます。
/etc/keylime/registrar.conf.d/ディレクトリーに新しい.confファイルを作成します (例:/etc/keylime/registrar.conf.d/00-keys-and-certs.confの内容は次のとおりです)。[registrar] tls_dir = /var/lib/keylime/reg_ca server_key = </path/to/server_key> server_cert = </path/to/server_cert> trusted_client_ca = ['</path/to/ca/cert1>', '</path/to/ca/cert2>']
[registrar] tls_dir = /var/lib/keylime/reg_ca server_key = </path/to/server_key> server_cert = </path/to/server_cert> trusted_client_ca = ['</path/to/ca/cert1>', '</path/to/ca/cert2>']Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記絶対パスを使用して、鍵と証明書の場所を定義します。または、
tls_dirオプションでディレクトリーを定義し、そのディレクトリーからの相対パスを使用することもできます。
-
デフォルトの設定を使用して、鍵と証明書を
ファイアウォールでポートを開きます。
firewall-cmd --add-port 8890/tcp --add-port 8891/tcp firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port 8890/tcp --add-port 8891/tcp # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のポートを使用する場合は、
8890または8891を.confファイルで定義されているポート番号に置き換えます。コンテナーを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
-pオプションは、ホスト上とコンテナー上のデフォルトポート8890および8881を開きます。 -vオプションは、コンテナーへのディレクトリーのバインドマウントを作成します。-
Zオプションを指定すると、Podman がコンテンツにプライベート非共有ラベルを付けます。つまり、現在のコンテナーだけがプライベートボリュームを使用できます。
-
-
-dオプションは、コンテナーをデタッチしてバックグラウンドで実行します。 -
オプション
-e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD=<passphrase1>は、サーバーの鍵のパスフレーズを定義します。 -
オプション
-e KEYLIME_REGISTRAR_<ENVIRONMENT_VARIABLE>=<value>を指定すると、環境変数で設定オプションをオーバーライドできます。複数のオプションを変更するには、環境変数ごとに-eオプションを個別に挿入します。環境変数とそのデフォルト値の完全なリストは、「Keylime の環境変数」 を参照してください。
-
検証
コンテナーが実行されていることを確認します。
podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07d4b4bff1b6 localhost/keylime-registrar:latest keylime_registrar 12 seconds ago Up 12 seconds 0.0.0.0:8881->8881/tcp, 0.0.0.0:8891->8891/tcp keylime-registrar
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07d4b4bff1b6 localhost/keylime-registrar:latest keylime_registrar 12 seconds ago Up 12 seconds 0.0.0.0:8881->8881/tcp, 0.0.0.0:8891->8891/tcp keylime-registrarCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
7.6. RHEL システムロールを使用して Keylime サーバーをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
keylime_server RHEL システムロールを使用して、Keylime サーバーのコンポーネントである verifier と registrar をセットアップできます。keylime_server ロールは、verifier コンポーネントと registrar コンポーネントの両方を各ノードに共にインストールして設定します。
Ansible コントロールノードで以下の手順を実行します。
Keylime の詳細は、 8.1. Keylime の仕組み を参照してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - この Playbook を実行する管理対象ノードまたは管理対象ノードのグループが、Ansible インベントリーファイルにリストされている。
手順
必要なロールを定義する Playbook を作成します。
新しい YAML ファイルを作成し、これをテキストエディターで開きます。以下に例を示します。
vi keylime-playbook.yml
# vi keylime-playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の内容を挿入します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変数の詳細は、keylime_server RHEL システムロールの変数 を参照してください。
Playbook を実行します。
ansible-playbook <keylime-playbook.yml>
$ ansible-playbook <keylime-playbook.yml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
keylime_verifierサービスがアクティブであり、管理対象ホスト上で実行されていることを確認します。systemctl status keylime_verifier ● keylime_verifier.service - The Keylime verifier Loaded: loaded (/usr/lib/systemd/system/keylime_verifier.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:08 EST; 1min 45s ago# systemctl status keylime_verifier ● keylime_verifier.service - The Keylime verifier Loaded: loaded (/usr/lib/systemd/system/keylime_verifier.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:08 EST; 1min 45s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow keylime_registrarサービスがアクティブで実行中であることを確認します。systemctl status keylime_registrar ● keylime_registrar.service - The Keylime registrar service Loaded: loaded (/usr/lib/systemd/system/keylime_registrar.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:17 EST; 1min 42s ago ...# systemctl status keylime_registrar ● keylime_registrar.service - The Keylime registrar service Loaded: loaded (/usr/lib/systemd/system/keylime_registrar.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-11-09 10:10:17 EST; 1min 42s ago ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7. keylime_server RHEL システムロールの変数 リンクのコピーリンクがクリップボードにコピーされました!
keylime_server RHEL システムロールを使用して Keylime サーバーをセットアップする場合、registrar と verifier の次の変数をカスタマイズできます。
Keylime verifier を設定するための keylime_server RHEL システムロール変数のリスト
keylime_server_verifier_ip- verifier の IP アドレスを定義します。
keylime_server_verifier_tls_dir-
キーと証明書が保存されるディレクトリーを指定します。デフォルトに設定されている場合、verifier は
/var/lib/keylime/cv_caディレクトリーを使用します。 keylime_server_verifier_server_key_passphrase- サーバーの秘密鍵を復号化するためのパスフレーズを指定します。値が空の場合、秘密鍵は暗号化されません。
keylime_server_verifier_server_cert: Keylime verifier サーバー証明書ファイルを指定します。
keylime_server_verifier_trusted_client_ca-
信頼できるクライアント CA 証明書のリストを定義します。ファイルは、
keylime_server_verifier_tls_dirオプションで設定されたディレクトリーに保存する必要があります。 keylime_server_verifier_client_key- Keylime verifier のクライアントの秘密鍵を含むファイルを定義します。
keylime_server_verifier_client_key_passphrase- クライアントの秘密鍵ファイルを復号化するためのパスフレーズを定義します。値が空の場合、秘密鍵は暗号化されません。
keylime_server_verifier_client_cert- Keylime verifier クライアント証明書ファイルを定義します。
keylime_server_verifier_trusted_server_ca-
信頼できるサーバー CA 証明書のリストを定義します。ファイルは、
keylime_server_verifier_tls_dirオプションで設定されたディレクトリーに保存する必要があります。
keylime_server RHEL システムロールをセットアップするための registrar 変数のリスト
keylime_server_registrar_ip- registrar の IP アドレスを定義します。
keylime_server_registrar_tls_dir-
registrar のキーと証明書を保存するディレクトリーを指定します。デフォルトに設定すると、registrar は
/var/lib/keylime/reg_caディレクトリーを使用します。 keylime_server_registrar_server_key- Keylime registrar のプライベートサーバーキーファイルを定義します。
keylime_server_registrar_server_key_passphrase- registrar のサーバー秘密鍵を復号化するためのパスフレーズを指定します。値が空の場合、秘密鍵は暗号化されません。
keylime_server_registrar_server_cert- Keylime registrar サーバー証明書ファイルを指定します。
keylime_server_registrar_trusted_client_ca-
信頼できるクライアント CA 証明書のリストを定義します。ファイルは、
keylime_server_registrar_tls_dirオプションで設定されたディレクトリーに保存する必要があります。
7.8. パッケージから Keylime テナントをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
Keylime は、ターゲットシステム上でのエージェントのプロビジョニングなど、多くの機能に keylime_tenant ユーティリティーを使用します。keylime_tenant は、要件に応じて、他の Keylime コンポーネントを実行するシステムを含む任意のシステムにインストールすることも、別のシステムにインストールすることもできます。
前提条件
-
root権限と、Keylime コンポーネントをインストールするシステムへのネットワーク接続がある。 他の Keylime コンポーネントが設定されているシステムへのネットワークアクセスがある。
- verifier
- 詳細は、「パッケージから Keylime verifier をデプロイする」 を参照してください。
- registrar
- 詳細は、「パッケージから Keylime registrar をデプロイする」 を参照してください。
手順
Keylime テナントをインストールします。
dnf install keylime-tenant
# dnf install keylime-tenantCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/keylime/tenant.conf.d/00-verifier-ip.confファイルを編集して、Keylime verifier へのテナントの接続を定義します。[tenant] verifier_ip = <verifier_ip>
[tenant] verifier_ip = <verifier_ip>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<verifier_ip>は、verifier のシステムの IP アドレスに置き換えます。 -
verifier がデフォルト値
8881とは異なるポートを使用する場合は、verifier_port = <verifier_port>設定を追加します。
-
/etc/keylime/tenant.conf.d/00-registrar-ip.confファイルを編集して、Keylime registrar へのテナントの接続を定義します。[tenant] registrar_ip = <registrar_ip>
[tenant] registrar_ip = <registrar_ip>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<registrar_ip>は、registrar のシステムの IP アドレスに置き換えます。 -
registrar がデフォルト値
8891とは異なるポートを使用する場合は、registrar_port = <registrar_port>設定を追加します。
-
テナントに証明書と鍵を追加します。
-
デフォルトの設定を使用して、鍵と証明書を
/var/lib/keylime/cv_caディレクトリーにロードできます。 または、設定で鍵と証明書の場所を定義することもできます。
/etc/keylime/tenant.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/tenant.conf.d/00-keys-and-certs.confなど) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow trusted_server_caパラメーターは、verifier および registrar サーバーの CA 証明書へのパスを受け入れます。verifier と registrar が異なる CA を使用する場合などに、複数のコンマ区切りのパスを指定できます。注記絶対パスを使用して、鍵と証明書の場所を定義します。または、
tls_dirオプションでディレクトリーを定義し、そのディレクトリーからの相対パスを使用することもできます。
-
デフォルトの設定を使用して、鍵と証明書を
-
オプション:
/var/lib/keylime/tpm_cert_storeディレクトリー内の証明書を使用して Trusted Platform Module (TPM) の保証鍵 (EK) を検証できない場合は、証明書をそのディレクトリーに追加します。これは、エミュレートされた TPM を備えた仮想マシンを使用する場合に特に発生する可能性があります。
検証
verifier のステータスを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正しくセットアップされていて、エージェントが設定されていない場合、verifier は、デフォルトのエージェント UUID を認識しないと応答します。
registrar のステータスを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正しくセットアップされていて、エージェントが設定されていない場合、registrar は、デフォルトのエージェント UUID を認識しないと応答します。
7.9. パッケージから Keylime エージェントをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
Keylime エージェントは、Keylime によって監視されるすべてのシステムにデプロイされるコンポーネントです。
デフォルトでは、Keylime エージェントはすべてのデータを監視対象システムの /var/lib/keylime/ ディレクトリーに保存します。
設定ファイルをドロップインディレクトリー内で整理するには、/etc/keylime/agent.conf.d/00-registrar-ip.conf のように、2 桁の数字の接頭辞を付けたファイル名を使用します。設定処理は、ドロップインディレクトリー内のファイルを辞書順で読み取り、各オプションを最後に読み取った値に設定します。
前提条件
-
監視対象システムに対する
root権限がある。 -
監視対象システムに Trusted Platform Module (TPM) が搭載されている。確認するには、
tpm2_pcrreadコマンドを入力します。出力が複数のハッシュを返す場合は、TPM が使用可能です。 他の Keylime コンポーネントが設定されているシステムへのネットワークアクセスがある。
- verifier
- 詳細は、Keylime verifier の設定 を参照してください。
- registrar
- 詳細は、Keylime registrar の設定 を参照してください。
- テナント
- 詳細は、Keylime テナントの設定 を参照してください。
- 監視対象システムで Integrity Measurement Architecture (IMA) が有効になっている。詳細は、整合性測定アーキテクチャーと拡張検証モジュールの有効化 を参照してください。
手順
Keylime エージェントをインストールします。
dnf install keylime-agent
# dnf install keylime-agentCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、
keylime-agent-rustパッケージをインストールします。設定ファイルでエージェントの IP アドレスとポートを定義します。
/etc/keylime/agent.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/agent.conf.d/00-agent-ip.confなど) を作成します。[agent] ip = '<agent_ip>'
[agent] ip = '<agent_ip>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Keylime エージェントの設定では TOML 形式が使用されます。これは、他のコンポーネントの設定に使用される INI 形式とは異なります。したがって、値は有効な TOML 構文で入力してください。たとえば、パスは一重引用符で囲み、複数のパスの配列は角括弧で囲みます。
-
<agent_IP_address>は、エージェントの IP アドレスに置き換えます。あるいは、ip = '*'またはip = '0.0.0.0'を使用して、使用可能なすべての IP アドレスにエージェントをバインドします。 -
必要に応じて、
port = '<agent_port>'オプションを使用して、エージェントのポートをデフォルト値9002から変更することもできます。
-
設定ファイルで registrar の IP アドレスとポートを定義します。
/etc/keylime/agent.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/agent.conf.d/00-registrar-ip.confなど) を作成します。[agent] registrar_ip = '<registrar_IP_address>'
[agent] registrar_ip = '<registrar_IP_address>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<registrar_IP_address>を registrar の IP アドレスに置き換えます。 -
必要に応じて、
registrar_port = '<registrar_port>'オプションを使用して、registrar のポートをデフォルト値8890から変更することもできます。
-
オプション: エージェントの汎用一意識別子 (UUID) を定義します。定義されていない場合は、デフォルトの UUID が使用されます。
/etc/keylime/agent.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/agent.conf.d/00-agent-uuid.confなど) を作成します。[agent] uuid = '<agent_UUID>'
[agent] uuid = '<agent_UUID>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<agent_UUID>は、エージェントの UUID に置き換えます (例:d432fbb3-d2f1-4a97-9ef7-abcdef012345)。uuidgenユーティリティーを使用して UUID を生成できます。
-
オプション: エージェントの既存のキーと証明書を読み込みます。エージェントが
server_keyとserver_certを受信しない場合、エージェントは独自の鍵と自己署名証明書を生成します。設定で鍵と証明書の場所を定義します。
/etc/keylime/agent.conf.d/ディレクトリーに、次の内容の新しい.confファイル (/etc/keylime/agent.conf.d/00-keys-and-certs.confなど) を作成します。[agent] server_key = '</path/to/server_key>' server_key_password = '<passphrase1>' server_cert = '</path/to/server_cert>' trusted_client_ca = '[</path/to/ca/cert3>, </path/to/ca/cert4>]'
[agent] server_key = '</path/to/server_key>' server_key_password = '<passphrase1>' server_cert = '</path/to/server_cert>' trusted_client_ca = '[</path/to/ca/cert3>, </path/to/ca/cert4>]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記絶対パスを使用して、鍵と証明書の場所を定義します。Keylime エージェントは相対パスを受け入れません。
ファイアウォールでポートを開きます。
firewall-cmd --add-port 9002/tcp firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port 9002/tcp # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のポートを使用する場合は、
9002を.confファイルで定義されているポート番号に置き換えます。keylime_agentサービスを有効にして起動します。systemctl enable --now keylime_agent
# systemctl enable --now keylime_agentCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Keylime テナントが設定されているシステムから、エージェントが正しく設定されており、registrar に接続できることを確認します。
keylime_tenant -c regstatus --uuid <agent_uuid> Reading configuration from ['/etc/keylime/logging.conf'] ... ==\n-----END CERTIFICATE-----\n", "ip": "127.0.0.1", "port": 9002, "regcount": 1, "operational_state": "Registered"}}}
# keylime_tenant -c regstatus --uuid <agent_uuid> Reading configuration from ['/etc/keylime/logging.conf'] ... ==\n-----END CERTIFICATE-----\n", "ip": "127.0.0.1", "port": 9002, "regcount": 1, "operational_state": "Registered"}}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow <agent_uuid>は、エージェントの UUID に置き換えます。registrar と agent が正しく設定されている場合、出力にはエージェントの IP アドレスとポートが表示され、その後に
"operational_state": "Registered"が表示されます。
/etc/ima/ima-policyファイルに次の内容を入力して、新しい IMA ポリシーを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このポリシーは、実行されたアプリケーションのランタイム監視をターゲットとしています。このポリシーは状況に応じて調整できます。MAGIC 定数は、システム上の
statfs(2)man ページを参照してください。カーネルパラメーターを更新します。
grubby --update-kernel DEFAULT --args 'ima_appraise=fix ima_canonical_fmt ima_policy=tcb ima_template=ima-ng'
# grubby --update-kernel DEFAULT --args 'ima_appraise=fix ima_canonical_fmt ima_policy=tcb ima_template=ima-ng'Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動して、新しい IMA ポリシーを適用します。
検証
エージェントが実行されていることを確認します。
systemctl status keylime_agent ● keylime_agent.service - The Keylime compute agent Loaded: loaded (/usr/lib/systemd/system/keylime_agent.service; enabled; preset: disabled) Active: active (running) since ...# systemctl status keylime_agent ● keylime_agent.service - The Keylime compute agent Loaded: loaded (/usr/lib/systemd/system/keylime_agent.service; enabled; preset: disabled) Active: active (running) since ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
監視対象のすべてのシステムでエージェントを設定したら、Keylime をデプロイして、次の機能のいずれかまたは両方を実行できます。
7.10. ランタイム監視用に Keylime を設定する リンクのコピーリンクがクリップボードにコピーされました!
監視対象システムの状態が正しいことを確認するには、Keylime エージェントが監視対象システム上で実行されている必要があります。
Keylime のランタイム監視は、Integrity Measurement Architecture (IMA) を使用して多数のファイルを測定するため、システムのパフォーマンスに重大な影響を与える可能性があります。
エージェントをプロビジョニングするときに、Keylime が監視対象システムに送信するファイルを定義することもできます。Keylime はエージェントに送信されたファイルを暗号化し、エージェントのシステムが TPM ポリシーと IMA 許可リストに準拠している場合にのみ復号化します。
Keylime の除外リストを設定することで、Keylime が特定のファイルまたは特定のディレクトリー内の変更を無視するようにできます。ファイルを除外しても、そのファイルは引き続き IMA によって測定されます。
RHEL 9.3 で提供される Keylime バージョン 7.3.0 以降、許可リストと除外リストは Keylime ランタイムポリシーに統合されます。
前提条件
Keylime コンポーネントが設定されているシステムへのネットワークアクセスがある。
- verifier
- 詳細は、「パッケージから Keylime verifier をデプロイする」 を参照してください。
- registrar
- 詳細は、「パッケージから Keylime registrar をデプロイする」 を参照してください。
- テナント
- 詳細は、「パッケージから Keylime テナントをデプロイする」 を参照してください。
- エージェント
- 詳細は、「パッケージから Keylime エージェントをデプロイする」 を参照してください。
手順
Keylime エージェントが設定され実行されている監視対象システムに、
keylime-policyツールを含むpython3-keylimeパッケージをインストールします。dnf -y install python3-keylime
# dnf -y install python3-keylimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow エージェントシステムの現在の状態からランタイムポリシーを作成します。
keylime-policy create runtime --ima-measurement --rootfs '/' --ramdisk-dir '/boot/' --output <policy.json>
# keylime-policy create runtime --ima-measurement --rootfs '/' --ramdisk-dir '/boot/' --output <policy.json>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドの詳細は次のとおりです。
-
<policy.json>はランタイムポリシーのファイル名に置き換えます。 次のディレクトリーは測定から自動的に除外されます。
-
/sys -
/run -
/proc -
/lost+found -
/dev -
/media -
/snap -
/mnt -
/var -
/tmp
-
-
必要に応じて、
--excludelist <excludelist.txt>オプションを追加して、追加の特定のパスを測定から除外することもできます。除外リストでは、1 行に 1 つの Python 正規表現を使用できます。特殊文字の完全なリストは、docs.python.org の Regular expression operations を参照してください。
-
生成されたランタイムポリシーを、
keylime_tenantユーティリティーが設定されているシステムにコピーします。次に例を示します。scp <policy.json> root@<tenant.ip>:/root/<policy.json>
# scp <policy.json> root@<tenant.ip>:/root/<policy.json>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Keylime テナントが設定されているシステムで、
keylime_tenantユーティリティーを使用してエージェントをプロビジョニングします。keylime_tenant --command add --targethost <agent_ip> --uuid <agent_uuid> --runtime-policy <policy.json> --cert default
# keylime_tenant --command add --targethost <agent_ip> --uuid <agent_uuid> --runtime-policy <policy.json> --cert defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
<agent_ip>は、エージェントの IP アドレスに置き換えます。 -
<agent_uuid>は、エージェントの UUID に置き換えます。 -
<policy.json>を Keylime ランタイムポリシーファイルへのパスに置き換えます。 --certオプションを使用すると、テナントは、指定されたディレクトリーまたはデフォルトの/var/lib/keylime/ca/ディレクトリーにある CA 証明書と鍵を使用して、エージェントの証明書を生成し、署名します。ディレクトリーに CA 証明書と鍵が含まれていない場合、テナントは/etc/keylime/ca.confファイルの設定に従ってそれらを自動的に生成し、指定されたディレクトリーに保存します。その後、テナントはこれらの鍵と証明書をエージェントに送信します。CA 証明書または署名エージェント証明書を生成するときに、CA 秘密鍵にアクセスするためのパスワードの入力を求められる (
Please enter the password to decrypt your keystore:) 場合があります。注記Keylime はエージェントに送信されたファイルを暗号化し、エージェントのシステムが TPM ポリシーと IMA 許可リストに準拠している場合にのみ復号化します。デフォルトでは、Keylime は送信された
.zipファイルを展開します。
たとえば、次のコマンドを使用すると、
keylime_tenantは UUIDd432fbb3-d2f1-4a97-9ef7-75bd81c00000を持つ新しい Keylime エージェントを127.0.0.1にプロビジョニングし、policy.jsonというランタイムポリシーをロードします。また、デフォルトのディレクトリーに証明書を生成し、その証明書ファイルをエージェントに送信します。Keylime は、/etc/keylime/verifier.confで設定された TPM ポリシーが満たされている場合にのみ、ファイルを復号化します。keylime_tenant --command add --targethost 127.0.0.1 --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 --runtime-policy policy.json --cert default
# keylime_tenant --command add --targethost 127.0.0.1 --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 --runtime-policy policy.json --cert defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記# keylime_tenant --command delete --uuid <agent_uuid>コマンドを使用して、Keylime によるノードの監視を停止できます。keylime_tenant --command updateコマンドを使用して、すでに登録されているエージェントの設定を変更できます。-
検証
- オプション: 監視対象システムを再起動して、設定が永続的であることを確認します。
エージェントのアテステーションが成功することを確認します。
keylime_tenant --command cvstatus --uuid <agent.uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...# keylime_tenant --command cvstatus --uuid <agent.uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow <agent.uuid>をエージェントの UUID に置き換えます。operational_stateの値がGet Quoteで、attestation_countが 0 以外の場合、このエージェントのアテステーションは成功しています。Operational_stateの値がInvalid QuoteかFailedの場合、アテステーションは失敗し、次のようなコマンド出力が表示されます。{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow アテステーションが失敗した場合は、verifier ログで詳細を表示します。
journalctl --unit keylime_verifier keylime.tpm - INFO - Checking IMA measurement list... keylime.ima - WARNING - File not found in allowlist: /root/bad-script.sh keylime.ima - ERROR - IMA ERRORS: template-hash 0 fnf 1 hash 0 good 781 keylime.cloudverifier - WARNING - agent D432FBB3-D2F1-4A97-9EF7-75BD81C00000 failed, stopping polling
# journalctl --unit keylime_verifier keylime.tpm - INFO - Checking IMA measurement list... keylime.ima - WARNING - File not found in allowlist: /root/bad-script.sh keylime.ima - ERROR - IMA ERRORS: template-hash 0 fnf 1 hash 0 good 781 keylime.cloudverifier - WARNING - agent D432FBB3-D2F1-4A97-9EF7-75BD81C00000 failed, stopping pollingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.11. ブート測定のアテステーション用に Keylime を設定する リンクのコピーリンクがクリップボードにコピーされました!
Keylime をブート測定のアテステーション用に設定すると、Keylime は、測定対象システム上のブートプロセスが、定義した状態と一致しているかどうかを確認します。
前提条件
Keylime コンポーネントが設定されているシステムへのネットワークアクセスがある。
- verifier
- 詳細は、「パッケージから Keylime verifier をデプロイする」 を参照してください。
- registrar
- 詳細は、「パッケージから Keylime registrar をデプロイする」 を参照してください。
- テナント
- 詳細は、「パッケージから Keylime テナントをデプロイする」 を参照してください。
- エージェント
- 詳細は、「パッケージから Keylime エージェントをデプロイする」 を参照してください。
- Unified Extensible Firmware Interface (UEFI) がエージェントシステムで有効になっている。
手順
Keylime エージェントが設定され実行されている監視対象システムに、
keylime-policyツールを含むpython3-keylimeパッケージをインストールします。dnf -y install python3-keylime
# dnf -y install python3-keylimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 監視対象システムで、
keylime-policyツールを使用して、システムの現在の状態を測定したブートログからポリシーを生成します。keylime-policy create measured-boot --eventlog-file /sys/kernel/security/tpm0/binary_bios_measurements --output <./measured_boot_reference_state.json>
# keylime-policy create measured-boot --eventlog-file /sys/kernel/security/tpm0/binary_bios_measurements --output <./measured_boot_reference_state.json>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<./measured_boot_reference_state.json>は、keylime-policyによって生成されるポリシーが保存されるパスに置き換えます。 UEFI システムでセキュアブートが有効になっていない場合は、
--without-secureboot引数を渡します。重要keylime-policyによって生成されるポリシーは、システムの現在の状態に基づいており、非常に厳格です。カーネルの更新やシステムの更新を含め、システムに変更を加えると、ブートプロセスが変更され、システムはアテステーションに失敗します。
-
生成されたポリシーを、
keylime_tenantユーティリティーが設定されているシステムにコピーします。次に例を示します。scp root@<agent_ip>:<./measured_boot_reference_state.json> <./measured_boot_reference_state.json>
# scp root@<agent_ip>:<./measured_boot_reference_state.json> <./measured_boot_reference_state.json>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Keylime テナントが設定されているシステムで、
keylime_tenantユーティリティーを使用してエージェントをプロビジョニングします。keylime_tenant --command add --targethost <agent_ip> --uuid <agent_uuid> --mb_refstate <./measured_boot_reference_state.json> --cert default
# keylime_tenant --command add --targethost <agent_ip> --uuid <agent_uuid> --mb_refstate <./measured_boot_reference_state.json> --cert defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
<agent_ip>は、エージェントの IP アドレスに置き換えます。 -
<agent_uuid>は、エージェントの UUID に置き換えます。 -
<./measured_boot_reference_state.json>を、ブート測定ポリシーへのパスに置き換えます。
ランタイム監視と一緒にブート測定を設定する場合は、
keylime_tenant --command addコマンドを入力するときに両方のユースケースのオプションをすべて指定します。注記# keylime_tenant --command delete --targethost <agent_ip> --uuid <agent_uuid>コマンドを使用して、Keylime によるノードの監視を停止できます。keylime_tenant --command updateコマンドを使用して、すでに登録されているエージェントの設定を変更できます。-
検証
監視対象システムを再起動し、エージェントのアテステーションが成功することを確認します。
keylime_tenant --command cvstatus --uuid <agent_uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...# keylime_tenant --command cvstatus --uuid <agent_uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow <agent_uuid>は、エージェントの UUID に置き換えます。operational_stateの値がGet Quoteで、attestation_countが 0 以外の場合、このエージェントのアテステーションは成功しています。Operational_stateの値がInvalid QuoteかFailedの場合、アテステーションは失敗し、次のようなコマンド出力が表示されます。{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow アテステーションが失敗した場合は、verifier ログで詳細を表示します。
journalctl -u keylime_verifier {"d432fbb3-d2f1-4a97-9ef7-75bd81c00000": {"operational_state": "Tenant Quote Failed", ... "last_event_id": "measured_boot.invalid_pcr_0", "attestation_count": 0, "last_received_quote": 1684487093, "last_successful_attestation": 0}}# journalctl -u keylime_verifier {"d432fbb3-d2f1-4a97-9ef7-75bd81c00000": {"operational_state": "Tenant Quote Failed", ... "last_event_id": "measured_boot.invalid_pcr_0", "attestation_count": 0, "last_received_quote": 1684487093, "last_successful_attestation": 0}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.12. Keylime の環境変数 リンクのコピーリンクがクリップボードにコピーされました!
podman run コマンドで -e オプションを使用してコンテナーを起動するときなどに、Keylime の環境変数を設定すると、設定ファイルの値をオーバーライドできます。
環境変数の構文は次のとおりです。
KEYLIME_<SECTION>_<ENVIRONMENT_VARIABLE>=<value>
KEYLIME_<SECTION>_<ENVIRONMENT_VARIABLE>=<value>
ここでは、以下のようになります。
-
<SECTION>は Keylime 設定ファイルのセクションです。 -
<ENVIRONMENT_VARIABLE>は環境変数です。 -
<value>は環境変数に設定する値です。
たとえば、-e KEYLIME_VERIFIER_MAX_RETRIES=6 は、[verifier] セクションの max_retries 設定オプションを 6 に設定します。
verifier の設定
| 設定オプション | 環境変数 | デフォルト値 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
| |
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
|
|
|
registrar の設定
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
テナント設定
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CA 設定
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
エージェント設定
| 設定オプション | 環境変数 | デフォルト値 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ロギング設定
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 設定オプション | 環境変数 | デフォルト値 |
|
|
| |
|
|
|
|
|
|
|
|
第8章 AIDE で整合性の確認 リンクのコピーリンクがクリップボードにコピーされました!
Advanced Intrusion Detection Environment (AIDE) は、システムにファイルのデータベースを作成し、そのデータベースを使用してファイルの整合性を確保し、システムの侵入を検出するユーティリティーです。
8.1. AIDE のインストール リンクのコピーリンクがクリップボードにコピーされました!
AIDE を使用してファイル整合性チェックを開始するには、対応するパッケージをインストールし、AIDE データベースを初期化する必要があります。
前提条件
-
AppStreamリポジトリーが有効になっている。
手順
aideパッケージをインストールします。dnf install aide
# dnf install aideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初期データベースを生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: デフォルト設定では、
aide --initコマンドは、/etc/aide.confファイルで定義するディレクトリーとファイルのセットのみを確認します。ディレクトリーまたはファイルを AIDE データベースに追加し、監視パラメーターを変更するには、/etc/aide.confを変更します。 データベースの使用を開始するには、初期データベースのファイル名から末尾の
.newを削除します。mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: AIDE データベースの場所を変更するには、
/etc/aide.confファイルを編集し、DBDIR値を変更します。追加のセキュリティーのデータベース、設定、/usr/sbin/aideバイナリーファイルを、読み取り専用メディアなどの安全な場所に保存します。
8.2. AIDE を使用した整合性チェックの実行 リンクのコピーリンクがクリップボードにコピーされました!
crond サービスを使用すると、AIDE で定期的なファイル整合性チェックをスケジュールできます。
前提条件
- AIDE が適切にインストールされ、データベースが初期化されている。AIDE のインストール を参照してください。
手順
手動でチェックを開始するには、以下を行います。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 少なくとも、AIDE を毎週実行するようにシステムを設定します。最適な設定としては、AIDE を毎日実行します。たとえば、
cronコマンドを使用して毎日午前 04:05 に AIDE を実行するようにスケジュールするには、/etc/crontabファイルに次の行を追加します。05 4 * * * root /usr/sbin/aide --check
05 4 * * * root /usr/sbin/aide --checkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3. AIDE データベースの更新 リンクのコピーリンクがクリップボードにコピーされました!
パッケージの更新や設定ファイルの調整など、システムの変更が確認できたら、基本となる AIDE データベースも更新します。
前提条件
- AIDE が適切にインストールされ、データベースが初期化されている。AIDE のインストール を参照してください。
手順
基本となる AIDE データベースを更新します。
aide --update
# aide --updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow aide --updateコマンドは、/var/lib/aide/aide.db.new.gzデータベースファイルを作成します。-
整合性チェックで更新したデータベースを使用するには、ファイル名から末尾の
.newを削除します。
8.4. ファイル整合性ツール:AIDE および IMA リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux は、システム上のファイルとディレクトリーの整合性をチェックおよび保持するためのさまざまなツールを提供します。次の表は、シナリオに適したツールを決定するのに役立ちます。
| 比較項目 | Advanced Intrusion Detection Environment (AIDE) | Integrity Measurement Architecture (IMA) |
|---|---|---|
| 確認対象 | AIDE は、システム上のファイルとディレクトリーのデータベースを作成するユーティリティーです。このデータベースは、ファイルの整合性をチェックし、侵入を検出するのに役立ちます。 | IMA は、以前に保存された拡張属性と比較してファイル測定値 (ハッシュ値) をチェックすることにより、ファイルが変更されているかどうかを検出します。 |
| 確認方法 | AIDE はルールを使用して、ファイルとディレクトリーの整合性状態を比較します。 | IMA は、ファイルハッシュ値を使用して侵入を検出します。 |
| 理由 | 検出 - AIDE は、ルールを検証することにより、ファイルが変更されているかどうかを検出します。 | 検出と防止 - IMA は、ファイルの拡張属性を置き換えることにより、攻撃を検出および防止します。 |
| 使用方法 | AIDE は、ファイルまたはディレクトリーが変更されたときに脅威を検出します。 | 誰かがファイル全体の変更を試みた時に、IMA は脅威を検出します。 |
| 範囲 | AIDE は、ローカルシステム上のファイルとディレクトリーの整合性をチェックします。 | IMA は、ローカルシステムとリモートシステムのセキュリティーを確保します。 |
8.5. aide RHEL システムロールを使用したファイル整合性チェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
aide RHEL システムロールを使用すると、複数のシステムにわたり一貫して Advanced Intrusion Detection Environment (AIDE) を設定できます。このロールは、すべての管理対象ノードに aide パッケージを自動的にインストールし、設定に応じて次のアクションを実行できます。
- AIDE データベースを初期化し、コントロールノードに保存する
- 管理対象ノードで AIDE 整合性チェックを実行する
- AIDE データベースを更新し、コントロールノードに保存する
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
aide_db_fetch_dir: files-
リモートノードから取得した AIDE データベースを保存するための Ansible コントロールノード (ACN) 上のディレクトリーを指定します。デフォルトの
files値では、Playbook と同じディレクトリーにデータベースが保存されます。データベースファイルを別の場所に保存するには、別のパスを指定します。 aide_check: false- リモートノードで整合性チェックを実行します。
aide_update: false- AIDE データベースを更新し、コントロールノードに保存します。
aide_cron_check: true-
管理対象ノードで AIDE 整合性チェックをアクティブ化する定期的な
cronジョブを設定します。 aide_cron_interval: 0 12 * * *cronジョブの間隔を<minute> <hour> <day_of_month> <month> <day of week>という形式で設定します。値を0 12 * * *にすると、毎日正午にジョブを実行するように設定されます。Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.aide/README.mdファイルを参照してください。
Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第9章 LUKS を使用したブロックデバイスの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
ディスク暗号化を使用すると、ブロックデバイス上のデータを暗号化して保護できます。デバイスの復号化されたコンテンツにアクセスするには、認証としてパスフレーズまたは鍵を入力します。これは、デバイスがシステムから物理的に取り外された場合でも、デバイスのコンテンツを保護するのに役立つため、モバイルコンピューターやリムーバブルメディアにとって重要です。LUKS 形式は、Red Hat Enterprise Linux におけるブロックデバイスの暗号化のデフォルト実装です。
9.1. LUKS ディスクの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
Linux Unified Key Setup-on-disk-format (LUKS) は、暗号化されたデバイスの管理を簡素化するツールセットを提供します。LUKS を使用すると、ブロックデバイスを暗号化し、複数のユーザーキーでマスターキーを復号化できるようになります。パーティションの一括暗号化には、このマスターキーを使用します。
Red Hat Enterprise Linux は、LUKS を使用してブロックデバイスの暗号化を実行します。デフォルトではインストール時に、ブロックデバイスを暗号化するオプションが指定されていません。ディスクを暗号化するオプションを選択すると、コンピューターを起動するたびにパスフレーズの入力が求められます。このパスフレーズは、パーティションを復号化するバルク暗号鍵のロックを解除します。デフォルトのパーティションテーブルを変更する場合は、暗号化するパーティションを選択できます。この設定は、パーティションテーブル設定で行われます。
Ciphers
LUKS に使用されるデフォルトの暗号は aes-xts-plain64 です。LUKS のデフォルトの鍵サイズは 512 ビットです。Anaconda XTS モードを使用した LUKS のデフォルトの鍵サイズは 512 ビットです。使用可能な暗号は次のとおりです。
- 高度暗号化標準 (Advanced Encryption Standard, AES)
- Twofish
- Serpent
LUKS によって実行される操作
- LUKS は、ブロックデバイス全体を暗号化するため、脱着可能なストレージメディアやラップトップのディスクドライブといった、モバイルデバイスのコンテンツを保護するのに適しています。
- 暗号化されたブロックデバイスの基本的な内容は任意であり、スワップデバイスの暗号化に役立ちます。また、とりわけデータストレージ用にフォーマットしたブロックデバイスを使用する特定のデータベースに関しても有用です。
- LUKS は、既存のデバイスマッパーのカーネルサブシステムを使用します。
- LUKS はパスフレーズのセキュリティーを強化し、辞書攻撃から保護します。
- LUKS デバイスには複数のキースロットが含まれているため、バックアップキーやパスフレーズを追加できます。
LUKS は次のシナリオには推奨されません。
- LUKS などのディスク暗号化ソリューションは、システムの停止時にしかデータを保護しません。システムの電源がオンになり、LUKS がディスクを復号化すると、そのディスクのファイルは、そのファイルにアクセスできるすべてのユーザーが使用できます。
- 同じデバイスに対する個別のアクセスキーを複数のユーザーが持つ必要があるシナリオ。LUKS1 形式はキースロットを 8 個提供し、LUKS2 形式はキースロットを最大 32 個提供します。
- ファイルレベルの暗号化を必要とするアプリケーション。
9.2. RHEL の LUKS バージョン リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux では、LUKS 暗号化のデフォルト形式は LUKS2 です。古い LUKS1 形式は引き続き完全にサポートされており、以前の Red Hat Enterprise Linux リリースと互換性のある形式で提供されます。LUKS2 再暗号化は、LUKS1 再暗号化と比較して、より堅牢で安全に使用できる形式と考えられています。
LUKS2 形式を使用すると、バイナリー構造を変更することなく、さまざまな部分を後に更新できます。LUKS2 は、内部的にメタデータに JSON テキスト形式を使用し、メタデータの冗長性を提供し、メタデータの破損を検出し、メタデータのコピーから自動的に修復します。
LUKS1 のみをサポートするシステムでは LUKS2 を使用しないでください。
Red Hat Enterprise Linux 9.2 以降では、両方の LUKS バージョンで cryptsetup reencrypt コマンドを使用してディスクを暗号化できます。
オンラインの再暗号化
LUKS2 形式は、デバイスが使用中の間に、暗号化したデバイスの再暗号化に対応します。たとえば、以下のタスクを実行するにあたり、デバイスでファイルシステムをアンマウントする必要はありません。
- ボリュームキーの変更
暗号化アルゴリズムの変更
暗号化されていないデバイスを暗号化する場合は、ファイルシステムのマウントを解除する必要があります。暗号化の短い初期化後にファイルシステムを再マウントできます。
LUKS1 形式は、オンライン再暗号化に対応していません。
変換
特定の状況では、LUKS1 を LUKS2 に変換できます。具体的には、以下のシナリオでは変換ができません。
-
LUKS1 デバイスが、Policy-Based Decryption (PBD) Clevis ソリューションにより使用されているとマークされている。
cryptsetupツールは、luksmetaメタデータが検出されると、そのデバイスを変換することを拒否します。 - デバイスがアクティブになっている。デバイスが非アクティブ状態でなければ、変換することはできません。
9.3. LUKS2 再暗号化中のデータ保護のオプション リンクのコピーリンクがクリップボードにコピーされました!
LUKS2 では、再暗号化プロセスで、パフォーマンスやデータ保護の優先度を設定する複数のオプションを選択できます。resilience オプションには次のモードが用意されています。cryptsetup reencrypt --resilience resilience-mode /dev/<device_ID> コマンドを使用すると、これらのモードのいずれかを選択できます。<device_ID> は、デバイスの ID に置き換えてください。
checksumデフォルトのモード。データ保護とパフォーマンスのバランスを取ります。
このモードでは、再暗号化領域内のセクターのチェックサムが個別に保存されます。チェックサムは、LUKS2 によって再暗号化されたセクターについて、復旧プロセスで検出できます。このモードでは、ブロックデバイスセクターの書き込みがアトミックである必要があります。
journal- 最も安全なモードですが、最も遅いモードでもあります。このモードでは、再暗号化領域をバイナリー領域にジャーナル化するため、LUKS2 はデータを 2 回書き込みます。
none-
noneモードではパフォーマンスが優先され、データ保護は提供されません。SIGTERMシグナルやユーザーによる Ctrl+C キーの押下など、安全なプロセス終了からのみデータを保護します。予期しないシステム障害やアプリケーション障害が発生すると、データが破損する可能性があります。
LUKS2 の再暗号化プロセスが強制的に突然終了した場合、LUKS2 は以下のいずれかの方法で復旧を実行できます。
- 自動
次のいずれかのアクションを実行すると、次回の LUKS2 デバイスを開くアクション中に自動復旧アクションがトリガーされます。
-
cryptsetup openコマンドを実行する。 -
systemd-cryptsetupコマンドを使用してデバイスを接続する。
-
- 手動
-
LUKS2 デバイスで
cryptsetup repair /dev/<device_ID>コマンドを使用します。
9.4. LUKS2 を使用したブロックデバイスの既存データの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
LUKS2 形式を使用して、まだ暗号化されていないデバイスの既存のデータを暗号化できます。新しい LUKS ヘッダーは、デバイスのヘッドに保存されます。
前提条件
- ブロックデバイスにファイルシステムがある。
データのバックアップを作成している。
警告ハードウェア、カーネル、または人的ミスにより、暗号化プロセス時にデータが失われる場合があります。データの暗号化を開始する前に、信頼性の高いバックアップを作成してください。
手順
暗号化するデバイスにあるファイルシステムのマウントをすべて解除します。次に例を示します。
umount /dev/mapper/vg00-lv00
# umount /dev/mapper/vg00-lv00Copy to Clipboard Copied! Toggle word wrap Toggle overflow LUKS ヘッダーを保存するための空き容量を確認します。シナリオに合わせて、次のいずれかのオプションを使用します。
論理ボリュームを暗号化する場合は、以下のように、ファイルシステムのサイズを変更せずに、論理ボリュームを拡張できます。以下に例を示します。
lvextend -L+32M /dev/mapper/vg00-lv00
# lvextend -L+32M /dev/mapper/vg00-lv00Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
partedなどのパーティション管理ツールを使用してパーティションを拡張します。 -
このデバイスのファイルシステムを縮小します。ext2、ext3、または ext4 のファイルシステムには
resize2fsユーティリティーを使用できます。XFS ファイルシステムは縮小できないことに注意してください。
暗号化を初期化します。
cryptsetup reencrypt --encrypt --init-only --reduce-device-size 32M /dev/mapper/vg00-lv00 lv00_encrypted /dev/mapper/lv00_encrypted is now active and ready for online encryption.
# cryptsetup reencrypt --encrypt --init-only --reduce-device-size 32M /dev/mapper/vg00-lv00 lv00_encrypted /dev/mapper/lv00_encrypted is now active and ready for online encryption.Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバイスをマウントします。
mount /dev/mapper/lv00_encrypted /mnt/lv00_encrypted
# mount /dev/mapper/lv00_encrypted /mnt/lv00_encryptedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 永続的なマッピングのエントリーを
/etc/crypttabファイルに追加します。luksUUIDを見つけます。cryptsetup luksUUID /dev/mapper/vg00-lv00 a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325
# cryptsetup luksUUID /dev/mapper/vg00-lv00 a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325Copy to Clipboard Copied! Toggle word wrap Toggle overflow 任意のテキストエディターで
/etc/crypttabを開き、このファイルにデバイスを追加します。vi /etc/crypttab lv00_encrypted UUID=a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 none
$ vi /etc/crypttab lv00_encrypted UUID=a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 は、デバイスの
luksUUIDに置き換えます。dracutで initramfs を更新します。dracut -f --regenerate-all
$ dracut -f --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
/etc/fstabファイルに永続的なマウントのエントリーを追加します。アクティブな LUKS ブロックデバイスのファイルシステムの UUID を見つけます。
blkid -p /dev/mapper/lv00_encrypted /dev/mapper/lv00-encrypted: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"
$ blkid -p /dev/mapper/lv00_encrypted /dev/mapper/lv00-encrypted: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 任意のテキストエディターで
/etc/fstabを開き、このファイルにデバイスを追加します。次に例を示します。vi /etc/fstab UUID=37bc2492-d8fa-4969-9d9b-bb64d3685aa9 /home auto rw,user,auto 0
$ vi /etc/fstab UUID=37bc2492-d8fa-4969-9d9b-bb64d3685aa9 /home auto rw,user,auto 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 37bc2492-d8fa-4969-9d9b-bb64d3685aa9 は、ファイルシステムの UUID に置き換えます。
オンライン暗号化を再開します。
cryptsetup reencrypt --resume-only /dev/mapper/vg00-lv00 Enter passphrase for /dev/mapper/vg00-lv00: Auto-detected active dm device 'lv00_encrypted' for data device /dev/mapper/vg00-lv00. Finished, time 00:31.130, 10272 MiB written, speed 330.0 MiB/s
# cryptsetup reencrypt --resume-only /dev/mapper/vg00-lv00 Enter passphrase for /dev/mapper/vg00-lv00: Auto-detected active dm device 'lv00_encrypted' for data device /dev/mapper/vg00-lv00. Finished, time 00:31.130, 10272 MiB written, speed 330.0 MiB/sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
既存のデータが暗号化されているかどうかを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 暗号化された空のブロックデバイスのステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5. 独立したヘッダーがある LUKS2 を使用してブロックデバイスの既存データの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
LUKS ヘッダーを保存するための空き領域を作成せずに、ブロックデバイスの既存のデータを暗号化できます。ヘッダーは、追加のセキュリティー層としても使用できる、独立した場所に保存されます。この手順では、LUKS2 暗号化形式を使用します。
前提条件
- ブロックデバイスにファイルシステムがある。
データがバックアップ済みである。
警告ハードウェア、カーネル、または人的ミスにより、暗号化プロセス時にデータが失われる場合があります。データの暗号化を開始する前に、信頼性の高いバックアップを作成してください。
手順
以下のように、そのデバイスのファイルシステムをすべてアンマウントします。
umount /dev/<nvme0n1p1>
# umount /dev/<nvme0n1p1>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <nvme0n1p1>は、アンマウントするパーティションに対応するデバイス識別子に置き換えます。暗号化を初期化します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように置き換えます。
-
</home/header>には、独立した LUKS ヘッダーを含むファイルへのパスを指定します。後で暗号化したデバイスのロックを解除するために、独立した LUKS ヘッダーにアクセスできる必要があります。 -
<nvme_encrypted>は、暗号化後に作成されるデバイスマッパーの名前に置き換えます。
-
デバイスをマウントします。
mount /dev/mapper/<nvme_encrypted> /mnt/<nvme_encrypted>
# mount /dev/mapper/<nvme_encrypted> /mnt/<nvme_encrypted>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 永続的なマッピングのエントリーを
/etc/crypttabファイルに追加します。<nvme_encrypted> /dev/disk/by-id/<nvme-partition-id> none header=</home/header>
# <nvme_encrypted> /dev/disk/by-id/<nvme-partition-id> none header=</home/header>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <nvme-partition-id>は、NVMe パーティションの識別子に置き換えます。dracutを使用して initramfs を再生成します。dracut -f --regenerate-all -v
# dracut -f --regenerate-all -vCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/fstabファイルに永続的なマウントのエントリーを追加します。アクティブな LUKS ブロックデバイスのファイルシステムの UUID を見つけます。
blkid -p /dev/mapper/<nvme_encrypted> /dev/mapper/<nvme_encrypted>: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"
$ blkid -p /dev/mapper/<nvme_encrypted> /dev/mapper/<nvme_encrypted>: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"Copy to Clipboard Copied! Toggle word wrap Toggle overflow テキストエディターで
/etc/fstabを開き、このファイルにデバイスを追加します。次に例を示します。UUID=<file_system_UUID> /home auto rw,user,auto 0
UUID=<file_system_UUID> /home auto rw,user,auto 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow <
;file_system_UUID> は、直前の手順で見つかったファイルシステムの UUID に置き換えます。
オンライン暗号化を再開します。
cryptsetup reencrypt --resume-only --header </home/header> /dev/<nvme0n1p1> Enter passphrase for /dev/<nvme0n1p1>: Auto-detected active dm device '<nvme_encrypted>' for data device /dev/<nvme0n1p1>. Finished, time 00m51s, 10 GiB written, speed 198.2 MiB/s
# cryptsetup reencrypt --resume-only --header </home/header> /dev/<nvme0n1p1> Enter passphrase for /dev/<nvme0n1p1>: Auto-detected active dm device '<nvme_encrypted>' for data device /dev/<nvme0n1p1>. Finished, time 00m51s, 10 GiB written, speed 198.2 MiB/sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
独立したヘッダーがある LUKS2 を使用するブロックデバイスの既存のデータが暗号化されているかどうかを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 暗号化された空のブロックデバイスのステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.6. LUKS2 を使用した空のブロックデバイスの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
LUKS2 形式を使用して、空のブロックデバイスを暗号化して、暗号化ストレージとして使用できます。
前提条件
-
空のブロックデバイス。
lsblkなどのコマンドを使用して、そのデバイス上に実際のデータ (ファイルシステムなど) がないかどうかを確認できます。
手順
暗号化した LUKS パーティションとしてパーティションを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 暗号化した LUKS パーティションを開きます。
cryptsetup open /dev/nvme0n1p1 nvme0n1p1_encrypted Enter passphrase for /dev/nvme0n1p1:
# cryptsetup open /dev/nvme0n1p1 nvme0n1p1_encrypted Enter passphrase for /dev/nvme0n1p1:Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、パーティションのロックが解除され、デバイスマッパーを使用してパーティションが新しいデバイスにマッピングされます。暗号化されたデータを上書きしないように、このコマンドは、デバイスが暗号化されたデバイスであり、
/dev/mapper/device_mapped_nameパスを使用して LUKS を通じてアドレス指定されることをカーネルに警告します。暗号化されたデータをパーティションに書き込むためのファイルシステムを作成します。このパーティションには、デバイスマップ名を介してアクセスする必要があります。
mkfs -t ext4 /dev/mapper/nvme0n1p1_encrypted
# mkfs -t ext4 /dev/mapper/nvme0n1p1_encryptedCopy to Clipboard Copied! Toggle word wrap Toggle overflow デバイスをマウントします。
mount /dev/mapper/nvme0n1p1_encrypted mount-point
# mount /dev/mapper/nvme0n1p1_encrypted mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
空のブロックデバイスが暗号化されているかどうかを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 暗号化された空のブロックデバイスのステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.7. Web コンソールでの LUKS パスフレーズの設定 リンクのコピーリンクがクリップボードにコピーされました!
システムの既存の論理ボリュームに暗号化を追加する場合は、ボリュームをフォーマットすることでしか実行できません。
前提条件
- RHEL 9 Web コンソールがインストールされている。
- cockpit サービスが有効になっている。
ユーザーアカウントが Web コンソールにログインできる。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
-
cockpit-storagedパッケージがシステムにインストールされている。 - 暗号化なしで、既存の論理ボリュームを利用できます。
手順
RHEL 9 Web コンソールにログインします。
詳細は、Web コンソールへのログイン を参照してください。
- パネルで、Storage をクリックします。
- Storage テーブルで、暗号化するストレージデバイスのメニューボタン をクリックし、 をクリックします。
- Encryption field で、暗号化仕様 LUKS1 または LUKS2 を選択します。
- 新しいパスフレーズを設定し、確認します。
- オプション: さらなる暗号化オプションを変更します。
- フォーマット設定の最終処理
- Format をクリックします。
9.8. Web コンソールで LUKS パスフレーズの変更 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールで、暗号化されたディスクまたはパーティションで LUKS パスフレーズを変更します。
前提条件
- RHEL 9 Web コンソールがインストールされている。
- cockpit サービスが有効になっている。
ユーザーアカウントが Web コンソールにログインできる。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
-
cockpit-storagedパッケージがシステムにインストールされている。
手順
RHEL 9 Web コンソールにログインします。
詳細は、Web コンソールへのログイン を参照してください。
- パネルで、Storage をクリックします。
- Storage テーブルで、暗号化されたデータを含むディスクを選択します。
- ディスクページで、Keys セクションまでスクロールし、編集ボタンをクリックします。
パスフレーズの変更 ダイアログウィンドウで、以下を行います。
- 現在のパスフレーズを入力します。
- 新しいパスフレーズを入力します。
- 新しいパスフレーズを確認します。
- Save をクリックします。
9.9. コマンドラインを使用した LUKS パスフレーズの変更 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインを使用して、暗号化されたディスクまたはパーティションの LUKS パスフレーズを変更します。cryptsetup ユーティリティーを使用すると、さまざまな設定オプションと機能を使用して暗号化プロセスを制御し、既存の自動化ワークフローにプロセスを統合できます。
前提条件
-
root特権、またはsudoを使用して管理コマンドを入力する権限がある。
手順
LUKS 暗号化デバイスの既存のパスフレーズを変更します。
cryptsetup luksChangeKey /dev/<device_ID>
# cryptsetup luksChangeKey /dev/<device_ID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <device_ID>は、デバイス指定子 (例:sda) に置き換えます。複数のキースロットが設定されている場合は、使用するスロットを指定できます。
cryptsetup luksChangeKey /dev/<device_ID> --key-slot <slot_number>
# cryptsetup luksChangeKey /dev/<device_ID> --key-slot <slot_number>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <slot_number>は、変更するキースロットの番号に置き換えます。現在のパスフレーズと新しいパスフレーズを入力します。
Enter passphrase to be changed: Enter new passphrase: Verify passphrase:
Enter passphrase to be changed: Enter new passphrase: Verify passphrase:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいパスフレーズを検証します。
cryptsetup --verbose open --test-passphrase /dev/<device_ID>
# cryptsetup --verbose open --test-passphrase /dev/<device_ID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
新しいパスフレーズでデバイスのロックを解除できることを確認します。
Enter passphrase for /dev/<device_ID>: Key slot <slot_number> unlocked. Command successful.
Enter passphrase for /dev/<device_ID>: Key slot <slot_number> unlocked. Command successful.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.10. storage RHEL システムロールを使用して LUKS2 暗号化ボリュームを作成する リンクのコピーリンクがクリップボードにコピーされました!
storage ロールを使用し、Ansible Playbook を実行して、LUKS で暗号化されたボリュームを作成および設定できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-vault createコマンドでエディターが開いたら、機密データを<key>: <value>形式で入力します。luks_password: <password>
luks_password: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.storage/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
LUKS 暗号化ボリュームの
luksUUID値を見つけます。ansible managed-node-01.example.com -m command -a 'cryptsetup luksUUID /dev/sdb' 4e4e7970-1822-470e-b55a-e91efe5d0f5c
# ansible managed-node-01.example.com -m command -a 'cryptsetup luksUUID /dev/sdb' 4e4e7970-1822-470e-b55a-e91efe5d0f5cCopy to Clipboard Copied! Toggle word wrap Toggle overflow ボリュームの暗号化ステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成された LUKS 暗号化ボリュームを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第10章 ポリシーベースの復号を使用した暗号化ボリュームの自動ロック解除の設定 リンクのコピーリンクがクリップボードにコピーされました!
ポリシーベースの複号 (PBD) は、物理マシンおよび仮想マシンにおいて、ハードドライブで暗号化した root ボリュームおよびセカンダリーボリュームのロックを解除できるようにする一連の技術です。PBD は、ユーザーパスワード、TPM (Trusted Platform Module) デバイス、システムに接続する PKCS #11 デバイス (たとえばスマートカード) などのさまざまなロックの解除方法、もくしは特殊なネットワークサーバーを使用します。
PBD を使用すると、ポリシーにさまざまなロックの解除方法を組み合わせて、さまざまな方法で同じボリュームのロックを解除できるようにすることができます。RHEL における PBD の現在の実装は、Clevis フレームワークと、ピン と呼ばれるプラグインで構成されます。ピンはそれぞれ個別のロック解除機能を提供します。現在利用できるピンは以下のとおりです。
tang- ネットワークサーバーを使用してボリュームのロックを解除できます。
tpm2- TPM2 ポリシーを使用してボリュームのロックを解除できます。
pkcs11- PKCS #11 URI を使用してボリュームのロックを解除できます。
sss- Shamir’s Secret Sharing (SSS) 暗号化スキームを使用して高可用性システムをデプロイできます。
10.1. Network-Bound Disk Encryption リンクのコピーリンクがクリップボードにコピーされました!
Network Bound Disc Encryption (NBDE) は、ポリシーベースの復号 (PBD) のサブカテゴリーであり、暗号化されたボリュームを特別なネットワークサーバーにバインドできるようにします。NBDE の現在の実装には、Tang サーバー自体と、Tang サーバー用の Clevis ピンが含まれます。
RHEL では、NBDE は次のコンポーネントとテクノロジーによって実装されます。
図10.1 LUKS1 で暗号化したボリュームを使用する場合の NBDE スキーム(luksmeta パッケージは、LUKS2 ボリュームには使用されません)
Tang は、ネットワークのプレゼンスにデータをバインドするためのサーバーです。セキュリティーが保護された特定のネットワークにシステムをバインドする際に利用可能なデータを含めるようにします。Tang はステートレスで、TLS または認証は必要ありません。エスクローベースのソリューション (サーバーが暗号鍵をすべて保存し、使用されたことがあるすべての鍵に関する知識を有する) とは異なり、Tang はクライアントの鍵と相互作用することはないため、クライアントから識別情報を得ることがありません。
Clevis は、自動化された復号用のプラグイン可能なフレームワークです。NBDE では、Clevis は、LUKS ボリュームの自動アンロックを提供します。clevis パッケージは、クライアントで使用される機能を提供します。
Clevis ピン は、Clevis フレームワークへのプラグインです。このようなピンの 1 つに、Tang があります。これは NBDE サーバーとのやり取りを実装するプラグインです。
Clevis および Tang は、一般的なクライアントおよびサーバーのコンポーネントで、ネットワークがバインドされた暗号化を提供します。RHEL では、LUKS と組み合わせて使用され、ルートおよび非ルートストレージボリュームを暗号化および復号して、ネットワークにバインドされたディスク暗号化を実現します。
クライアントおよびサーバーのコンポーネントはともに José ライブラリーを使用して、暗号化および複号の操作を実行します。
NBDE のプロビジョニングを開始すると、Tang サーバーの Clevis ピンは、Tang サーバーの、アドバタイズされている非対称鍵のリストを取得します。もしくは、鍵が非対称であるため、Tang の公開鍵のリストを帯域外に配布して、クライアントが Tang サーバーにアクセスしなくても動作できるようにします。このモードは オフラインプロビジョニング と呼ばれます。
Tang 用の Clevis ピンは、公開鍵のいずれかを使用して、固有で、暗号論的に強力な暗号鍵を生成します。この鍵を使用してデータを暗号化すると、この鍵は破棄されます。Clevis クライアントは、使いやすい場所に、このプロビジョニング操作で生成した状態を保存する必要があります。データを暗号化するこのプロセスは プロビジョニング手順 と呼ばれています。
LUKS バージョン 2 (LUKS2) は、RHEL のデフォルトのディスク暗号化形式であるため、NBDE のプロビジョニング状態は、LUKS2 ヘッダーにトークンとして保存されます。luksmeta パッケージによる NBDE のプロビジョニング状態は、LUKS1 で暗号化したボリュームにのみ使用されます。
Tang 用の Clevis ピンは、規格を必要とせずに LUKS1 と LUKS2 の両方をサポートします。Clevis はプレーンテキストファイルを暗号化できますが、ブロックデバイスの暗号化には cryptsetup ツールを使用する必要があります。詳細は、LUKS を使用したブロックデバイスの暗号化 を参照してください。
クライアントがそのデータにアクセスする準備ができると、プロビジョニング手順で生成したメタデータを読み込み、応答して暗号鍵を戻します。このプロセスは 復旧手順 と呼ばれます。
Clevis は、NBDE ではピンを使用して LUKS ボリュームをバインドしているため、自動的にロックが解除されます。バインドプロセスが正常に終了すると、提供されている Dracut アンロックを使用してディスクをアンロックできます。
kdump カーネルクラッシュのダンプメカニズムが、システムメモリーのコンテンツを LUKS で暗号化したデバイスに保存するように設定されている場合には、2 番目のカーネル起動時にパスワードを入力するように求められます。
10.2. enforcing モードの SELinux を使用して Tang サーバーをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
Tang サーバーを使用して、Clevis 対応クライアント上の LUKS 暗号化ボリュームのロックを自動的に解除できます。最小限のシナリオでは、tang パッケージをインストールし、systemctl enable tangd.socket --now コマンドを入力することにより、ポート 80 に Tang サーバーをデプロイします。次の手順の例では、SELinux 強制モードの限定サービスとしてカスタムポートで実行されている Tang サーバーのデプロイメントを示しています。
前提条件
-
policycoreutils-python-utilsパッケージおよび依存関係がインストールされている。 -
firewalldサービスが実行中である。
手順
tangパッケージとその依存関係をインストールするには、rootで以下のコマンドを実行します。dnf install tang
# dnf install tangCopy to Clipboard Copied! Toggle word wrap Toggle overflow 7500/tcp などの不要なポートを選択し、
tangdサービスがそのポートにバインドできるようにします。semanage port -a -t tangd_port_t -p tcp 7500
# semanage port -a -t tangd_port_t -p tcp 7500Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポートは 1 つのサービスのみで一度に使用できるため、すでに使用しているポートを使用しようとすると、
ValueError: Port already definedエラーが発生します。ファイアウォールのポートを開きます。
firewall-cmd --add-port=7500/tcp firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port=7500/tcp # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow tangdサービスを有効にします。systemctl enable tangd.socket
# systemctl enable tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow オーバーライドファイルを作成します。
systemctl edit tangd.socket
# systemctl edit tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のエディター画面で、
/etc/systemd/system/tangd.socket.d/ディレクトリーにある空のoverride.confファイルを開き、次の行を追加して、Tang サーバーのデフォルトのポートを、80 から、以前取得した番号に変更します。[Socket] ListenStream= ListenStream=7500
[Socket] ListenStream= ListenStream=7500Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要# Anything between hereと# Lines below thisで始まる行の間に以前のコードスニペットを挿入します。挿入しない場合、システムは変更を破棄します。-
変更を保存し、エディターを終了します。デフォルトの
viエディターでこれを実行するには、Esc キーを押してコマンドモードに切り替え、:wqと入力して Enter キーを押します。 変更した設定を再読み込みします。
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 設定が機能していることを確認します。
systemctl show tangd.socket -p Listen Listen=[::]:7500 (Stream)
# systemctl show tangd.socket -p Listen Listen=[::]:7500 (Stream)Copy to Clipboard Copied! Toggle word wrap Toggle overflow tangdサービスを開始します。systemctl restart tangd.socket
# systemctl restart tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow tangdが、systemdのソケットアクティベーションメカニズムを使用しているため、最初に接続するとすぐにサーバーが起動します。最初の起動時に、一組の暗号鍵が自動的に生成されます。鍵の手動生成などの暗号化操作を実行するには、joseユーティリティーを使用します。
検証
NBDE クライアントで、次のコマンドを使用して、Tang サーバーが正しく動作していることを確認します。このコマンドにより、暗号化と復号化に渡すものと同じメッセージが返される必要があります。
echo test | clevis encrypt tang '{"url":"<tang.server.example.com:7500>"}' -y | clevis decrypt test# echo test | clevis encrypt tang '{"url":"<tang.server.example.com:7500>"}' -y | clevis decrypt testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3. Tang サーバーの鍵のローテーションおよびクライアントでのバインディングの更新 リンクのコピーリンクがクリップボードにコピーされました!
セキュリティー上の理由から、Tang サーバーの鍵をローテーションし、クライアント上の既存のバインディングを定期的に更新してください。鍵をローテートするのに適した間隔は、アプリケーション、鍵のサイズ、および組織のポリシーにより異なります。
したがって、nbde_server RHEL システムロールを使用して、Tang 鍵をローテーションできます。詳細は 複数の Tang サーバー設定での nbde_server システムロールの使用 を参照してください。
前提条件
- Tang サーバーが実行している。
-
clevisパッケージおよびclevis-luksパッケージがクライアントにインストールされている。
手順
/var/db/tang鍵データベースディレクトリーのすべての鍵の名前の前に.を指定して、アドバタイズメントに対して非表示にします。以下の例のファイル名は、Tang サーバーの鍵データベースディレクトリーにある一意のファイル名とは異なります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名前が変更され、Tang サーバーのアドバタイズに対してすべての鍵が非表示になっていることを確認します。
ls -l total 0
# ls -l total 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Tang サーバーの
/var/db/tangで/usr/libexec/tangd-keygenコマンドを使用して新しい鍵を生成します。/usr/libexec/tangd-keygen /var/db/tang ls /var/db/tang 3ZWS6-cDrCG61UPJS2BMmPU4I54.jwk zyLuX6hijUy_PSeUEFDi7hi38.jwk
# /usr/libexec/tangd-keygen /var/db/tang # ls /var/db/tang 3ZWS6-cDrCG61UPJS2BMmPU4I54.jwk zyLuX6hijUy_PSeUEFDi7hi38.jwkCopy to Clipboard Copied! Toggle word wrap Toggle overflow Tang サーバーが、以下のように新規キーペアから署名キーを公開していることを確認します。
tang-show-keys 7500 3ZWS6-cDrCG61UPJS2BMmPU4I54
# tang-show-keys 7500 3ZWS6-cDrCG61UPJS2BMmPU4I54Copy to Clipboard Copied! Toggle word wrap Toggle overflow NBDE クライアントで
clevis luks reportコマンドを使用して、Tang サーバーでアドバタイズされた鍵が同じままかどうかを確認します。clevis luks listコマンドを使用すると、関連するバインディングのあるスロットを特定できます。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい鍵の LUKS メタデータを再生成するには、直前のコマンドプロンプトで
yを押すか、clevis luks regenコマンドを使用します。clevis luks regen -d /dev/sda2 -s 1
# clevis luks regen -d /dev/sda2 -s 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべての古いクライアントが新しい鍵を使用することを確認したら、Tang サーバーから古い鍵を削除できます。次に例を示します。
cd /var/db/tang rm .*.jwk
# cd /var/db/tang # rm .*.jwkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
クライアントが使用している最中に古い鍵を削除すると、データが失われる場合があります。このような鍵を誤って削除した場合は、クライアントで clevis luks regen コマンドを実行し、LUKS パスワードを手動で提供します。
10.4. Web コンソールで Tang キーを使用して自動ロック解除を設定する リンクのコピーリンクがクリップボードにコピーされました!
Tang サーバーが提供する鍵を使用して、LUKS で暗号化したストレージデバイスの自動ロック解除を設定できます。
前提条件
- RHEL 9 Web コンソールがインストールされている。
- cockpit サービスが有効になっている。
ユーザーアカウントが Web コンソールにログインできる。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
-
cockpit-storagedとclevis-luksパッケージがシステムにインストールされている。 -
cockpit.socketサービスがポート 9090 で実行されている。 - Tang サーバーを利用できる。詳細は、Deploying a Tang server with SELinux in enforcing mode 参照してください。
-
root特権、またはsudoを使用して管理コマンドを入力する権限がある。
手順
RHEL 9 Web コンソールにログインします。
詳細は、Web コンソールへのログイン を参照してください。
- 管理者アクセスに切り替え、認証情報を入力して、 をクリックします。Storage テーブルで、自動的にロックを解除するために追加する予定の暗号化ボリュームが含まれるディスクをクリックします。
次のページに選択したディスクの詳細が表示されたら、Keys セクションの をクリックして Tang 鍵を追加します。
Key sourceとしてTang keyserverを選択し、Tang サーバーのアドレスと、LUKS で暗号化されたデバイスのロックを解除するパスワードを入力します。 をクリックして確定します。以下のダイアログウインドウは、鍵ハッシュが一致することを確認するコマンドを提供します。
Tang サーバーのターミナルで、
tang-show-keysコマンドを使用して、比較のためにキーハッシュを表示します。この例では、Tang サーバーはポート 7500 で実行されています。tang-show-keys 7500 x100_1k6GPiDOaMlL3WbpCjHOy9ul1bSfdhI3M08wO0
# tang-show-keys 7500 x100_1k6GPiDOaMlL3WbpCjHOy9ul1bSfdhI3M08wO0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Web コンソールと前述のコマンドの出力のキーハッシュが同じ場合は、 をクリックします。
-
RHEL 9.2 以降では、暗号化されたルートファイルシステムと Tang サーバーを選択した後、カーネルコマンドラインへの
rd.neednet=1パラメーターの追加、clevis-dracutパッケージのインストール、および初期 RAM ディスクイメージ (initrd) の再生成をスキップできます。非ルートファイルシステムの場合、Web コンソールは、remote-cryptsetup.targetおよびclevis-luks-akspass.pathsystemdユニットを有効にし、clevis-systemdパッケージをインストールし、_netdevパラメーターをfstabおよびcrypttab設定ファイルに追加するようになりました。
検証
新規に追加された Tang キーが
Keyserverタイプの Keys セクションにリスト表示されていることを確認します。バインディングが初期ブートで使用できることを確認します。次に例を示します。
lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
# lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.5. 基本的な NBDE および TPM2 暗号化クライアント操作 リンクのコピーリンクがクリップボードにコピーされました!
Clevis フレームワークは、プレーンテキストファイルを暗号化し、JSON Web Encryption (JWE) 形式の暗号化テキストと LUKS 暗号化ブロックデバイスの両方を復号できます。Clevis クライアントは、暗号化操作に Tang ネットワークサーバーまたは Trusted Platform Module 2.0(TPM 2.0) チップのいずれかを使用できます。
次のコマンドは、プレーンテキストファイルが含まれる例で Clevis が提供する基本的な機能を示しています。また、NBDE または Clevis + TPM のデプロイメントのトラブルシューティングにも使用できます。
Tang サーバーにバインドされた暗号化クライアント
Clevis 暗号化クライアントが Tang サーバーにバインドサれることを確認するには、
clevis encrypt tangサブコマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例の
http://tang.srv:portURL は、tangがインストールされているサーバーの URL と一致するように変更します。secret.jwe出力ファイルには、JWE 形式で暗号化した暗号文が含まれます。この暗号文はinput-plain.txt入力ファイルから読み込まれます。また、設定に SSH アクセスなしで Tang サーバーとの非対話型の通信が必要な場合は、アドバタイズメントをダウンロードしてファイルに保存できます。
curl -sfg http://tang.srv:port/adv -o adv.jws
$ curl -sfg http://tang.srv:port/adv -o adv.jwsCopy to Clipboard Copied! Toggle word wrap Toggle overflow adv.jwsファイル内のアドバタイズメントは、ファイルやメッセージの暗号化など、後続のタスクに使用します。echo 'hello' | clevis encrypt tang '{"url":"http://tang.srv:port","adv":"adv.jws"}'$ echo 'hello' | clevis encrypt tang '{"url":"http://tang.srv:port","adv":"adv.jws"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow データを複号するには、
clevis decryptコマンドを実行して、暗号文 (JWE) を提供します。clevis decrypt < secret.jwe > output-plain.txt
$ clevis decrypt < secret.jwe > output-plain.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
TPM 2.0 を使用する暗号化クライアント
TPM 2.0 チップを使用して暗号化するには、JSON 設定オブジェクト形式の引数のみが使用されている
clevis encrypt tpm2サブコマンドを使用します。clevis encrypt tpm2 '{}' < input-plain.txt > secret.jwe$ clevis encrypt tpm2 '{}' < input-plain.txt > secret.jweCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別の階層、ハッシュ、および鍵アルゴリズムを選択するには、以下のように、設定プロパティーを指定します。
clevis encrypt tpm2 '{"hash":"sha256","key":"rsa"}' < input-plain.txt > secret.jwe$ clevis encrypt tpm2 '{"hash":"sha256","key":"rsa"}' < input-plain.txt > secret.jweCopy to Clipboard Copied! Toggle word wrap Toggle overflow データを復号するには、JSON Web Encryption (JWE) 形式の暗号文を提供します。
clevis decrypt < secret.jwe > output-plain.txt
$ clevis decrypt < secret.jwe > output-plain.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ピンは、PCR (Platform Configuration Registers) 状態へのデータのシーリングにも対応します。このように、PCR ハッシュ値が、シーリング時に使用したポリシーと一致する場合にのみ、データのシーリングを解除できます。
たとえば、SHA-256 バンクに対して、インデックス 0 および 7 の PCR にデータをシールするには、以下を行います。
clevis encrypt tpm2 '{"pcr_bank":"sha256","pcr_ids":"0,7"}' < input-plain.txt > secret.jwe
$ clevis encrypt tpm2 '{"pcr_bank":"sha256","pcr_ids":"0,7"}' < input-plain.txt > secret.jwe
PCR のハッシュは書き換えることができ、暗号化されたボリュームのロックを解除することはできなくなりました。このため、PCR の値が変更された場合でも、暗号化されたボリュームのロックを手動で解除できる強力なパスフレーズを追加します。
shim-x64 パッケージのアップグレード後にシステムが暗号化されたボリュームのロックを自動的に解除できない場合は、Red Hat ナレッジベースソリューション Clevis TPM2 no longer decrypts LUKS devices after a restart を参照してください。
10.6. LUKS 暗号化ボリュームのロックを自動解除するように NBDE クライアントを設定する リンクのコピーリンクがクリップボードにコピーされました!
Clevis フレームワークを使用すると、選択した Tang サーバーが使用可能な場合に、LUKS 暗号化ボリュームのロックを自動解除するようにクライアントを設定できます。これにより、Network-Bound Disk Encryption (NBDE) デプロイメントが作成されます。
前提条件
- Tang サーバーが実行されていて、使用できるようにしてある。
手順
既存の LUKS 暗号化ボリュームのロックを自動的に解除するには、
clevis-luksサブパッケージをインストールします。dnf install clevis-luks
# dnf install clevis-luksCopy to Clipboard Copied! Toggle word wrap Toggle overflow PBD 用 LUKS 暗号化ボリュームを特定します。次の例では、ブロックデバイスは /dev/sda2 と呼ばれています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow clevis luks bindコマンドを使用して、ボリュームを Tang サーバーにバインドします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、以下の 4 つの手順を実行します。
- LUKS マスター鍵と同じエントロピーを使用して、新しい鍵を作成します。
- Clevis で新しい鍵を暗号化します。
- LUKS2 ヘッダートークンに Clevis JWE オブジェクトを保存するか、デフォルト以外の LUKS1 ヘッダーが使用されている場合は LUKSMeta を使用します。
- LUKS を使用する新しい鍵を有効にします。
注記バインド手順では、空き LUKS パスワードスロットが少なくとも 1 つあることが前提となっています。そのスロットの 1 つを
clevis luks bindコマンドが使用します。ボリュームは、現在、既存のパスワードと Clevis ポリシーを使用してロックを解除できます。
システムの起動プロセスの初期段階でディスクバインディングを処理するには、インストール済みのシステムで
dracutツールを使用します。RHEL では、Clevis はホスト固有の設定オプションを指定せずに汎用initrd(初期 RAM ディスク) を生成し、カーネルコマンドラインにrd.neednet=1などのパラメーターを自動的に追加しません。初期の起動時にネットワークを必要とする Tang ピンを使用する場合は、--hostonly-cmdline引数を使用し、dracutが Tang バインディングを検出するとrd.neednet=1を追加します。clevis-dracutパッケージをインストールします。dnf install clevis-dracut
# dnf install clevis-dracutCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初期 RAM ディスクを再生成します。
dracut -fv --regenerate-all --hostonly-cmdline
# dracut -fv --regenerate-all --hostonly-cmdlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow または、
/etc/dracut.conf.d/ディレクトリーに .conf ファイルを作成し、そのファイルにhostonly_cmdline=yesオプションを追加します。すると、--hostonly-cmdlineなしでdracutを使用できます。次に例を示します。echo "hostonly_cmdline=yes" > /etc/dracut.conf.d/clevis.conf dracut -fv --regenerate-all
# echo "hostonly_cmdline=yes" > /etc/dracut.conf.d/clevis.conf # dracut -fv --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow Clevis がインストールされているシステムで
grubbyツールを使用して、システム起動時の早い段階で Tang ピンのネットワークを利用できるようにすることができます。grubby --update-kernel=ALL --args="rd.neednet=1"
# grubby --update-kernel=ALL --args="rd.neednet=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Clevis JWE オブジェクトが LUKS ヘッダーに正常に配置されていることを確認します。
clevis luks listコマンドを使用します。clevis luks list -d /dev/sda2 1: tang '{"url":"http://tang.srv:port"}'# clevis luks list -d /dev/sda2 1: tang '{"url":"http://tang.srv:port"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow バインディングが初期ブートで使用できることを確認します。次に例を示します。
lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
# lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.7. 静的な IP 設定を持つ NBDE クライアントの設定 リンクのコピーリンクがクリップボードにコピーされました!
(DHCP を使用しない) 静的な IP 設定を持つクライアントに NBDE を使用するには、ネットワーク設定を dracut ツールに手動で渡す必要があります。
前提条件
- Tang サーバーが実行されていて、使用できるようにしてある。
Tang サーバーによって暗号化されたボリュームのロックを自動解除するように NBDE クライアントが設定されている。
詳細は、LUKS 暗号化ボリュームのロックを自動解除するように NBDE クライアントを設定する を参照してください。
手順
静的ネットワーク設定を、
dracutコマンドのkernel-cmdlineオプションの値として指定できます。次に例を示します。dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"
# dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、静的ネットワーク情報を含む .conf ファイルを
/etc/dracut.conf.d/ディレクトリーに作成し、初期 RAM ディスクイメージを再生成します。cat /etc/dracut.conf.d/static_ip.conf kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100" dracut -fv --regenerate-all
# cat /etc/dracut.conf.d/static_ip.conf kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100" # dracut -fv --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.8. TPM 2.0 ポリシーを使用して LUKS 暗号化ボリュームの手動登録を設定する リンクのコピーリンクがクリップボードにコピーされました!
Trusted Platform Module 2.0 (TPM 2.0) ポリシーを使用して、LUKS 暗号化ボリュームのロック解除を設定できます。
前提条件
- アクセス可能な TPM2.0 互換デバイス。
- システムが 64 ビット Intel アーキテクチャー、または 64 ビット AMD アーキテクチャーである。
手順
既存の LUKS 暗号化ボリュームのロックを自動的に解除するには、
clevis-luksサブパッケージをインストールします。dnf install clevis-luks
# dnf install clevis-luksCopy to Clipboard Copied! Toggle word wrap Toggle overflow PBD 用 LUKS 暗号化ボリュームを特定します。次の例では、ブロックデバイスは /dev/sda2 と呼ばれています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow clevis luks bindコマンドを使用して、ボリュームを TPM 2.0 デバイスにバインドします。以下に例を示します。clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa"}' ... Do you wish to initialize /dev/sda2? [yn] y Enter existing LUKS password:# clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa"}' ... Do you wish to initialize /dev/sda2? [yn] y Enter existing LUKS password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、以下の 4 つの手順を実行します。
- LUKS マスター鍵と同じエントロピーを使用して、新しい鍵を作成します。
- Clevis で新しい鍵を暗号化します。
- LUKS2 ヘッダートークンに Clevis JWE オブジェクトを保存するか、デフォルト以外の LUKS1 ヘッダーが使用されている場合は LUKSMeta を使用します。
LUKS を使用する新しい鍵を有効にします。
注記バインド手順では、空き LUKS パスワードスロットが少なくとも 1 つあることが前提となっています。そのスロットの 1 つを
clevis luks bindコマンドが使用します。あるいは、特定の Platform Configuration Registers (PCR) の状態にデータをシールする場合は、
clevis luks bindコマンドにpcr_bankとpcr_ids値を追加します。以下に例を示します。clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa","pcr_bank":"sha256","pcr_ids":"0,1"}'# clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa","pcr_bank":"sha256","pcr_ids":"0,1"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要PCR ハッシュ値がシール時に使用されるポリシーと一致し、ハッシュを書き換えることができる場合にのみ、データをアンシールできるため、PCR の値が変更された場合、暗号化されたボリュームのロックを手動で解除できる強力なパスフレーズを追加します。
shim-x64パッケージをアップグレードした後、システムが暗号化されたボリュームのロックを自動的に解除できない場合は、Red Hat ナレッジベースソリューション Clevis TPM2 no longer decrypts LUKS devices after a restart を参照してください。
- ボリュームは、現在、既存のパスワードと Clevis ポリシーを使用してロックを解除できます。
システムの起動プロセスの初期段階でディスクバインディングを処理するようにするには、インストール済みのシステムで
dracutツールを使用します。dnf install clevis-dracut dracut -fv --regenerate-all
# dnf install clevis-dracut # dracut -fv --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Clevis JWE オブジェクトが LUKS ヘッダーに適切に置かれていることを確認するには、
clevis luks listコマンドを使用します。clevis luks list -d /dev/sda2 1: tpm2 '{"hash":"sha256","key":"rsa"}'# clevis luks list -d /dev/sda2 1: tpm2 '{"hash":"sha256","key":"rsa"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.9. PKCS #11 ピンを使用して LUKS 暗号化ボリュームのロック解除を設定する リンクのコピーリンクがクリップボードにコピーされました!
PKCS #11 と互換性のあるデバイス (スマートカードまたはハードウェアセキュリティーモジュール (HSM)) を使用して、LUKS で暗号化されたボリュームのロック解除を設定できます。
Clevis PKCS #11 ピンを使用して暗号化されたボリュームを自動的にロック解除するには、/etc/crypttab ファイルの変更も必要です。この変更により、コンソールでユーザーにプロンプトを表示する代わりに、AF_UNIX ソケットを使用して、ボリュームのロックを解除するためのキーフレーズを待機するように systemd マネージャーを設定します。
Clevis PKCS #11 のユニットファイルは、ディスクのロック解除に関する情報を送受信するためのソケットを /run/systemd/clevis-pkcs11.sock ファイル内に設定します。Clevis PKCS #11 ピンによってロック解除されるディスクの場合は、ソケットファイルをキーファイルとして設定する必要があります。
前提条件
- PKCS #11 デバイスがすでに設定されており、アクセス可能である。
-
clevis-pin-pkcs11パッケージがインストールされている。 -
clevis luks bindコマンド用に、LUKS パスワードの空きスロットが少なくとも 1 つある。
手順
PBD 用 LUKS 暗号化ボリュームを特定します。次の例では、ブロックデバイスは /dev/sda2 と呼ばれています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ボリュームのロック解除に使用する PKCS #11 デバイスの URI を特定します。次に例を示します。
pkcs11-tool -L | grep uri uri : pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=42facd1f749ece7f;token=clevis uri : pkcs11:model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29
$ pkcs11-tool -L | grep uri uri : pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=42facd1f749ece7f;token=clevis uri : pkcs11:model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29Copy to Clipboard Copied! Toggle word wrap Toggle overflow clevis luks bindコマンドを使用してボリュームを PKCS #11 デバイスにバインドします。次に例を示します。clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public"}' … Do you wish to initialize /dev/sda2? [yn] y Enter existing LUKS password:# clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public"}' … Do you wish to initialize /dev/sda2? [yn] y Enter existing LUKS password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、次の手順を実行します。
- LUKS マスター鍵と同じエントロピーを使用して、新しい鍵を作成します。
- Clevis で新しい鍵を暗号化します。
- LUKS2 ヘッダートークンに Clevis JWE オブジェクトを保存するか、デフォルト以外の LUKS1 ヘッダーが使用されている場合は LUKSMeta を使用します。
- LUKS を使用する新しい鍵を有効にします。
オプション: 使用するモジュールを指定する必要がある場合は、module-path URI パラメーターを追加します。
clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2";model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public}'# clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2";model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow clevis-luks-pkcs11-askpass.socketユニットを有効にします。systemctl enable --now clevis-luks-pkcs11-askpass.socket
# systemctl enable --now clevis-luks-pkcs11-askpass.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow テキストエディターで
/etc/crypttabファイルを開き、PKCS #11 ピンでロックを解除する LUKS 暗号化ボリュームを含む行を特定します。次に例を示します。luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 - -
luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 - -Copy to Clipboard Copied! Toggle word wrap Toggle overflow ダッシュを
/run/systemd/clevis-pkcs11.sockファイルパスとkeyfile-timeoutオプションに置き換えます。luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 /run/systemd/clevis-pkcs11.sock keyfile-timeout=30s
luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 /run/systemd/clevis-pkcs11.sock keyfile-timeout=30sCopy to Clipboard Copied! Toggle word wrap Toggle overflow keyfile-timeoutオプションは、ロック解除エラーが発生し、システムがコンソールからパスフレーズを手動で入力する必要がある場合に、次の処理に移行する仕組みを提供します。- 変更を保存し、エディターを終了します。
システムの起動プロセスの初期段階で、ルートファイルシステムのロックを解除するために必要なディスクバインディングを処理するには、インストール済みのシステムで
dracutツールを使用します。dracut -fv --regenerate-all
# dracut -fv --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
次回のブートプロセス中に、PKCS #11 デバイス PIN の入力が要求されます。正しい PIN を入力した場合にのみ、対応する設定済みの暗号化ディスクが復号化されます。
検証
ブートプロセスを手動でテストする代わりに、次のコマンドを使用してテキストメッセージを暗号化および復号化できます。
echo "top secret" | clevis encrypt pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2?pin-value=<PIN>"}' | clevis decrypt# echo "top secret" | clevis encrypt pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2?pin-value=<PIN>"}' | clevis decryptCopy to Clipboard Copied! Toggle word wrap Toggle overflow <PIN>は PIN 値に置き換えます。メッセージを復号化するには、この PIN 値を入力する必要があります。Clevis JWE オブジェクトが LUKS ヘッダーに正常に配置されていることを確認するには、
clevis luks listコマンドを使用します。次に例を示します。clevis luks list -d /dev/sda2 1: pkcs11 '{"uri": "pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II; serial=0a35ba26b062b9c5;token=clevis;id=%02;object=Encryption%20Key? module-path=/usr/lib64/libykcs11.so.2"}'# clevis luks list -d /dev/sda2 1: pkcs11 '{"uri": "pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II; serial=0a35ba26b062b9c5;token=clevis;id=%02;object=Encryption%20Key? module-path=/usr/lib64/libykcs11.so.2"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.10. LUKS で暗号化したボリュームからの Clevis ピンの手動削除 リンクのコピーリンクがクリップボードにコピーされました!
clevis luks bind コマンドで作成されたメタデータを手動で削除する場合や、Clevis が追加したパスフレーズを含む鍵スロットを一掃するには、以下の手順を行います。
LUKS で暗号化したボリュームから Clevis ピンを削除する場合は、clevis luks unbind コマンドを使用することが推奨されます。clevis luks unbind を使用した削除手順は、1 回のステップで構成され、LUKS1 ボリュームおよび LUKS2 ボリュームの両方で機能します。次のコマンド例は、バインド手順で作成されたメタデータを削除し、/dev/sda2 デバイスの鍵スロット 1 を削除します。
clevis luks unbind -d /dev/sda2 -s 1
# clevis luks unbind -d /dev/sda2 -s 1
前提条件
- Clevis バインディングを使用した LUKS 暗号化ボリューム。
手順
/dev/sda2などのボリュームがどの LUKS バージョンであるかを確認し、Clevis にバインドされているスロットおよびトークンを特定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、Clevis トークンは
0で識別され、関連付けられたキースロットは1です。LUKS2 暗号化の場合は、トークンを削除します。
cryptsetup token remove --token-id 0 /dev/sda2
# cryptsetup token remove --token-id 0 /dev/sda2Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバイスを LUKS1 で暗号化し、
cryptsetup luksDumpコマンドの出力にVersion: 1文字列が示されている場合は、luksmeta wipeコマンドでこの追加手順を行います。luksmeta wipe -d /dev/sda2 -s 1
# luksmeta wipe -d /dev/sda2 -s 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Clevis パスフレーズを含む鍵スロットを削除します。
cryptsetup luksKillSlot /dev/sda2 1
# cryptsetup luksKillSlot /dev/sda2 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.11. キックスタートを使用して LUKS 暗号化ボリュームの自動登録を設定する リンクのコピーリンクがクリップボードにコピーされました!
この手順に従って、LUKS で暗号化されたボリュームの登録に Clevis を使用する自動インストールプロセスを設定します。
手順
一時パスワードを使用して、LUKS 暗号化が有効になっているディスクを、
/boot以外のすべてのマウントポイントで分割するように、キックスタートに指示します。パスワードは、登録プロセスの手順に使用するための一時的なものです。part /boot --fstype="xfs" --ondisk=vda --size=256 part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppass
part /boot --fstype="xfs" --ondisk=vda --size=256 part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppassCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSPP 準拠のシステムには、より複雑な設定が必要であることに注意してください。次に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 関連する Clevis パッケージを
%packagesセクションに追加して、インストールします。%packages clevis-dracut clevis-luks clevis-systemd %end
%packages clevis-dracut clevis-luks clevis-systemd %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow - オプション: 必要に応じて暗号化されたボリュームのロックを手動で解除できるようにするには、一時パスフレーズを削除する前に強力なパスフレーズを追加します。詳細は、Red Hat ナレッジベースソリューション How to add a passphrase, key, or keyfile to an existing LUKS device を参照してください。
clevis luks bindを呼び出して、%postセクションのバインディングを実行します。その後、一時パスワードを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定が起動初期にネットワークを必要とする Tang ピンに依存している場合、または静的 IP 設定の NBDE クライアントを使用している場合は、Configuring manual enrollment of LUKS-encrypted volumesに従って
dracutコマンドを変更する必要があります。clevis luks bindコマンドの-yオプションは、RHEL 8.3 から使用できることに注意してください。RHEL 8.2 以前では、clevis luks bindコマンドで-yを-fに置き換え、Tang サーバーからアドバタイズメントをダウンロードします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告cryptsetup luksRemoveKeyコマンドは、それを適用する LUKS2 デバイスがそれ以上に管理されるのを防ぎます。LUKS1 デバイスに対してのみdmsetupコマンドを使用して、削除されたマスターキーを回復できます。
Tang サーバーの代わりに TPM 2.0 ポリシーを使用する場合は、同様の手順を使用できます。
10.12. LUKS で暗号化されたリムーバブルストレージデバイスの自動ロック解除を設定する リンクのコピーリンクがクリップボードにコピーされました!
LUKS 暗号化 USB ストレージデバイスの自動ロック解除プロセスを設定できます。
手順
USB ドライブなど、LUKS で暗号化したリムーバブルストレージデバイスを自動的にアンロックするには、
clevis-udisks2パッケージをインストールします。dnf install clevis-udisks2
# dnf install clevis-udisks2Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動し、LUKS で暗号化したボリュームの手動登録の設定 に従って、
clevis luks bindコマンドを使用したバインディング手順を実行します。以下に例を示します。clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'# clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、LUKS で暗号化されたリムーバブルデバイスを、GNOME デスクトップセッションで自動的にロック解除できるようになりました。Clevis ポリシーにバインドするデバイスは、
clevis luks unlockコマンドでアンロックできます。clevis luks unlock -d /dev/sdb1
# clevis luks unlock -d /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Tang サーバーの代わりに TPM 2.0 ポリシーを使用する場合は、同様の手順を使用できます。
10.13. 高可用性 NBDE システムをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
Tang は、高可用性デプロイメントを構築する方法を 2 つ提供します。
- クライアントの冗長性 (推奨)
-
クライアントは、複数の Tang サーバーにバインドする機能を使用して設定する必要があります。この設定では、各 Tang サーバーに独自の鍵があり、クライアントは、このサーバーのサブセットに接続することで復号できます。Clevis はすでに、
sssプラグインを使用してこのワークフローに対応しています。Red Hat は、高可用性のデプロイメントにこの方法を推奨します。 - 鍵の共有
-
冗長性を確保するために、Tang のインスタンスは複数デプロイできます。2 つ目以降のインスタンスを設定するには、
tangパッケージをインストールし、SSH経由でrsyncを使用してその鍵ディレクトリーを新規ホストにコピーします。鍵を共有すると鍵への不正アクセスのリスクが高まり、追加の自動化インフラストラクチャーが必要になるため、Red Hat はこの方法を推奨していません。
シャミアの秘密分散を使用した高可用性 NBDE
シャミアの秘密分散 (SSS) は、秘密を複数の固有のパーツに分割する暗号スキームです。秘密を再構築するには、いくつかのパーツが必要になります。数値はしきい値と呼ばれ、SSS はしきい値スキームとも呼ばれます。
Clevis は、SSS の実装を提供します。鍵を作成し、これをいくつかのパーツに分割します。各パーツは、SSS も再帰的に含む別のピンを使用して暗号化されます。また、しきい値 t も定義します。NBDE デプロイメントで少なくとも t の部分を復号すると、暗号化鍵が復元され、復号プロセスが成功します。Clevis がしきい値で指定されている数よりも小さい部分を検出すると、エラーメッセージが出力されます。
例 1: 2 台の Tang サーバーを使用した冗長性
次のコマンドは、2 台の Tang サーバーのうち少なくとも 1 台が使用可能な場合に、LUKS で暗号化されたデバイスを復号します。
clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'
# clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'
上記のコマンドでは、以下の設定スキームを使用していました。
この設定では、リストに記載されている 2 台の tang サーバーのうち少なくとも 1 つが利用可能であれば、SSS しきい値 t が 1 に設定され、clevis luks bind コマンドが秘密を正常に再構築します。
例 2: Tang サーバーと TPM デバイスで共有している秘密
次のコマンドは、tang サーバーと tpm2 デバイスの両方が利用可能な場合に、LUKS で暗号化したデバイスを正常に復号します。
clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,7"}}}'
# clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,7"}}}'
SSS しきい値 't' が '2' に設定されている設定スキームは以下のようになります。
10.14. NBDE ネットワークで仮想マシンをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
clevis luks bind コマンドは、LUKS マスター鍵を変更しません。これは、仮想マシンまたはクラウド環境で使用する、LUKS で暗号化したイメージを作成する場合に、このイメージを実行するすべてのインスタンスがマスター鍵を共有することを意味します。これにはセキュリティーの観点で大きな問題があるため、常に回避する必要があります。
これは、Clevis の制限ではなく、LUKS の設計原理です。シナリオでクラウド内のルートボリュームを暗号化する必要がある場合は、クラウド内の Red Hat Enterprise Linux の各インスタンスに対しても (通常はキックスタートを使用して) インストールプロセスを実行します。このイメージは、LUKS マスター鍵を共有しなければ共有できません。
仮想化環境で自動ロック解除をデプロイメントするには、lorax や virt-install などのシステムとキックスタートファイル (キックスタートを使用した LUKS 暗号化ボリュームの自動登録の設定参照) またはその他の自動プロビジョニングツールを使用して、各暗号化 VM に固有のマスターキーを確実に付与します。
10.15. NBDE を使用してクラウド環境用の自動登録可能な仮想マシンイメージをビルドする リンクのコピーリンクがクリップボードにコピーされました!
自動登録可能な暗号化イメージをクラウド環境にデプロイすると、特有の課題が発生する可能性があります。他の仮想化環境と同様に、LUKS マスター鍵を共有しないように、1 つのイメージから起動するインスタンス数を減らすことが推奨されます。
したがって、ベストプラクティスは、どのパブリックリポジトリーでも共有されず、限られたインスタンスのデプロイメントのベースを提供するように、イメージをカスタマイズすることです。作成するインスタンスの数は、デプロイメントのセキュリティーポリシーで定義する必要があります。また、LUKS マスター鍵の攻撃ベクトルに関連するリスク許容度に基づいて決定する必要があります。
LUKS に対応する自動デプロイメントを構築するには、Lorax、virt-install などのシステムとキックスタートファイルを一緒に使用し、イメージ構築プロセス中にマスター鍵の一意性を確保する必要があります。
クラウド環境では、ここで検討する 2 つの Tang サーバーデプロイメントオプションが利用できます。まず、クラウド環境そのものに Tang サーバーをデプロイできます。もしくは、2 つのインフラストラクチャー間で VPN リンクを使用した独立したインフラストラクチャーで、クラウドの外に Tang サーバーをデプロイできます。
クラウドに Tang をネイティブにデプロイすると、簡単にデプロイできます。ただし、別のシステムの暗号文のデータ永続化層でインフラストラクチャーを共有します。Tang サーバーの秘密鍵および Clevis メタデータは、同じ物理ディスクに保存できる場合があります。この物理ディスクでは、暗号文データへのいかなる不正アクセスが可能になります。
データを保存する場所と Tang を実行するシステムを、常に物理的に分離してください。クラウドと Tang サーバーを分離することで、Tang サーバーの秘密鍵が、Clevis メタデータと誤って結合することがないようにします。さらに、これにより、クラウドインフラストラクチャーが危険にさらされている場合に、Tang サーバーのローカル制御を提供します。
10.16. コンテナーとしての Tang のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
tang コンテナーイメージは、OpenShift Container Platform (OCP) クラスターまたは別の仮想マシンで実行する Clevis クライアントの Tang-server 復号化機能を提供します。
前提条件
-
podmanパッケージとその依存関係がシステムにインストールされている。 -
podman login registry.redhat.ioコマンドを使用してregistry.redhat.ioコンテナーカタログにログインしている。詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。 - Clevis クライアントは、Tang サーバーを使用して、自動的にアンロックする LUKS で暗号化したボリュームを含むシステムにインストールされている。
手順
registry.redhat.ioレジストリーからtangコンテナーイメージをプルします。podman pull registry.redhat.io/rhel9/tang
# podman pull registry.redhat.io/rhel9/tangCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを実行し、そのポートを指定して Tang 鍵へのパスを指定します。上記の例では、
tangコンテナーを実行し、ポート 7500 を指定し、/var/db/tangディレクトリーの Tang 鍵へのパスを示します。podman run -d -p 7500:7500 -v tang-keys:/var/db/tang --name tang registry.redhat.io/rhel9/tang
# podman run -d -p 7500:7500 -v tang-keys:/var/db/tang --name tang registry.redhat.io/rhel9/tangCopy to Clipboard Copied! Toggle word wrap Toggle overflow Tang はデフォルトでポート 80 を使用しますが、Apache HTTP サーバーなどの他のサービスと共存する可能性があることに注意してください。
オプション: セキュリティーを強化する場合は、Tang 鍵を定期的にローテーションします。
tangd-rotate-keysスクリプトを使用できます。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Tang サーバーが存在しているために自動アンロック用に LUKS で暗号化したボリュームが含まれているシステムで、Clevis クライアントが Tang を使用してプレーンテキストのメッセージを暗号化および復号化できることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンド例は、localhost URL で Tang サーバーが利用できる場合にその出力の最後に
テスト文字列を示し、ポート 7500 経由で通信します。
10.17. RHEL システムロールを使用した NBDE の設定 リンクのコピーリンクがクリップボードにコピーされました!
nbde_client および nbde_server RHEL システムロールを使用すると、Clevis および Tang を使用した Policy-Based Decryption (PBD) ソリューションを自動でデプロイできます。rhel-system-roles パッケージには、これらのシステムロール、関連する例、リファレンスドキュメントが含まれます。
10.17.1. 複数の Tang サーバーのセットアップに nbde_server RHEL システムロールを使用する リンクのコピーリンクがクリップボードにコピーされました!
nbde_server システムロールを使用すると、自動ディスク暗号化ソリューションの一部として、Tang サーバーをデプロイして管理できます。このロールは以下の機能をサポートします。
- Tang 鍵のローテーション
- Tang 鍵のデプロイおよびバックアップ
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このサンプル Playbook により、Tang サーバーのデプロイと鍵のローテーションが実行されます。
サンプル Playbook で指定されている設定は次のとおりです。
nbde_server_manage_firewall: true-
firewallシステムロールを使用して、nbde_serverロールで使用されるポートを管理します。 nbde_server_manage_selinux: trueselinuxシステムロールを使用して、nbde_serverロールで使用されるポートを管理します。Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.nbde_server/README.mdファイルを参照してください。
Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
NBDE クライアントで、次のコマンドを使用して、Tang サーバーが正しく動作していることを確認します。このコマンドにより、暗号化と復号化に渡すものと同じメッセージが返される必要があります。
ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt' test# ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt' testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.17.2. nbde_client RHEL システムロールを使用して DHCP を使用する Clevis クライアントを設定する リンクのコピーリンクがクリップボードにコピーされました!
nbde_client システムロールにより、複数の Clevis クライアントを自動的にデプロイできます。
このロールを使用すると、LUKS で暗号化されたボリュームを 1 つ以上の Network-Bound (NBDE) サーバー (Tang サーバー) にバインドすることが可能です。パスフレーズを使用して既存のボリュームの暗号化を保持するか、削除できます。パスフレーズを削除したら、NBDE だけを使用してボリュームのロックを解除できます。これは、システムのプロビジョニング後に削除する必要がある一時鍵またはパスワードを使用して、ボリュームが最初に暗号化されている場合に役立ちます。
パスフレーズと鍵ファイルの両方を指定する場合には、ロールは最初に指定した内容を使用します。有効なバインディングが見つからない場合は、既存のバインディングからパスフレーズの取得を試みます。
Policy-Based Decryption (PBD) では、デバイスとスロットのマッピングの形でバインディングを定義します。そのため、同じデバイスに対して複数のバインドを設定できます。デフォルトのスロットは 1 です。
nbde_client システムロールは、Tang バインディングのみをサポートします。したがって、TPM2 バインディングには使用できません。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - LUKS を使用してすでに暗号化されているボリューム。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このサンプル Playbook は、2 台の Tang サーバーのうち少なくとも 1 台が利用可能な場合に、LUKS で暗号化した 2 つのボリュームを自動的にアンロックするように Clevis クライアントを設定します。
サンプル Playbook で指定されている設定は次のとおりです。
state: present-
stateの値は、Playbook を実行した後の設定を示します。新しいバインディングを作成するか、既存のバインディングを更新する場合は、presentを使用します。clevis luks bindとは異なり、state: presentを使用してデバイススロットにある既存のバインディングを上書きすることもできます。absentに設定すると、指定したバインディングが削除されます。 nbde_client_early_boot: truenbde_clientロールは、デフォルトで、起動初期段階で Tang ピン用のネットワークを利用可能にします。この機能を無効にする必要がある場合は、Playbook にnbde_client_early_boot: false変数を追加します。Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.nbde_client/README.mdファイルを参照してください。
Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
NBDE クライアントで、Tang サーバーによって自動的にロック解除される暗号化ボリュームの LUKS ピンに、対応する情報が含まれていることを確認します。
ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root' 1: tang '{"url":"<http://server1.example.com/>"}' 2: tang '{"url":"<http://server2.example.com/>"}'# ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root' 1: tang '{"url":"<http://server1.example.com/>"}' 2: tang '{"url":"<http://server2.example.com/>"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow nbde_client_early_boot: false変数を使用しない場合は、起動初期にバインディングが使用できることを確認します。次に例を示します。ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks' lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
# ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks' lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.17.3. nbde_client RHEL システムロールを使用して静的 IP Clevis クライアントを設定する リンクのコピーリンクがクリップボードにコピーされました!
nbde_client RHEL システムロールは、Dynamic Host Configuration Protocol (DHCP) を使用する環境にのみ対応しています。静的 IP 設定の NBDE クライアントでは、ネットワーク設定をカーネルブートパラメーターとして渡す必要があります。
通常、管理者は Playbook を再利用します。Ansible が起動初期段階で静的 IP アドレスを割り当てるホストごとに、個別の Playbook を管理することはありません。そうすることにより、Playbook 内の変数を使用し、外部ファイルで設定を提供できます。そのため、必要なのは Playbook 1 つと設定を含むファイル 1 つだけです。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - LUKS を使用してすでに暗号化されているボリューム。
手順
ホストのネットワーク設定を含むファイル (例:
static-ip-settings-clients.yml) を作成し、ホストに動的に割り当てる値を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Playbook は、
~/static-ip-settings-clients.ymlファイルにリストされている各ホストの特定の値を動的に読み取ります。Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第11章 システムの監査 リンクのコピーリンクがクリップボードにコピーされました!
監査はシステムのセキュリティーを強化するものではありませんが、システム上のセキュリティーポリシー違反を検出するために使用できます。検出後、SELinux などの追加のセキュリティー対策を設定することで、同じ違反の再発を防ぐことができます。
11.1. Linux の Audit リンクのコピーリンクがクリップボードにコピーされました!
Linux の Audit システムは、システムのセキュリティー関連情報を追跡する方法を提供します。事前設定されたルールに基づき、Audit は、ログエントリーを生成し、システムで発生しているイベントに関する情報をできるだけ多く記録します。この情報は、ミッションクリティカルな環境でセキュリティーポリシーの違反者と、違反者によるアクションを判断する上で必須のものです。
以下は、Audit がログファイルに記録できる情報の概要です。
- イベントの日時、タイプ、結果
- サブジェクトとオブジェクトの機密性のラベル
- イベントを開始したユーザーの ID とイベントの関連性
- Audit 設定の全修正および Audit ログファイルへのアクセス試行
- SSH、Kerberos などの認証メカニズムのすべての使用
-
信頼できるデータベース (
/etc/passwdなど) への変更 - システムからの情報のインポート、およびシステムへの情報のエクスポートの試行
- ユーザー ID、サブジェクトとオブジェクトのラベルなどの属性に基づくイベントの追加と除外
Audit システムの使用は、多くのセキュリティー関連の認定における要件でもあります。Audit は、以下の認定またはコンプライアンスガイドの要件に合致するか、それを超えるように設計されています。
- Controlled Access Protection Profile (CAPP)
- Labeled Security Protection Profile (LSPP)
- Rule Set Base Access Control (RSBAC)
- NISPOM (National Industrial Security Program Operating Manual)
- Federal Information Security Management Act (FISMA)
- Payment Card Industry - Data Security Standard (PCI-DSS)
- Security Technical Implementation Guides (STIG)
監査は、National Information Assurance Partnership (NIAP) および Best Security Industries (BSI) によっても評価されています。
ユースケース
- ファイルアクセスの監視
- Audit は、ファイルやディレクトリーがアクセス、修正、または実行されたか、もしくはファイル属性が変更されたかを追跡できます。これはたとえば、重要なファイルへのアクセスを検出し、これらのファイルが破損した場合に監査証跡を入手可能とする際に役に立ちます。
- システムコールの監視
-
Audit は、一部のシステムコールが使用されるたびにログエントリーを生成するように設定できます。これを使用すると、
settimeofdayやclock_adjtime、その他の時間関連のシステムコールを監視することで、システム時間への変更を追跡できます。 - ユーザーが実行したコマンドの記録
-
Audit はファイルが実行されたかどうかを追跡できるため、特定のコマンドの実行を毎回記録するようにルールを定義できます。たとえば、
/binディレクトリー内のすべての実行可能ファイルにルールを定義できます。これにより作成されるログエントリーをユーザー ID で検索すると、ユーザーごとに実行されたコマンドの監査証跡を生成できます。 - システムのパス名の実行の記録
- ルールの呼び出し時にパスを inode に変換するファイルアクセスをウォッチする以外に、ルールの呼び出し時に存在しない場合や、ルールの呼び出し後にファイルが置き換えられた場合でも、Audit がパスの実行をウォッチできるようになりました。これにより、ルールは、プログラム実行ファイルをアップグレードした後、またはインストールされる前にも機能を継続できます。
- セキュリティーイベントの記録
-
pam_faillock認証モジュールは、失敗したログイン試行を記録できます。Audit で失敗したログイン試行も記録するように設定すると、ログインを試みたユーザーに関する追加情報が提供されます。 - イベントの検索
-
Audit は
ausearchユーティリティーを提供します。これを使用すると、ログエントリーをフィルターにかけ、いくつかの条件に基づく完全な監査証跡を提供できます。 - サマリーレポートの実行
-
aureportユーティリティーを使用すると、記録されたイベントのデイリーレポートを生成できます。システム管理者は、このレポートを分析し、疑わしいアクティビティーをさらに調べることができます。 - ネットワークアクセスの監視
-
nftables、iptables、およびebtablesユーティリティーは、Audit イベントを発生するように設定できるため、システム管理者がネットワークアクセスを監視できるようになります。
システムのパフォーマンスは、Audit が収集する情報量によって影響される可能性があります。
11.2. Audit システムのアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Audit システムは、ユーザー空間アプリケーションおよびユーティリティーと、カーネル側のシステムコール処理という 2 つの主要部分で構成されます。カーネルコンポーネントは、ユーザー空間アプリケーションからシステムコールを受け、これを user、task、fstype、または exit のいずれかのフィルターで振り分けます。
システムコールが exclude フィルターを通過すると、前述のフィルターのいずれかに送られます。このフィルターにより、Audit ルール設定に基づいてシステムコールが Audit デーモンに送信され、さらに処理されます。
ユーザー空間の Audit デーモンは、カーネルから情報を収集し、ログファイルのエントリーを作成します。他のユーザー空間ユーティリティーは、Audit デーモン、カーネルの Audit コンポーネント、または Audit ログファイルと相互作用します。
-
auditctlAudit 制御ユーティリティーはカーネル Audit コンポーネントと相互作用し、ルールを管理するだけでなくイベント生成プロセスの多くの設定やパラメーターも制御します。 -
残りの Audit ユーティリティーは、Audit ログファイルのコンテンツを入力として受け取り、ユーザーの要件に基づいて出力を生成します。たとえば、
aureportユーティリティーは、記録された全イベントのレポートを生成します。
RHEL 9 では、Audit dispatcher デーモン (audisp) 機能は、Audit デーモン (auditd) に統合されています。監査イベントと、リアルタイムの分析プログラムの相互作用に使用されるプラグイン設定ファイルは、デフォルトで /etc/audit/plugins.d/ ディレクトリーに保存されます。
11.3. 環境を保護するための auditd の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの auditd 設定は、ほとんどの環境に適しています。ただし、環境が厳格なセキュリティーポリシーを満たす必要がある場合は、/etc/audit/auditd.conf ファイル内の Audit デーモン設定の次の設定を変更できます。
log_file-
Audit ログファイル (通常は
/var/log/audit/) を保持するディレクトリーは、別のマウントポイントにマウントされている必要があります。これにより、その他のプロセスがこのディレクトリー内の領域を使用しないようにし、Audit デーモンの残りの領域を正確に検出します。 max_log_file-
1 つの Audit ログファイルの最大サイズを指定します。Audit ログファイルを保持するパーティションで利用可能な領域をすべて使用するように設定する必要があります。
max_log_file`パラメーターは、最大ファイルサイズをメガバイト単位で指定します。指定する値は、数値にする必要があります。 max_log_file_action-
max_log_fileに設定した制限に達すると実行するアクションを指定します。Audit ログファイルが上書きされないようにkeep_logsに設定する必要があります。 space_left-
space_left_actionパラメーターに設定したアクションが発生するディスクの空き容量を指定します。管理者は、ディスクの領域を反映して解放するのに十分な時間を設定する必要があります。space_leftの値は、Audit ログファイルが生成される速度によって異なります。space_left の値が整数として指定されている場合は、メガバイト (MiB) 単位の絶対サイズとして解釈されます。値が 1 〜 99 の数値の後にパーセント記号を付けて指定されている場合 (5% など)、Audit デーモンは、log_fileを含むファイルシステムのサイズに基づいて、メガバイト単位で絶対サイズを計算します。 space_left_action-
space_left_actionパラメーターは、適切な通知方法 (emailまたはexec) に設定することが推奨されます。 admin_space_left-
admin_space_left_actionパラメーターに設定したアクションが発生するディスクの空き領域の最小サイズ。管理者が実行するアクションのログを記録するのに十分なサイズを残す必要があります。このパラメーターの数値は、space_left の数値より小さくする必要があります。また、数値にパーセント記号を追加 (1% など) して、Audit デーモンが、ディスクパーティションサイズに基づいて、数値を計算するようにすることもできます。 admin_space_left_action-
singleを、システムをシングルユーザーモードにし、管理者がディスク領域を解放できるようにします。 disk_full_action-
Audit ログファイルが含まれるパーティションに空き領域がない場合に発生するアクションを指定します (
haltまたはsingleに設定する必要があります)。これにより、Audit がイベントをログに記録できなくなると、システムは、シングルユーザーモードでシャットダウンまたは動作します。 disk_error_action-
Audit ログファイルが含まれるパーティションでエラーが検出された場合に発生するアクションを指定します。このパラメーターは、ハードウェアの機能不全処理に関するローカルのセキュリティーポリシーに基づいて、
syslog、single、haltのいずれかに設定する必要があります。 flush-
incremental_asyncに設定する必要があります。これはfreqパラメーターと組み合わせて機能します。これは、ハードドライブとのハード同期を強制する前にディスクに送信できるレコードの数を指定します。freqパラメーターは100に設定する必要があります。このパラメーターにより、アクティビティーが集中した際に高いパフォーマンスを保ちつつ、Audit イベントデータがディスクのログファイルと確実に同期されるようになります。
残りの設定オプションは、ローカルのセキュリティーポリシーに合わせて設定します。
11.4. auditd の開始および制御 リンクのコピーリンクがクリップボードにコピーされました!
auditd が設定されたら、サービスを起動して Audit 情報を収集し、ログファイルに保存します。root ユーザーで次のコマンドを実行し、auditd を起動します。
service auditd start
# service auditd start
システムの起動時に auditd が起動するように設定するには、次のコマンドを実行します。
systemctl enable auditd
# systemctl enable auditd
# auditctl -e 0 で auditd を一時的に無効にし、# auditctl -e 1 で再度有効にできます。
service auditd <action> コマンドを使用すると、auditd で他のアクションを実行できます。<action> は次のいずれかです。
stop-
auditdを停止します。 restart-
auditdを再起動します。 reloadまたはforce-reload-
/etc/audit/auditd.confファイルからauditdの設定を再ロードします。 rotate-
/var/log/audit/ディレクトリーのログファイルをローテーションします。 resume- Audit イベントのログが一旦停止した後、再開します。たとえば、Audit ログファイルが含まれるディスクパーティションの未使用領域が不足している場合などです。
condrestartまたはtry-restart-
auditdがすでに起動している場合にのみ、これを再起動します。 status-
auditdの稼働状況を表示します。
service コマンドは、auditd デーモンと正しく相互作用する唯一の方法です。auid 値が適切に記録されるように、service コマンドを使用する必要があります。systemctl コマンドは、2 つのアクション (enable および status) にのみ使用できます。
11.5. Audit ログファイルについて リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Audit システムはログエントリーを /var/log/audit/audit.log ファイルに保存します。ログローテーションが有効になっていれば、ローテーションされた audit.log ファイルは同じディレクトリーに保存されます。
下記の Audit ルールを追加して、/etc/ssh/sshd_config ファイルの読み取りまたは修正の試行をすべてログに記録します。
auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
auditd デーモンが実行している場合は、たとえば次のコマンドを使用して、Audit ログファイルに新しいイベントを作成します。
cat /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config
このイベントは、audit.log ファイルでは以下のようになります。
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config" type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman" type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
上記のイベントは 4 つのレコードで構成されており、タイムスタンプとシリアル番号を共有します。レコードは、常に type= で始まります。各レコードは、スペースまたはコンマで区切られた複数の名前と値のペア (name=value ) で構成されます。上記のイベントの詳細な分析は以下のようになります。
1 つ目のレコード
type=SYSCALL-
typeフィールドには、レコードのタイプが記載されます。この例のSYSCALL値は、カーネルへのシステムコールによりこれが記録されたことを示しています。
msg=audit(1364481363.243:24287):msgフィールドには以下が記録されます。-
audit(time_stamp:ID)形式のレコードのタイムスタンプおよび一意の ID。複数のレコードが同じ Audit イベントの一部として生成されている場合は、同じタイムスタンプおよび ID を共有できます。タイムスタンプは Unix の時間形式です (1970 年 1 月 1 日 00:00:00 UTC からの秒数)。 -
カーネル空間およびユーザー空間のアプリケーションが提供するさまざまなイベント固有の
name=valueペア。
-
arch=c000003e-
archフィールドには、システムの CPU アーキテクチャーに関する情報が含まれます。c000003eの値は 16 進数表記で記録されます。ausearchコマンドで Audit レコードを検索する場合は、-iオプションまたは--interpretオプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。c000003e値はx86_64として解釈されます。 syscall=2-
syscallフィールドは、カーネルに送信されたシステムコールのタイプを記録します。値が2の場合は、/usr/include/asm/unistd_64.hファイルに、人間が判読できる値を指定できます。この場合の2は、オープンなシステムコールです。ausyscallユーティリティーでは、システムコール番号を、人間が判読できる値に変換できます。ausyscall --dumpコマンドを使用して、システムコールのリストとその数字を表示します。詳細は、ausyscall(8) の man ページを参照してください。 success=no-
successフィールドは、その特定のイベントで記録されたシステムコールが成功したかどうかを記録します。この例では、呼び出しが成功しませんでした。 exit=-13exitフィールドには、システムコールが返した終了コードを指定する値が含まれます。この値は、システムコールにより異なります。次のコマンドを実行すると、この値を人間が判読可能なものに変換できます。ausearch --interpret --exit -13
# ausearch --interpret --exit -13Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、監査ログに、終了コード
-13で失敗したイベントが含まれていることが前提となります。a0=7fffd19c5592,a1=0,a2=7fffd19c5592,a3=a-
a0からa3までのフィールドは、このイベントにおけるシステムコールの最初の 4 つの引数を、16 進法で記録します。この引数は、使用されるシステムコールにより異なります。ausearchユーティリティーで解釈できます。 items=1-
itemsフィールドには、システムコールのレコードに続く PATH 補助レコードの数が含まれます。 ppid=2686-
ppidフィールドは、親プロセス ID (PPID) を記録します。この例では、2686は、bashなどの親プロセスの PPID です。 pid=3538-
pidフィールドは、プロセス ID (PID) を記録します。この例の3538はcatプロセスの PID です。 auid=1000-
auidフィールドには、loginuid である Audit ユーザー ID が記録されます。この ID は、ログイン時にユーザーに割り当てられ、ユーザーの ID が変更した後でもすべてのプロセスに引き継がれます (たとえば、su - johnコマンドでユーザーアカウントを切り替えた場合)。 uid=1000-
uidフィールドは、解析しているプロセスを開始したユーザーのユーザー ID を記録します。ユーザー ID は、ausearch -i --uid UIDのコマンドを使用するとユーザー名に変換されます。 gid=1000-
gidフィールドは、解析しているプロセスを開始したユーザーのグループ ID を記録します。 euid=1000-
euidフィールドは、解析しているプロセスを開始したユーザーの実効ユーザー ID を記録します。 suid=1000-
suidフィールドは、解析しているプロセスを開始したユーザーのセットユーザー ID を記録します。 fsuid=1000-
fsuidフィールドは、解析しているプロセスを開始したユーザーのファイルシステムユーザー ID を記録します。 egid=1000-
egidフィールドは、解析しているプロセスを開始したユーザーの実効グループ ID を記録します。 sgid=1000-
sgidフィールドは、解析しているプロセスを開始したユーザーのセットグループ ID を記録します。 fsgid=1000-
fsgidフィールドは、解析しているプロセスを開始したユーザーのファイルシステムグループ ID を記録します。 tty=pts0-
ttyフィールドは、解析しているプロセスが開始したターミナルを記録します。 ses=1-
sesフィールドは、解析しているプロセスが開始したセッションのセッション ID を記録します。 comm="cat"-
commフィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドライン名を記録します。この例では、この Audit イベントを発生するのに、catコマンドが使用されました。 exe="/bin/cat"-
exeフィールドは、解析しているプロセスを開始するために使用した実行可能ファイルへのパスを記録します。 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023-
subjフィールドは、解析しているプロセスの実行時にラベル付けされた SELinux コンテンツを記録します。 key="sshd_config"-
keyフィールドは、Audit ログでこのイベントを生成したルールに関連付けられている管理者による定義の文字列を記録します。
2 つ目のレコード
type=CWD2 つ目のレコードの
typeフィールドの値は、CWD(現在の作業ディレクトリー) です。このタイプは、最初のレコードで指定されたシステムコールを開始したプロセスの作業ディレクトリーを記録するために使用されます。この記録の目的は、相対パスが関連する PATH 記録に保存された場合に、現行プロセスの位置を記録することにあります。これにより、絶対パスを再構築できます。
msg=audit(1364481363.243:24287)-
msgフィールドは、最初のレコードと同じタイムスタンプと ID の値を保持します。タイムスタンプは Unix の時間形式です (1970 年 1 月 1 日 00:00:00 UTC からの秒数)。 cwd="/home/user_name"-
cwdフィールドは、システムコールが開始したディレクトリーのパスになります。
3 つ目のレコード
type=PATH-
3 つ目のレコードでは、
typeフィールドの値はPATHです。Audit イベントには、システムコールに引数として渡されたすべてのパスにPATHタイプのレコードが含まれます。この Audit イベントでは、1 つのパス (/etc/ssh/sshd_config) のみが引数として使用されます。 msg=audit(1364481363.243:24287):-
msgフィールドは、1 つ目と 2 つ目のレコードと同じタイムスタンプと ID になります。 item=0-
itemフィールドは、SYSCALLタイプレコードで参照されているアイテムの合計数のうち、現在のレコードがどのアイテムであるかを示します。この数はゼロベースで、0は最初の項目であることを示します。 name="/etc/ssh/sshd_config"-
nameフィールドは、システムコールに引数として渡されたファイルまたはディレクトリーのパスを記録します。この場合、これは/etc/ssh/sshd_configファイルです。 inode=409248inodeフィールドには、このイベントで記録されたファイルまたはディレクトリーに関連する inode 番号が含まれます。以下のコマンドは、inode 番号409248に関連するファイルまたはディレクトリーを表示します。find / -inum 409248 -print /etc/ssh/sshd_config
# find / -inum 409248 -print /etc/ssh/sshd_configCopy to Clipboard Copied! Toggle word wrap Toggle overflow dev=fd:00-
devフィールドは、このイベントで記録されたファイルまたはディレクトリーを含むデバイスのマイナーおよびメジャーの ID を指定します。ここでは、値が/dev/fd/0デバイスを示しています。 mode=0100600-
modeフィールドは、ファイルまたはディレクトリーのパーミッションを、st_modeフィールドのstatコマンドが返す数字表記で記録します。詳細は、stat(2)の man ページを参照してください。この場合、0100600は-rw-------として解釈されます。つまり、root ユーザーにのみ、/etc/ssh/sshd_configファイルに読み取りおよび書き込みのパーミッションが付与されます。 ouid=0-
ouidフィールドは、オブジェクトの所有者のユーザー ID を記録します。 ogid=0-
ogidフィールドは、オブジェクトの所有者のグループ ID を記録します。 rdev=00:00-
rdevフィールドには、特定ファイルにのみ記録されたデバイス識別子が含まれます。ここでは、記録されたファイルは通常のファイルであるため、このフィールドは使用されません。 obj=system_u:object_r:etc_t:s0-
objフィールドは、実行時に、記録されているファイルまたはディレクトリーにラベル付けする SELinux コンテキストを記録します。 nametype=NORMAL-
nametypeフィールドは、指定したシステムコールのコンテキストで各パスのレコード操作の目的を記録します。 cap_fp=none-
cap_fpフィールドは、ファイルまたはディレクトリーオブジェクトで許可されたファイルシステムベースの機能の設定に関連するデータを記録します。 cap_fi=none-
cap_fiフィールドは、ファイルまたはディレクトリーオブジェクトの継承されたファイルシステムベースの機能の設定に関するデータを記録します。 cap_fe=0-
cap_feフィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能の有効ビットの設定を記録します。 cap_fver=0-
cap_fverフィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能のバージョンを記録します。
4 つ目のレコード
type=PROCTITLE-
typeフィールドには、レコードのタイプが記載されます。この例のPROCTITLE値は、このレコードにより、カーネルへのシステムコールにより発生するこの監査イベントを発生させた完全なコマンドラインを提供することが指定されることを示しています。 proctitle=636174002F6574632F7373682F737368645F636F6E666967-
proctitleフィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドラインを記録します。このフィールドは 16 進数の表記で記録され、Audit ログパーサーに影響が及ばないようにします。このテキストは、この Audit イベントを開始したコマンドに復号します。ausearchコマンドで Audit レコードを検索する場合は、-iオプションまたは--interpretオプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。636174002F6574632F7373682F737368645F636F6E666967値は、cat /etc/ssh/sshd_configとして解釈されます。
11.6. auditctl で Audit ルールを定義および実行 リンクのコピーリンクがクリップボードにコピーされました!
Audit システムは、ログファイルで取得するものを定義する一連のルールで動作します。Audit ルールは、auditctl ユーティリティーを使用してコマンドラインで設定するか、/etc/audit/rules.d/ ディレクトリーで設定できます。
auditctl コマンドを使用すると、Audit システムの基本的な機能を制御し、どの Audit イベントをログに記録するかを指定するルールを定義できます。
ファイルシステムのルールの例
すべての書き込みアクセスと
/etc/passwdファイルのすべての属性変更をログに記録するルールを定義するには、次のコマンドを実行します。auditctl -w /etc/passwd -p wa -k passwd_changes
# auditctl -w /etc/passwd -p wa -k passwd_changesCopy to Clipboard Copied! Toggle word wrap Toggle overflow すべての書き込みアクセスと、
/etc/selinux/ディレクトリー内の全ファイルへのアクセスと、その属性変更をすべてログに記録するルールを定義するには、次のコマンドを実行します。auditctl -w /etc/selinux/ -p wa -k selinux_changes
# auditctl -w /etc/selinux/ -p wa -k selinux_changesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
システムロールのルールの例
システムで 64 ビットアーキテクチャーが使用され、システムコールの
adjtimexまたはsettimeofdayがプログラムにより使用されるたびにログエントリーを作成するルールを定義するには、次のコマンドを実行します。auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_changeCopy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザー ID が 1000 以上のシステムユーザーがファイルを削除したりファイル名を変更するたびに、ログエントリーを作成するルールを定義するには、次のコマンドを実行します。
auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k deleteCopy to Clipboard Copied! Toggle word wrap Toggle overflow -F auid!=4294967295オプションが、ログイン UID が設定されていないユーザーを除外するために使用されています。
実行可能なファイルルール
/bin/id プログラムのすべての実行をログに取得するルールを定義するには、次のコマンドを実行します。
auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id
# auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id
11.7. 永続的な Audit ルールの定義 リンクのコピーリンクがクリップボードにコピーされました!
再起動後も持続するように Audit ルールを定義するには、/etc/audit/rules.d/audit.rules ファイルに直接追加するか、/etc/audit/rules.d/ ディレクトリーにあるルールを読み込む augenrules プログラムを使用する必要があります。
auditd サービスを開始すると、/etc/audit/audit.rules ファイルが生成されることに注意してください。/etc/audit/rules.d/ のファイルは、同じ auditctl コマンドライン構文を使用してルールを指定します。ハッシュ記号 (#) に続く空の行とテキストは無視されます。
また、auditctl コマンドは、以下のように -R オプションを使用して指定したファイルからルールを読み込むのに使用することもできます。
auditctl -R /usr/share/audit/sample-rules/30-stig.rules
# auditctl -R /usr/share/audit/sample-rules/30-stig.rules
11.8. 標準に準拠するための事前設定された監査ルールファイル リンクのコピーリンクがクリップボードにコピーされました!
特定の認定標準 (OSPP、PCI DSS、STIG など) に準拠するように Audit を設定するには、audit パッケージとともにインストールされる事前設定済みルールファイルのセットを出発点として使用できます。サンプルルールは、/usr/share/audit/sample-rules ディレクトリーにあります。
セキュリティー標準は動的であり、変更される可能性があるため、sample-rules ディレクトリー内の Audit サンプルルールは網羅的なものではなく、最新のものでもありません。これらのルールは、Audit ルールがどのように構造化および記述されるかを示すためにのみ提供されています。これらは、最新のセキュリティー標準に即時に準拠することを保証するものではありません。特定のセキュリティーガイドラインに従ってシステムを最新のセキュリティー標準に準拠させるには、SCAP ベースのセキュリティーコンプライアンスツール を使用してください。
30-nispom.rules- 「National Industrial Security Program Operating Manual」の「Information System Security」の章で指定されている要件を満たす監査ルール設定
30-ospp-v42*.rules- OSPP (Protection Profile for General Purpose Operating Systems) プロファイルバージョン 4.2 に定義されている要件を満たす監査ルール設定
30-pci-dss-v31.rules- PCI DSS (Payment Card Industry Data Security Standard) v3.1 に設定されている要件を満たす監査ルール設定
30-stig.rules- Security Technical Implementation Guides (STIG) で設定されている要件を満たす監査ルール設定
上記の設定ファイルを使用するには、/etc/audit/rules.d/ ディレクトリーにコピーして、以下のように augenrules --load コマンドを使用します。
cd /usr/share/audit/sample-rules/ cp 10-base-config.rules 30-stig.rules 31-privileged.rules 99-finalize.rules /etc/audit/rules.d/ augenrules --load
# cd /usr/share/audit/sample-rules/
# cp 10-base-config.rules 30-stig.rules 31-privileged.rules 99-finalize.rules /etc/audit/rules.d/
# augenrules --load
番号指定スキームを使用して監査ルールを順序付けできます。詳細は、/usr/share/audit/sample-rules/README-rules ファイルを参照してください。
11.9. 永続ルールを定義する augenrules の使用 リンクのコピーリンクがクリップボードにコピーされました!
augenrules スクリプトは、/etc/audit/rules.d/ ディレクトリーにあるルールを読み込み、audit.rules ファイルにコンパイルします。このスクリプトは、自然なソート順序の特定の順番で、.rules で終わるすべてのファイルを処理します。このディレクトリーのファイルは、以下の意味を持つグループに分類されます。
- 10
- カーネルと auditctl の設定
- 20
- 一般的なルールと一致する可能性があるが、別の一致が必要なルール
- 30
- 主なルール
- 40
- オプションのルール
- 50
- サーバー固有のルール
- 70
- システムのローカルルール
- 90
- ファイナライズ (イミュータブル)
ルールは、すべてを一度に使用することは意図されていません。ルールは考慮すべきポリシーの一部であり、個々のファイルは /etc/audit/rules.d/ にコピーされます。たとえば、STIG 設定でシステムを設定し、10-base-config、30-stig、31-privileged、99-finalize の各ルールをコピーします。
/etc/audit/rules.d/ ディレクトリーにルールを置いたら、--load ディレクティブで augenrules スクリプトを実行することでそれを読み込みます。
11.10. augenrules の無効化 リンクのコピーリンクがクリップボードにコピーされました!
augenrules ユーティリティーを無効にするには、以下の手順に従います。これにより、Audit が /etc/audit/audit.rules ファイルで定義されたルールを使用するように切り替えます。
手順
/usr/lib/systemd/system/auditd.serviceファイルを/etc/systemd/system/ディレクトリーにコピーします。cp -f /usr/lib/systemd/system/auditd.service /etc/systemd/system/
# cp -f /usr/lib/systemd/system/auditd.service /etc/systemd/system/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 任意のテキストエディターで
/etc/systemd/system/auditd.serviceファイルを編集します。以下に例を示します。vi /etc/systemd/system/auditd.service
# vi /etc/systemd/system/auditd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow augenrulesを含む行をコメントアウトし、auditctl -Rコマンドを含む行のコメント設定を解除します。#ExecStartPost=-/sbin/augenrules --load ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rules
#ExecStartPost=-/sbin/augenrules --load ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemdデーモンを再読み込みして、auditd.serviceファイルの変更を取得します。systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow auditdサービスを再起動します。service auditd restart
# service auditd restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.11. ソフトウェアの更新を監視するための Audit の設定 リンクのコピーリンクがクリップボードにコピーされました!
事前設定されたルール 44-installers.rules を使用して、ソフトウェアをインストールする次のユーティリティーを監視するように Audit を設定できます。
-
dnf[2] -
yum -
pip -
npm -
cpan -
gem -
luarocks
rpm ユーティリティーを監視するには、rpm-plugin-audit パッケージをインストールします。その後、Audit は、パッケージをインストールまたは更新するときに SOFTWARE_UPDATE イベントを生成します。これらのイベントをリスト表示するには、コマンドラインで ausearch -m SOFTWARE_UPDATE と入力します。
事前設定されたルールファイルは、ppc64le および aarch64 アーキテクチャーを備えたシステムでは使用できません。
前提条件
-
auditdが、環境を保護するための auditd の設定で提供される設定に従って定義されている。
手順
事前設定されたルールファイル
44-installers.rulesを/usr/share/audit/sample-rules/ディレクトリーから/etc/audit/rules.d/ディレクトリーにコピーします。cp /usr/share/audit/sample-rules/44-installers.rules /etc/audit/rules.d/
# cp /usr/share/audit/sample-rules/44-installers.rules /etc/audit/rules.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 監査ルールを読み込みます。
augenrules --load
# augenrules --loadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
読み込まれたルールをリスト表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インストールを実行します。以下に例を示します
dnf reinstall -y vim-enhanced
# dnf reinstall -y vim-enhancedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Audit ログで最近のインストールイベントを検索します。次に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
dnf は RHEL ではシンボリックリンクであるため、dnf Audit ルールのパスにはシンボリックリンクのターゲットが含まれている必要があります。正しい Audit イベントを受信するには、path=/usr/bin/dnf パスを /usr/bin/dnf-3 に変更して、44-installers.rules ファイルを変更します。
11.12. Audit によるユーザーログイン時刻の監視 リンクのコピーリンクがクリップボードにコピーされました!
特定の時刻にログインしたユーザーを監視するために、特別な方法で Audit を設定する必要はありません。同じ情報を表示する異なる方法を提供する ausearch または aureport ツールを使用できます。
前提条件
-
auditdが、環境を保護するための auditd の設定で提供される設定に従って定義されている。
手順
ユーザーのログイン時刻を表示するには、次のいずれかのコマンドを使用します。
監査ログで
USER_LOGINメッセージタイプを検索します。ausearch -m USER_LOGIN -ts '12/02/2020' '18:00:00' -sv no time->Mon Nov 22 07:33:22 2021 type=USER_LOGIN msg=audit(1637584402.416:92): pid=1939 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=login acct="(unknown)" exe="/usr/sbin/sshd" hostname=? addr=10.37.128.108 terminal=ssh res=failed'
# ausearch -m USER_LOGIN -ts '12/02/2020' '18:00:00' -sv no time->Mon Nov 22 07:33:22 2021 type=USER_LOGIN msg=audit(1637584402.416:92): pid=1939 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=login acct="(unknown)" exe="/usr/sbin/sshd" hostname=? addr=10.37.128.108 terminal=ssh res=failed'Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
-tsオプションを使用して日付と時刻を指定できます。このオプションを使用しない場合、ausearchは今日の結果を提供し、時刻を省略すると、ausearchは午前 0 時からの結果を提供します。 -
成功したログイン試行を除外するには
-sv yesオプションを、失敗したログイン試行を除外するには-sv noを、それぞれ使用することができます。
-
ausearchコマンドの生の出力をaulastユーティリティーにパイプで渡します。このユーティリティーは、lastコマンドの出力と同様の形式で出力を表示します。以下に例を示します。ausearch --raw | aulast --stdin root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.22.16.106 Mon Nov 22 07:40 - 07:40 (00:00) reboot system boot 4.18.0-348.6.el8 Mon Nov 22 07:33
# ausearch --raw | aulast --stdin root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.22.16.106 Mon Nov 22 07:40 - 07:40 (00:00) reboot system boot 4.18.0-348.6.el8 Mon Nov 22 07:33Copy to Clipboard Copied! Toggle word wrap Toggle overflow --login -iオプションを指定してaureportコマンドを使用し、ログインイベントのリストを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第12章 fapolicyd を使用したアプリケーションの拒否および許可 リンクのコピーリンクがクリップボードにコピーされました!
ルールセットに基づいてアプリケーションの実行を許可または拒否するポリシーを設定して有効にすることで、効率的に悪意のある一般的に知られていないソフトウェアや、害を及ぼす可能性のあるソフトウェアの実行を回避できます。
12.1. fapolicyd の概要 リンクのコピーリンクがクリップボードにコピーされました!
fapolicyd ソフトウェアフレームワークは、ユーザー定義のポリシーに基づいてアプリケーションの実行を制御します。このフレームワークは、最適な方法で、システム上で信頼されていないアプリケーションや悪意のあるアプリケーションを実行されないようにします。
fapolicyd フレームワークは、以下のコンテンツを提供します。
-
fapolicydサービス -
fapolicydコマンドラインユーティリティー -
fapolicydRPM プラグイン -
fapolicydルール言語 -
fagenrulesスクリプト
管理者は、パス、ハッシュ、MIME タイプ、信頼に基づいて、すべてのアプリケーションに実行ルール allow および deny の両方を監査する定義できます。
fapolicyd フレームワークにより、信頼の概念が導入されます。アプリケーションは、システムパッケージマネージャーによって適切にインストールされると信頼されるため、システムの RPM データベースに登録されます。fapolicyd デーモンは、RPM データベースを信頼できるバイナリーとスクリプトのリストとして使用します。fapolicyd RPM プラグインは、DNF Package Manager または RPM Package Manager のいずれかで処理されるシステム更新をすべて登録するようになりました。プラグインは、このデータベースの変更を fapolicyd デーモンに通知します。アプリケーションを追加する他の方法では、カスタムルールを作成し、fapolicyd サービスを再起動する必要があります。
fapolicyd サービス設定は、次の構造を持つ /etc/fapolicyd/ ディレクトリーにあります。
-
/etc/fapolicyd/fapolicyd.trustファイルには、信頼できるファイルのリストが含まれています。/etc/fapolicyd/trust.d/ディレクトリーで複数の信頼ファイルを使用することもできます。 -
allowおよびdenyの実行ルールを含むファイルの/etc/fapolicyd/rules.d/ディレクトリー。fagenrulesスクリプトは、これらのコンポーネントルールファイルを/etc/fapolicyd/compiled.rulesファイルにマージします。 -
fapolicyd.confファイルには、デーモンの設定オプションが含まれています。このファイルは、主にパフォーマンス調整の目的で役に立ちます。
/etc/fapolicyd/rules.d/ のルールは、それぞれ異なるポリシーゴールを表す複数のファイルで整理されます。対応するファイル名の先頭の数字によって、/etc/fapolicyd/compiled.rules での順序が決まります。
- 10
- 言語ルール
- 20
- dracut 関連のルール
- 21
- アップデーターのルール
- 30
- パターン
- 40
- ELF ルール
- 41
- 共有オブジェクトルール
- 42
- 信頼された ELF ルール
- 70
- 信頼された言語ルール
- 72
- シェルルール
- 90
- 実行拒否ルール
- 95
- オープン許可ルール
fapolicyd 整合性チェックには、次のいずれかの方法を使用できます。
- File-size チェック
- SHA-256 ハッシュの比較
- Integrity Measurement Architecture (IMA) サブシステム
デフォルトでは、fapolicyd は整合性チェックを行いません。ファイルサイズに基づいた整合性チェックは高速ですが、攻撃者はファイルの内容を置き換え、そのバイトサイズを保持することができます。SHA-256 チェックサムの計算とチェックがより安全ですが、システムのパフォーマンスに影響します。fapolicyd.conf の integrity = ima オプションでは、実行可能ファイルを含むすべてのファイルシステムでファイル拡張属性 (xattr とも呼ばれます) のサポートが必要です。
12.2. fapolicyd のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
fapolicyd アプリケーションの許可リストフレームワークをデプロイする場合は、最初に permissive モードで設定を最初に試すか、デフォルト設定でサービスを直接有効にできます。
手順
fapolicydパッケージをインストールします。dnf install fapolicyd
# dnf install fapolicydCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 最初に設定を試すには、モードを permissive に変更します。
任意のテキストエディターで
/etc/fapolicyd/fapolicyd.confファイルを開きます。以下に例を示します。vi /etc/fapolicyd/fapolicyd.conf
# vi /etc/fapolicyd/fapolicyd.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow permissiveオプションの値を0から1に変更し、ファイルを保存してエディターを終了します。permissive = 1
permissive = 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、サービスを開始する前に
fapolicyd --debug-deny --permissiveコマンドを使用して設定をデバッグできます。詳細は、fapolicyd に関連する問題のトラブルシューティング セクションを参照してください。
fapolicydサービスを有効にして開始します。systemctl enable --now fapolicyd
# systemctl enable --now fapolicydCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/fapolicyd/fapolicyd.confを使用して permissive モードを有効にした場合:fapolicydイベントを記録する Audit サービスを設定します。auditctl -w /etc/fapolicyd/ -p wa -k fapolicyd_changes service try-restart auditd
# auditctl -w /etc/fapolicyd/ -p wa -k fapolicyd_changes # service try-restart auditdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションを使用します。
監査ログで
fanotify拒否を確認します。以下に例を示します。ausearch -ts recent -m fanotify
# ausearch -ts recent -m fanotifyCopy to Clipboard Copied! Toggle word wrap Toggle overflow デバッグしたら、対応する値を
permissive = 0に戻して permissive モードを無効にし、サービスを再起動します。systemctl restart fapolicyd
# systemctl restart fapolicydCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
fapolicydサービスが正しく実行されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow root 権限のないユーザーとしてログインし、以下のように
fapolicydが機能していることを確認します。cp /bin/ls /tmp /tmp/ls bash: /tmp/ls: Operation not permitted
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permittedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. 追加の信頼ソースを使用してファイルを信頼できるものとしてマークする リンクのコピーリンクがクリップボードにコピーされました!
fapolicyd フレームワークは、RPM データベースに含まれるファイルを信頼します。対応するエントリーを /etc/fapolicyd/fapolicyd.trust プレーンテキストファイルまたは /etc/fapolicyd/trust.d/ ディレクトリーに追加することにより、追加のファイルを信頼済みとしてマークできます。fapolicyd.trust または /etc/fapolicyd/trust.d 内のファイルは、テキストエディターを直接使用するか、fapolicyd-cli コマンドを使用して変更できます。
fapolicyd.trust または trust.d/ を使用してファイルを信頼済みとしてマークすることは、パフォーマンス上の理由から、カスタムの fapolicyd ルールを記述するよりも優れています。
前提条件
-
fapolicydフレームワークがシステムにデプロイされます。
手順
カスタムバイナリーを必要なディレクトリーにコピーします。以下に例を示します。
cp /bin/ls /tmp /tmp/ls bash: /tmp/ls: Operation not permitted
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permittedCopy to Clipboard Copied! Toggle word wrap Toggle overflow カスタムバイナリーを信頼済みとしてマークし、対応するエントリーを
/etc/fapolicyd/trust.d/のmyappファイルに保存します。fapolicyd-cli --file add /tmp/ls --trust-file myapp
# fapolicyd-cli --file add /tmp/ls --trust-file myappCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--trust-fileオプションをスキップすると、前のコマンドは対応する行を/etc/fapolicyd/fapolicyd.trustに追加します。 -
ディレクトリー内のすべての既存ファイルを信頼済みとしてマークするには、
--fileオプションの引数としてディレクトリーパスを指定します。たとえば、fapolicyd-cli --file add/tmp/my_bin_dir/--trust-file myappです。
-
fapolicydデータベースを更新します。fapolicyd-cli --update
# fapolicyd-cli --updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
信頼されたファイルまたはディレクトリーの内容を変更すると、それらのチェックサムが変更されるため、fapolicyd はそれらを信頼済みと見なしなくなります。
新しいコンテンツを再び信頼できるようにするには、fapolicyd-cli --file update コマンドを使用してファイル信頼データベースを更新します。引数を何も指定しない場合、データベース全体が更新されます。または、特定のファイルまたはディレクトリーへのパスを指定できます。次に、fapolicyd-cli --update を使用してデータベースを更新します。
検証
たとえば、カスタムバイナリーが実行できることを確認します。
/tmp/ls ls
$ /tmp/ls lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4. fapolicyd のカスタムの許可および拒否ルールの追加 リンクのコピーリンクがクリップボードにコピーされました!
fapolicyd パッケージのデフォルトのルールセットは、システム機能に影響しません。バイナリーやスクリプトを標準以外のディレクトリーに保存する、または dnf または rpm インストーラーを使用せずにアプリケーションを追加するなどのカスタムシナリオでは、追加のファイルを信頼済みとしてマークするか、新しいカスタムルールを追加する必要があります。
基本的なシナリオでは、信頼の追加ソースを使用してファイルを信頼済みとしてマークする ことを推奨します。特定のユーザーおよびグループ ID に対してのみカスタムバイナリーの実行を許可するなど、より高度なシナリオでは、新しいカスタムルールを /etc/fapolicyd/rules.d/ ディレクトリーに追加します。
次の手順は、新しいルールを追加してカスタムバイナリーを許可する方法を示しています。
前提条件
-
fapolicydフレームワークがシステムにデプロイされます。
手順
カスタムバイナリーを必要なディレクトリーにコピーします。以下に例を示します。
cp /bin/ls /tmp /tmp/ls bash: /tmp/ls: Operation not permitted
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permittedCopy to Clipboard Copied! Toggle word wrap Toggle overflow fapolicydサービスを停止します。systemctl stop fapolicyd
# systemctl stop fapolicydCopy to Clipboard Copied! Toggle word wrap Toggle overflow デバッグモードを使用して、対応するルールを識別します。
fapolicyd --debugコマンドの出力は冗長で、Ctrl+C を押すか、対応するプロセスを強制終了するだけで停止できるため、エラー出力をファイルにリダイレクトします。この場合、--debugの代わりに--debug-denyオプションを使用して、アクセス拒否のみに出力を制限できます。fapolicyd --debug-deny 2> fapolicy.output & [1] 51341
# fapolicyd --debug-deny 2> fapolicy.output & [1] 51341Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、別の端末で
fapolicydデバッグモードを実行できます。fapolicydが拒否したコマンドを繰り返します。/tmp/ls bash: /tmp/ls: Operation not permitted
$ /tmp/ls bash: /tmp/ls: Operation not permittedCopy to Clipboard Copied! Toggle word wrap Toggle overflow デバッグモードをフォアグラウンドで再開し、Ctrl+C を押して停止します。
fg fapolicyd --debug 2> fapolicy.output ^C ...
# fg fapolicyd --debug 2> fapolicy.output ^C ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、
fapolicydデバッグモードのプロセスを強制終了します。kill 51341
# kill 51341Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションの実行を拒否するルールを見つけます。
cat fapolicy.output | grep 'deny_audit' ... rule=13 dec=deny_audit perm=execute auid=0 pid=6855 exe=/usr/bin/bash : path=/tmp/ls ftype=application/x-executable trust=0
# cat fapolicy.output | grep 'deny_audit' ... rule=13 dec=deny_audit perm=execute auid=0 pid=6855 exe=/usr/bin/bash : path=/tmp/ls ftype=application/x-executable trust=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタムバイナリーの実行を妨げたルールを含むファイルを見つけます。この場合、
deny_audit perm=executeルールは90-deny-execute.rulesファイルに属します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/fapolicyd/rules.d/ディレクトリー内のカスタムバイナリーの実行を拒否するルールを含むルールファイルよりも辞書順で 前にある ファイルに、新しいallowルールを追加します。touch /etc/fapolicyd/rules.d/80-myapps.rules vi /etc/fapolicyd/rules.d/80-myapps.rules
# touch /etc/fapolicyd/rules.d/80-myapps.rules # vi /etc/fapolicyd/rules.d/80-myapps.rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のルールを
80-myapps.rulesファイルに挿入します。allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0
allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、
/etc/fapolicyd/rules.d/のルールファイルに次のルールを追加して、/tmpディレクトリー内のすべてのバイナリーの実行を許可することもできます。allow perm=execute exe=/usr/bin/bash trust=1 : dir=/tmp/ trust=0
allow perm=execute exe=/usr/bin/bash trust=1 : dir=/tmp/ trust=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要指定したディレクトリーの下にあるすべてのディレクトリーに対してルールを再帰的に有効にするには、ルール内の
dir=パラメーターの値に末尾のスラッシュを追加します (上記の例の/tmp/)。カスタムバイナリーのコンテンツの変更を防ぐには、SHA-256 チェックサムを使用して必要なルールを定義します。
sha256sum /tmp/ls 780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836 ls
$ sha256sum /tmp/ls 780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836 lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow ルールを以下の定義に変更します。
allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836
allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンパイル済みのリストが
/etc/fapolicyd/rules.d/に設定されているルールと異なることを確認し、/etc/fapolicyd/compiled.rulesファイルに保存されているリストを更新します。fagenrules --check /usr/sbin/fagenrules: Rules have changed and should be updated fagenrules --load
# fagenrules --check /usr/sbin/fagenrules: Rules have changed and should be updated # fagenrules --loadCopy to Clipboard Copied! Toggle word wrap Toggle overflow カスタムルールが、実行を妨げたルールの前に
fapolicydルールのリストにあることを確認します。fapolicyd-cli --list ... 13. allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0 14. deny_audit perm=execute all : all ...
# fapolicyd-cli --list ... 13. allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0 14. deny_audit perm=execute all : all ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow fapolicydサービスを開始します。systemctl start fapolicyd
# systemctl start fapolicydCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
たとえば、カスタムバイナリーが実行できることを確認します。
/tmp/ls ls
$ /tmp/ls lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.5. fapolicyd 整合性チェックの有効化 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、fapolicyd は整合性チェックを実行しません。ファイルサイズまたは SHA-256 ハッシュのいずれかを比較して整合性チェックを実行するように fapolicyd を設定できます。Integrity Measurement Architecture (IMA) サブシステムを使用して整合性チェックを設定することもできます。
前提条件
-
fapolicydフレームワークがシステムにデプロイされます。
手順
任意のテキストエディターで
/etc/fapolicyd/fapolicyd.confファイルを開きます。以下に例を示します。vi /etc/fapolicyd/fapolicyd.conf
# vi /etc/fapolicyd/fapolicyd.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 整合性オプションの値をnoneからsha256に変更し、ファイルを保存してエディターを終了します。integrity = sha256
integrity = sha256Copy to Clipboard Copied! Toggle word wrap Toggle overflow fapolicydサービスを再起動します。systemctl restart fapolicyd
# systemctl restart fapolicydCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
検証に使用するファイルのバックアップを作成します。
cp /bin/more /bin/more.bak
# cp /bin/more /bin/more.bakCopy to Clipboard Copied! Toggle word wrap Toggle overflow /bin/moreバイナリーの内容を変更します。cat /bin/less > /bin/more
# cat /bin/less > /bin/moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更したバイナリーを一般ユーザーとして使用します。
su example.user /bin/more /etc/redhat-release bash: /bin/more: Operation not permitted
# su example.user $ /bin/more /etc/redhat-release bash: /bin/more: Operation not permittedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を元に戻します。
mv -f /bin/more.bak /bin/more
# mv -f /bin/more.bak /bin/moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.7. fapolicyd RHEL システムロールを使用してユーザーによる信頼できないコードの実行を防止する リンクのコピーリンクがクリップボードにコピーされました!
fapolicyd RHEL システムロールを使用すると、fapolicyd サービスのインストールと設定を自動化できます。このロールを使用すると、RPM データベースや許可リストに指定されているアプリケーションなど、信頼できるアプリケーションのみをユーザーが実行できるようにサービスをリモートで設定できます。さらに、サービスは許可されたアプリケーションを実行する前に整合性チェックを実行できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
fapolicyd_setup_permissive: <true|false>-
ポリシーの決定をカーネルに送信して適用することを有効または無効にします。デバッグおよびテスト目的の場合、この変数を
falseに設定します。 fapolicyd_setup_integrity: <type_type>整合性チェック方法を定義します。次のいずれかの値を設定できます。
-
none(デフォルト): 整合性チェックを無効にします。 -
size: サービスにより、許可されたアプリケーションのファイルサイズのみを比較します。 -
ima: サービスにより、カーネルの Integrity Measurement Architecture (IMA) がファイルの拡張属性に保存した SHA-256 ハッシュをチェックします。さらに、サイズチェックも実行します。ロールは IMA カーネルサブシステムを設定しないことに注意してください。このオプションを使用するには、IMA サブシステムを手動で設定する必要があります。 -
sha256: サービスにより、許可されたアプリケーションの SHA-256 ハッシュを比較します。
-
fapolicyd_setup_trust: <trust_backends>-
信頼バックエンドのリストを定義します。
fileバックエンドを含める場合は、fapolicyd_add_trusted_fileリストで許可されている実行可能ファイルを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.fapolicyd.README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook ~/playbook.yml --syntax-check
$ ansible-playbook ~/playbook.yml --syntax-checkCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
許可リストにないバイナリーアプリケーションをユーザーとして実行します。
ansible managed-node-01.example.com -m command -a 'su -c "/bin/not_authorized_application " <user_name>' bash: line 1: /bin/not_authorized_application: Operation not permitted non-zero return code
$ ansible managed-node-01.example.com -m command -a 'su -c "/bin/not_authorized_application " <user_name>' bash: line 1: /bin/not_authorized_application: Operation not permitted non-zero return codeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第13章 侵入型 USB デバイスに対するシステムの保護 リンクのコピーリンクがクリップボードにコピーされました!
USB デバイスには、スパイウェア、マルウェア、またはトロイの木馬が読み込まれ、データを盗んだり、システムを損傷する可能性があります。Red Hat Enterprise Linux 管理者は、USBGuard でこのような USB 攻撃を防ぐことができます。
13.1. USBGuard リンクのコピーリンクがクリップボードにコピーされました!
USBGuard ソフトウェアフレームワークを使用すると、カーネルの USB デバイス許可機能に基づいて許可されたデバイスおよび禁止されているデバイスの基本リストを使用して、侵入型 USB デバイスからシステムを保護できます。
USBGuard フレームワークは、次を提供します。
- 動的対話およびポリシー強制向けの IPC (inter-process communication) インターフェイスを使用したシステムサービスコンポーネント
-
実行中の
usbguardシステムサービスと対話するコマンドライン - USB デバイス許可ポリシーを記述するルール言語
- 共有ライブラリーに実装されたシステムサービスコンポーネントと対話する C++ API
usbguard システムサービス設定ファイル (/etc/usbguard/usbguard-daemon.conf) には、IPC インターフェイスを使用するためのユーザーおよびグループを認可するオプションが含まれます。
システムサービスは、USBGuard パブリック IPC インターフェイスを提供します。Red Hat Enterprise Linux では、このインターフェイスへのアクセスはデフォルトで root ユーザーに限定されています。
IPC インターフェイスへのアクセスを制限するには、IPCAccessControlFiles オプション (推奨)、IPCAllowedUsers オプション、および IPCAllowedGroups オプションを設定することを検討してください。
アクセス制御リスト (ACL) を未設定のままにしないでください。設定しないと、すべてのローカルユーザーに IPC インターフェイスが公開され、USB デバイスの許可状態を操作して USBGuard ポリシーを変更できるようになります。
13.2. USBGuard のインストール リンクのコピーリンクがクリップボードにコピーされました!
この手順を使用して、USBGuard フレームワークをインストールして開始します。
手順
usbguardパッケージをインストールします。dnf install usbguard
# dnf install usbguardCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初期ルールセットを作成します。
usbguard generate-policy > /etc/usbguard/rules.conf
# usbguard generate-policy > /etc/usbguard/rules.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow usbguardデーモンを起動し、システムの起動時に自動的に起動することを確認します。systemctl enable --now usbguard
# systemctl enable --now usbguardCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
usbguardサービスが実行中であることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow USBGuard が認識する USB デバイスのリストを表示します。
usbguard list-devices 4: allow id 1d6b:0002 serial "0000:02:00.0" name "xHCI Host Controller" hash...
# usbguard list-devices 4: allow id 1d6b:0002 serial "0000:02:00.0" name "xHCI Host Controller" hash...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. CLI を使用した USB デバイスのブロックと許可 リンクのコピーリンクがクリップボードにコピーされました!
ターミナルで usbguard コマンドを使用すると、USB デバイスを許可およびブロックするように USBGuard を設定できます。
前提条件
-
usbguardサービスがインストールされ、実行中である。
手順
USBGuard が認識する USB デバイスのリストを表示します。以下に例を示します。
usbguard list-devices 1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00 ... 6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
# usbguard list-devices 1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00 ... 6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバイス <6> がシステムと対話することを許可します。
usbguard allow-device <6>
# usbguard allow-device <6>Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバイス <6> の許可を解除し、デバイスを削除します。
usbguard reject-device <6>
# usbguard reject-device <6>Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバイス <6> の許可を解除し、デバイスを保持します。
usbguard block-device <6>
# usbguard block-device <6>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
USBGuard では、block および reject は以下の意味で使用されます。
block- 今はこのデバイスとやり取りしません。
reject- このデバイスは存在しないものとして無視します。
13.4. USB デバイスの永続的なブロックおよび許可 リンクのコピーリンクがクリップボードにコピーされました!
-p オプションを使用すると、USB デバイスを永続的にブロックおよび許可できます。これにより、デバイス固有のルールが現在のポリシーに追加されます。
前提条件
-
usbguardサービスがインストールされ、実行中である。
手順
usbguardデーモンがルールの書き込みを許可するように SELinux を設定します。usbguardに関連するsemanageブール値を表示します。semanage boolean -l | grep usbguard usbguard_daemon_write_conf (off , off) Allow usbguard to daemon write conf usbguard_daemon_write_rules (on , on) Allow usbguard to daemon write rules
# semanage boolean -l | grep usbguard usbguard_daemon_write_conf (off , off) Allow usbguard to daemon write conf usbguard_daemon_write_rules (on , on) Allow usbguard to daemon write rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
usbguard_daemon_write_rulesのブール値が無効になっている場合は、有効にします。semanage boolean -m --on usbguard_daemon_write_rules
# semanage boolean -m --on usbguard_daemon_write_rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
USBGuard が認識する USB デバイスのリストを表示します。
usbguard list-devices 1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00 ... 6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
# usbguard list-devices 1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00 ... 6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバイス
6がシステムと対話することを永続的に許可します。usbguard allow-device 6 -p
# usbguard allow-device 6 -pCopy to Clipboard Copied! Toggle word wrap Toggle overflow デバイス
6の許可を永続的に解除し、デバイスを削除します。usbguard reject-device 6 -p
# usbguard reject-device 6 -pCopy to Clipboard Copied! Toggle word wrap Toggle overflow デバイス
6の許可を永続的に解除し、デバイスを保持します。usbguard block-device 6 -p
# usbguard block-device 6 -pCopy to Clipboard Copied! Toggle word wrap Toggle overflow
USBGuard では、block および reject は以下の意味で使用されます。
block- 今はこのデバイスとやり取りしません。
reject- このデバイスは存在しないものとして無視します。
検証
USBGuard ルールに加えた変更が含まれていることを確認します。
usbguard list-rules
# usbguard list-rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.5. USB デバイス用のカスタムポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順では、シナリオの要件を反映する USB デバイス用のルールセットを作成する手順を説明します。
前提条件
-
usbguardサービスがインストールされ、実行中である。 -
/etc/usbguard/rules.confファイルに、usbguard generate-policyコマンドによって生成された初期ルールセットが含まれている。
手順
現在接続している USB デバイスを許可するポリシーを作成し、生成されたルールを
rules.confファイルに保存します。usbguard generate-policy --no-hashes > ./rules.conf
# usbguard generate-policy --no-hashes > ./rules.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow --no-hashesオプションは、デバイスのハッシュ属性を生成しません。設定のハッシュ属性は永続的ではない可能性があるため、回避してください。選択したテキストエディターで
rules.confファイルを編集します。次に例を示します。vi ./rules.conf
# vi ./rules.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、ルールを追加、削除、または編集します。たとえば、以下のルールを使用すると、大容量ストレージインターフェイスが 1 つあるデバイスのみがシステムと対話できます。
allow with-interface equals { 08:*:* }allow with-interface equals { 08:*:* }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細なルール言語の説明とその他の例は、
usbguard-rules.conf(5)の man ページを参照してください。更新したポリシーをインストールします。
install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow usbguardデーモンを再起動して、変更を適用します。systemctl restart usbguard
# systemctl restart usbguardCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
カスタムルールがアクティブポリシーにあることを確認します。以下に例を示します。
usbguard list-rules ... 4: allow with-interface 08:*:* ...
# usbguard list-rules ... 4: allow with-interface 08:*:* ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.6. USB デバイス用の構造化されたカスタムポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
/etc/usbguard/rules.d/ ディレクトリー内の複数の .conf ファイルで、カスタムの USBGuard ポリシーを整理できます。usbguard-daemon により、メインの rules.conf ファイルとディレクトリー内の .conf ファイルがアルファベット順に結合されます。
前提条件
-
usbguardサービスがインストールされ、実行中である。
手順
現在接続している USB デバイスを許可するポリシーを作成し、生成されたルールを、新しい
.confファイル (例:policy.conf) ファイルに保存します。usbguard generate-policy --no-hashes > ./policy.conf
# usbguard generate-policy --no-hashes > ./policy.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow --no-hashesオプションは、デバイスのハッシュ属性を生成しません。設定のハッシュ属性は永続的ではない可能性があるため、回避してください。任意のテキストエディターで
policy.confファイルを編集します。次に例を示します。vi ./policy.conf ... allow id 04f2:0833 serial "" name "USB Keyboard" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown" ...# vi ./policy.conf ... allow id 04f2:0833 serial "" name "USB Keyboard" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 選択した行を別の
.confファイルに移動します。注記ファイル名の先頭にある 2 つの数字は、デーモンが設定ファイルを読み込む順序を指定します。
たとえば、キーボードのルールを新規
.confファイルにコピーします。grep "USB Keyboard" ./policy.conf > ./10keyboards.conf
# grep "USB Keyboard" ./policy.conf > ./10keyboards.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいポリシーを
/etc/usbguard/rules.d/ディレクトリーにインストールします。install -m 0600 -o root -g root 10keyboards.conf /etc/usbguard/rules.d/10keyboards.conf
# install -m 0600 -o root -g root 10keyboards.conf /etc/usbguard/rules.d/10keyboards.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 残りの行をメインの
rules.confファイルに移動します。grep -v "USB Keyboard" ./policy.conf > ./rules.conf
# grep -v "USB Keyboard" ./policy.conf > ./rules.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 残りのルールをインストールします。
install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow usbguardデーモンを再起動して、変更を適用します。systemctl restart usbguard
# systemctl restart usbguardCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
アクティブな USBGuard ルールをすべて表示します。
usbguard list-rules ... 15: allow id 04f2:0833 serial "" name "USB Keyboard" hash "kxM/iddRe/WSCocgiuQlVs6Dn0VEza7KiHoDeTz0fyg=" parent-hash "2i6ZBJfTl5BakXF7Gba84/Cp1gslnNc1DM6vWQpie3s=" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown" ...# usbguard list-rules ... 15: allow id 04f2:0833 serial "" name "USB Keyboard" hash "kxM/iddRe/WSCocgiuQlVs6Dn0VEza7KiHoDeTz0fyg=" parent-hash "2i6ZBJfTl5BakXF7Gba84/Cp1gslnNc1DM6vWQpie3s=" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow rules.confファイルと、/etc/usbguard/rules.d/ディレクトリー内の.confファイルの内容をすべて表示します。cat /etc/usbguard/rules.conf /etc/usbguard/rules.d/*.conf
# cat /etc/usbguard/rules.conf /etc/usbguard/rules.d/*.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow - アクティブなルールに、ファイルのすべてのルールが正しく、正しい順序で含まれていることを確認します。
13.7. USBGuard IPC インターフェイスを使用するユーザーおよびグループの許可 リンクのコピーリンクがクリップボードにコピーされました!
この手順を使用して、特定のユーザーまたはグループが USBGuard のパブリック IPC インターフェイスを使用するように認可します。デフォルトでは、root ユーザーだけがこのインターフェイスを使用できます。
前提条件
-
usbguardサービスがインストールされ、実行中である。 -
/etc/usbguard/rules.confファイルに、usbguard generate-policyコマンドによって生成された初期ルールセットが含まれている。
手順
任意のテキストエディターで
/etc/usbguard/usbguard-daemon.confファイルを編集します。vi /etc/usbguard/usbguard-daemon.conf
# vi /etc/usbguard/usbguard-daemon.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
wheelグループの全ユーザーが IPC インターフェイスを使用できるように、ルールがある行を追加して、ファイルを保存します。IPCAllowGroups=wheel
IPCAllowGroups=wheelCopy to Clipboard Copied! Toggle word wrap Toggle overflow usbguardコマンドで、ユーザーまたはグループを追加することもできます。たとえば、次のコマンドを使用すると、joesec ユーザーがDevicesセクションおよびExceptionsセクションに完全アクセスできます。さらに、joesec は現行ポリシーのリスト表示および変更を行うことができます。usbguard add-user joesec --devices ALL --policy modify,list --exceptions ALL
# usbguard add-user joesec --devices ALL --policy modify,list --exceptions ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow joesec ユーザーに付与されたパーミッションを削除するには、
usbguard remove-user joesecコマンドを使用します。usbguardデーモンを再起動して、変更を適用します。systemctl restart usbguard
# systemctl restart usbguardCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.8. Linux 監査ログへの USBguard 許可イベントの記録 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順に従って、USBguard 許可イベントのログと標準の Linux 監査ログを 1 つにまとめます。デフォルトでは、usbguard デーモンは /var/log/usbguard/usbguard-audit.log ファイルにイベントを記録します。
前提条件
-
usbguardサービスがインストールされ、実行中である。 -
auditdサービスが実行中である。
手順
usbguard-daemon.confファイルを、選択したテキストエディターで編集します。vi /etc/usbguard/usbguard-daemon.conf
# vi /etc/usbguard/usbguard-daemon.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow AuditBackendオプションを、FileAuditからLinuxAuditに変更します。AuditBackend=LinuxAudit
AuditBackend=LinuxAuditCopy to Clipboard Copied! Toggle word wrap Toggle overflow usbguardデーモンを再起動して、設定変更を適用します。systemctl restart usbguard
# systemctl restart usbguardCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
auditデーモンログで USB 許可イベントを照会します。次に例を示します。ausearch -ts recent -m USER_DEVICE
# ausearch -ts recent -m USER_DEVICECopy to Clipboard Copied! Toggle word wrap Toggle overflow
第14章 リモートロギングソリューションの設定 リンクのコピーリンクがクリップボードにコピーされました!
環境内の各種マシンからのログをロギングサーバーに集中的に記録するために、クライアントシステムからサーバーに特定の基準に合致するログを記録するように Rsyslog アプリケーションを設定できます。
14.1. Rsyslog ロギングサービス リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog アプリケーションは、systemd-journald サービスと組み合わせて、Red Hat Enterprise Linux でローカルおよびリモートのロギングサポートを提供します。rsyslogd デーモンは、ジャーナルから systemd-journald サービスが受信した syslog メッセージを継続的に読み取ります。rsyslogd は、syslog イベントをフィルタリングして処理し、rsyslog ログファイルに記録するか、設定に応じて他のサービスに転送します。
rsyslogd デーモンは、拡張されたフィルタリング、暗号化で保護されたメッセージのリレー、入出力モジュール、TCP プロトコルおよび UDP プロトコルを使用した転送のサポートも提供します。
rsyslog の主な設定ファイルである /etc/rsyslog.conf では、どの rsyslogd がメッセージを処理するかに応じてルールを指定できます。通常は、ソースおよびトピック (ファシリティー) 別および緊急度 (優先度) 別にメッセージを分類し、メッセージがその基準に合致したときに実行するアクションを割り当てることができます。
/etc/rsyslog.conf では、rsyslogd が維持するログファイルのリストも確認できます。ほとんどのログファイルは /var/log/ ディレクトリーにあります。httpd、samba などの一部のアプリケーションは、ログファイルを /var/log/ 内のサブディレクトリーに保存します。
14.2. Rsyslog ドキュメントのインストール リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog アプリケーションには、https://www.rsyslog.com/doc/ で利用可能な詳細なオンラインドキュメントがありますが、rsyslog-doc ドキュメントパッケージをローカルにインストールすることもできます。
前提条件
-
システムで
AppStreamリポジトリーをアクティベートしている。 -
sudoを使用して新規パッケージをインストールする権限がある。
手順
rsyslog-docパッケージをインストールします。dnf install rsyslog-doc
# dnf install rsyslog-docCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
任意のブラウザーで
/usr/share/doc/rsyslog/html/index.htmlファイルを開きます。次に例を示します。firefox /usr/share/doc/rsyslog/html/index.html &
$ firefox /usr/share/doc/rsyslog/html/index.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.3. TCP でのリモートロギング用のサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog アプリケーションを使用すると、ロギングサーバーを実行し、個別のシステムがログファイルをロギングサーバーに送信するように設定できます。TCP 経由でリモートロギングを使用するには、サーバーとクライアントの両方を設定します。サーバーは、クライアントシステムにより送信されたログを収集し、分析します。
Rsyslog アプリケーションを使用すると、ログメッセージがネットワークを介してサーバーに転送される中央ロギングシステムを維持できます。サーバーが利用できない場合にメッセージが失われないようにするには、転送アクションのアクションキューを設定します。これにより、送信に失敗したメッセージは、サーバーが再度到達可能になるまでローカルに保存されます。このようなキューは、UDP プロトコルを使用する接続用に設定できないことに注意してください。
omfwd プラグインは、UDP または TCP による転送を提供します。デフォルトのプロトコルは UDP です。このプラグインは組み込まれているため、読み込む必要はありません。
デフォルトでは、rsyslog はポート 514 で TCP を使用します。
前提条件
- rsyslog がサーバーシステムにインストールされている。
-
サーバーに
rootとしてログインしている。 -
policycoreutils-python-utilsパッケージは、semanageコマンドを使用して任意の手順でインストールします。 -
firewalldサービスが実行中である。
手順
必要に応じて、
rsyslogトラフィックに別のポートを使用するには、SELinux タイプsyslogd_port_tをポートに追加します。たとえば、ポート30514を有効にします。semanage port -a -t syslogd_port_t -p tcp 30514
# semanage port -a -t syslogd_port_t -p tcp 30514Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
rsyslogトラフィックに別のポートを使用するには、firewalldがそのポートでの着信rsyslogトラフィックを許可するように設定します。たとえば、ポート30514で TCP トラフィックを許可します。firewall-cmd --zone=<zone-name> --permanent --add-port=30514/tcp success firewall-cmd --reload
# firewall-cmd --zone=<zone-name> --permanent --add-port=30514/tcp success # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/rsyslog.d/ディレクトリーに新規ファイル (例:remotelog.conf) を作成し、以下のコンテンツを挿入します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
/etc/rsyslog.d/remotelog.confファイルへの変更を保存します。 /etc/rsyslog.confファイルの構文をテストします。rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run... rsyslogd: End of config validation run. Bye.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run... rsyslogd: End of config validation run. Bye.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rsyslogサービスがロギングサーバーで実行中で、有効になっていることを確認します。systemctl status rsyslog
# systemctl status rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。systemctl enable rsyslog
# systemctl enable rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
環境内の他のシステムからログファイルを受け取り、保存するように、ログサーバーが設定されています。
14.4. TCP 経由のサーバーへのリモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
TCP プロトコル経由でログメッセージをサーバーに転送するようにシステムを設定できます。omfwd プラグインは、UDP または TCP による転送を提供します。デフォルトのプロトコルは UDP です。プラグインは組み込まれているのでロードする必要はありません。
前提条件
-
rsyslogパッケージが、サーバーに報告する必要のあるクライアントシステムにインストールされている。 - リモートロギング用にサーバーを設定している。
- 指定したポートが SELinux で許可され、ファイアウォールで開いている。
-
システムには、
policycoreutils-python-utilsパッケージが含まれています。このパッケージは、標準以外のポートを SELinux 設定に追加するためのsemanageコマンドを提供します。
手順
/etc/rsyslog.d/ディレクトリーに新規ファイル (例:10-remotelog.conf) を作成し、以下のコンテンツを挿入します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
queue.type="linkedlist"設定は、LinkedList インメモリーキューを有効にします。 -
queue.filename設定は、ディスクストレージを定義します。バックアップファイルは、前のグローバルのworkDirectoryディレクティブで指定された作業ディレクトリーにexample_fwd接頭辞を付けて作成されます。 -
action.resumeRetryCount -1設定は、サーバーが応答しない場合に接続を再試行するときにrsyslogがメッセージを破棄しないようにします。 -
queue.saveOnShutdown="on"設定は、rsyslogがシャットダウンした場合にインメモリーデータを保存します。 最後の行は、受信したすべてのメッセージをロギングサーバーに転送します。ポートの指定は任意です。
この設定では、
rsyslogはメッセージをサーバーに送信しますが、リモートサーバーに到達できない場合には、メッセージをメモリーに保持します。ディスク上にあるファイルは、設定されたメモリーキュー領域がrsyslogで不足するか、シャットダウンする必要がある場合にのみ作成されます。これにより、システムパフォーマンスが向上します。
注記Rsyslog は設定ファイル
/etc/rsyslog.d/を字句順に処理します。-
rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
クライアントシステムがサーバーにメッセージを送信することを確認するには、以下の手順に従います。
クライアントシステムで、テストメッセージを送信します。
logger test
# logger testCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーシステムで、
/var/log/messagesログを表示します。以下に例を示します。cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow hostname はクライアントシステムのホスト名です。ログには、
loggerコマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
14.5. TLS 暗号化リモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Rsyslog はプレーンテキスト形式でリモートロギング通信を送信します。シナリオでこの通信チャネルのセキュリティーを確保する必要がある場合は、TLS を使用して暗号化できます。
TLS を介した暗号化されたトランスポートを使用するには、サーバーとクライアントの両方を設定します。サーバーは、クライアントシステムにより送信されたログを収集し、分析します。
ossl ネットワークストリームドライバー (OpenSSL) または gtls ストリームドライバー (GnuTLS) のいずれかを使用できます。
ネットワークに接続されていない、厳格な認可を受けているなど、セキュリティーが強化された別のシステムがある場合は、その別のシステムを認証局 (CA) として使用します。
サーバー側では global、module、input レベルで、クライアント側では global および action レベルで、ストリームドライバーを使用して接続設定をカスタマイズできます。より具体的な設定は、より一般的な設定よりも優先されます。そのため、たとえば、ほとんどの接続のグローバル設定で ossl を使用し、特定の接続の入力とアクション設定で gtls を使用することができます。
前提条件
-
クライアントシステムとサーバーシステムの両方に
rootにアクセスできる。 サーバーおよびクライアントシステムに次のパッケージがインストールされている。
-
rsyslogパッケージ -
osslネットワークストリームドライバー用のrsyslog-opensslパッケージ -
gtlsネットワークストリームドライバー用のrsyslog-gnutlsパッケージ -
certtoolコマンドを使用して証明書を生成するためのgnutls-utilsパッケージ
-
ログサーバーの
/etc/pki/ca-trust/source/anchors/ディレクトリーには、次の証明書があり、update-ca-trustコマンドを使用してシステム設定を更新します。-
ca-cert.pem- ログサーバーとクライアントで鍵と証明書を検証できる CA 証明書。 -
server-cert.pem- ロギングサーバーの公開鍵。 -
server-key.pem- ロギングサーバーの秘密鍵。
-
ログクライアントでは、次の証明書が
/etc/pki/ca-trust/source/anchors/ディレクトリーにあり、update-ca-trustを使用してシステム設定を更新します。-
ca-cert.pem- ログサーバーとクライアントで鍵と証明書を検証できる CA 証明書。 -
client-cert.pem- クライアントの公開鍵。 -
client-key.pem- クライアントの秘密鍵。 - サーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
-
手順
クライアントシステムから暗号化したログを受信するようにサーバーを設定します。
-
/etc/rsyslog.d/ディレクトリーに、新規ファイル (securelogser.confなど) を作成します。 通信を暗号化するには、設定ファイルに、サーバーの証明書ファイルへのパス、選択した認証方法、および TLS 暗号化に対応するストリームドライバーが含まれている必要があります。
/etc/rsyslog.d/securelogser.confに以下の行を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記GnuTLS ドライバーが必要な場合は、
StreamDriver.Name="gtls"設定オプションを使用します。x509/nameよりも厳密ではない認証モードの詳細は、rsyslog-docにインストールされているドキュメントを参照してください。オプション: RHEL 9.4 で提供される Rsyslog バージョン 8.2310 からは、接続設定をカスタマイズできます。これを行うには、
inputセクションを以下に置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用するドライバーに応じて、
<driver>をosslまたはgtlsに置き換えます。 -
<ca1>はカスタマイズする接続の CA 証明書に、<server1-cert>は証明書に、<server1-key>は鍵に置き換えます。
-
使用するドライバーに応じて、
-
変更を
/etc/rsyslog.d/securelogser.confファイルに保存します。 /etc/rsyslog.confファイルの構文と/etc/rsyslog.d/ディレクトリー内のすべてのファイルを確認します。rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rsyslogサービスがロギングサーバーで実行中で、有効になっていることを確認します。systemctl status rsyslog
# systemctl status rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Rsyslog が有効になっていない場合は、再起動後に
rsyslogサービスが自動的に起動されることを確認してください。systemctl enable rsyslog
# systemctl enable rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
暗号化したログをサーバーに送信するようにクライアントを設定するには、以下のコマンドを実行します。
-
クライアントシステムで、
/etc/rsyslog.d/ディレクトリーに、新規ファイル (securelogcli.confなど) を作成します。 /etc/rsyslog.d/securelogcli.confに以下の行を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記GnuTLS ドライバーが必要な場合は、
StreamDriver.Name="gtls"設定オプションを使用します。オプション: RHEL 9.4 で提供される Rsyslog バージョン 8.2310 からは、接続設定をカスタマイズできます。これを行うには、
actionセクションを以下に置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用するドライバーに応じて、
<driver>をosslまたはgtlsに置き換えます。 -
<ca1>はカスタマイズする接続の CA 証明書に、<client1-cert>は証明書に、<client1-key>は鍵に置き換えます。
-
使用するドライバーに応じて、
-
変更を
/etc/rsyslog.d/securelogcli.confファイルに保存します。 /etc/rsyslog.confファイルの構文と/etc/rsyslog.d/ディレクトリー内のその他のファイルを確認します。rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rsyslogサービスがロギングサーバーで実行中で、有効になっていることを確認します。systemctl status rsyslog
# systemctl status rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Rsyslog が有効になっていない場合は、再起動後に
rsyslogサービスが自動的に起動されることを確認してください。systemctl enable rsyslog
# systemctl enable rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
クライアントシステムで、
検証
クライアントシステムがサーバーにメッセージを送信することを確認するには、以下の手順に従います。
クライアントシステムで、テストメッセージを送信します。
logger test
# logger testCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーシステムで、
/var/log/messagesログを表示します。以下に例を示します。cat /var/log/remote/msg/<hostname>/root.log Feb 25 03:53:17 <hostname> root[6064]: test
# cat /var/log/remote/msg/<hostname>/root.log Feb 25 03:53:17 <hostname> root[6064]: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow <hostname>はクライアントシステムのホスト名です。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
14.6. UDP でリモートロギング情報を受信するためのサーバー設定 リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog アプリケーションを使用すると、リモートシステムからロギング情報を受信するようにシステムを設定できます。UDP 経由でリモートロギングを使用するには、サーバーとクライアントの両方を設定します。受信サーバーは、クライアントシステムが送信したログの収集および分析を行います。デフォルトでは、rsyslog はポート 514 で UDP を使用して、リモートシステムからログ情報を受信します。
以下の手順に従って、UDP プロトコルでクライアントシステムが送信したログの収集および分析を行うサーバーを設定します。
前提条件
- rsyslog がサーバーシステムにインストールされている。
-
サーバーに
rootとしてログインしている。 -
policycoreutils-python-utilsパッケージは、semanageコマンドを使用して任意の手順でインストールします。 -
firewalldサービスが実行中である。
手順
必要に応じて、デフォルトのポート
514以外のrsyslogトラフィックに別のポートを使用するには、次のコマンドを実行します。SELinux ポリシー設定に
syslogd_port_tSELinux タイプを追加し、portnoはrsyslogで使用するポート番号に置き換えます。semanage port -a -t syslogd_port_t -p udp portno
# semanage port -a -t syslogd_port_t -p udp portnoCopy to Clipboard Copied! Toggle word wrap Toggle overflow rsyslogの受信トラフィックを許可するようにfirewalldを設定します。portnoはポート番号に、zoneはrsyslogが使用するゾーンに置き換えます。firewall-cmd --zone=zone --permanent --add-port=portno/udp success firewall-cmd --reload
# firewall-cmd --zone=zone --permanent --add-port=portno/udp success # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールルールを再読み込みします。
firewall-cmd --reload
# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
/etc/rsyslog.d/ディレクトリーに.confの新規ファイル (例:remotelogserv.conf) を作成し、以下のコンテンツを挿入します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 514は、rsyslogがデフォルトで使用するポート番号です。代わりに別のポートを指定できます。/etc/rsyslog.confファイルの構文と/etc/rsyslog.d/ディレクトリー内の全.confファイルを確認します。rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run...
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run...Copy to Clipboard Copied! Toggle word wrap Toggle overflow rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。systemctl enable rsyslog
# systemctl enable rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
14.7. UDP 経由のサーバーへのリモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
UDP プロトコル経由でログメッセージをサーバーに転送するようにシステムを設定できます。omfwd プラグインは、UDP または TCP による転送を提供します。デフォルトのプロトコルは UDP です。プラグインは組み込まれているのでロードする必要はありません。
前提条件
-
rsyslogパッケージが、サーバーに報告する必要のあるクライアントシステムにインストールされている。 - UDP でリモートロギング情報を受信するためのサーバー設定 で説明されているように、リモートロギング用にサーバーを設定している。
手順
/etc/rsyslog.d/ディレクトリーに.confの新規ファイル (例:10-remotelogcli.conf) を作成し、以下のコンテンツを挿入します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
queue.type="linkedlist"設定は、LinkedList インメモリーキューを有効にします。 -
queue.filename設定は、ディスクストレージを定義します。バックアップファイルは、前のグローバルのworkDirectoryディレクティブで指定された作業ディレクトリーにexample_fwd接頭辞を付けて作成されます。 -
action.resumeRetryCount -1設定は、サーバーが応答しない場合に接続を再試行するときにrsyslogがメッセージを破棄しないようにします。 -
queue.saveOnShutdown="on"設定を有効にすると、rsyslogがシャットダウンした場合にインメモリーデータが保存されます。 -
portno値は、rsyslogで使用するポート番号です。デフォルト値は514です。 最後の行は受信メッセージをすべてロギングサーバーに転送します。ポートの指定は任意です。
この設定では、
rsyslogはメッセージをサーバーに送信しますが、リモートサーバーに到達できない場合には、メッセージをメモリーに保持します。ディスク上にあるファイルは、設定されたメモリーキュー領域がrsyslogで不足するか、シャットダウンする必要がある場合にのみ作成されます。これにより、システムパフォーマンスが向上します。
注記Rsyslog は設定ファイル
/etc/rsyslog.d/を字句順に処理します。-
rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。systemctl enable rsyslog
# systemctl enable rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
クライアントシステムがサーバーにメッセージを送信することを確認するには、以下の手順に従います。
クライアントシステムで、テストメッセージを送信します。
logger test
# logger testCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーシステムで、
/var/log/remote/msg/hostname/root.logログを表示します。以下に例を示します。cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow hostnameはクライアントシステムのホスト名です。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
14.8. Rsyslog の負荷分散ヘルパー リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog をクラスターで使用する場合、RebindInterval 設定を変更することで Rsyslog の負荷分散を改善できます。
RebindInterval では、現在の接続を切断して再確立する間隔を指定します。この設定は、TCP、UDP、および RELP のトラフィックに適用されます。ロードバランサーはこれを新しい接続と認識し、メッセージを別の物理ターゲットシステムに転送します。
RebindInterval は、ターゲットシステムの IP アドレスが変更された場合に役立ちます。Rsyslog アプリケーションは、接続の確立時に IP アドレスをキャッシュするため、メッセージは同じサーバーに送信されます。IP アドレスが変更されると、Rsyslog サービスが再起動するまで UDP パケットが失われます。接続を再確立すると、IP が DNS により再度解決されます。
TCP、UDP、および RELP トラフィックに対する RebindInterval の使用例
action(type="omfwd" protocol="tcp" RebindInterval="250" target="example.com" port="514" …) action(type="omfwd" protocol="udp" RebindInterval="250" target="example.com" port="514" …) action(type="omrelp" RebindInterval="250" target="example.com" port="6514" …)
action(type="omfwd" protocol="tcp" RebindInterval="250" target="example.com" port="514" …)
action(type="omfwd" protocol="udp" RebindInterval="250" target="example.com" port="514" …)
action(type="omrelp" RebindInterval="250" target="example.com" port="6514" …)
14.9. 信頼できるリモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
Reliable Event Logging Protocol (RELP) を使用すると、メッセージ損失のリスクを大幅に軽減して TCP で syslog メッセージを送受信できます。RELP は、信頼できるイベントメッセージを配信するので、メッセージ損失が許されない環境で有用です。RELP を使用するには、imrelp の入力モジュール (サーバー上での実行とログの受信) と omrelp 出力モジュール (クライアント上での実行とロギングサーバーへのログの送信) を設定します。
前提条件
-
rsyslogパッケージ、librelpパッケージ、およびrsyslog-relpパッケージをサーバーおよびクライアントシステムにインストールしている。 - 指定したポートが SELinux で許可され、ファイアウォール設定で開放されている。
手順
信頼できるリモートロギング用にクライアントシステムを設定します。
クライアントシステムの
/etc/rsyslog.d/ディレクトリーに、relpclient.confなどと名前を指定して新しい.confファイルを作成し、以下のコンテンツを挿入します。module(load="omrelp") *.* action(type="omrelp" target="_target_IP_" port="_target_port_")
module(load="omrelp") *.* action(type="omrelp" target="_target_IP_" port="_target_port_")Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
target_IPは、ロギングサーバーの IP アドレスに置き換えます。 -
target_portはロギングサーバーのポートに置き換えます。
-
-
変更を
/etc/rsyslog.d/relpclient.confファイルに保存します。 rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。systemctl enable rsyslog
# systemctl enable rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
信頼できるリモートロギング用にサーバーシステムを設定します。
サーバーシステムの
/etc/rsyslog.d/ディレクトリーに、relpserv.confなどと名前を指定して新しい.confファイルを作成し、以下のコンテンツを挿入します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
log_pathは、メッセージを保存するパスを指定します。 -
target_portはロギングサーバーのポートに置き換えます。クライアント設定ファイルと同じ値を使用します。
-
-
/etc/rsyslog.d/relpserv.confファイルへの変更を保存します。 rsyslogサービスを再起動します。systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。systemctl enable rsyslog
# systemctl enable rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
クライアントシステムがサーバーにメッセージを送信することを確認するには、以下の手順に従います。
クライアントシステムで、テストメッセージを送信します。
logger test
# logger testCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーシステムで、指定された
log_pathでログを表示します。以下に例を示します。cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow hostnameはクライアントシステムのホスト名です。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
14.10. サポート対象の Rsyslog モジュール リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog アプリケーションの機能を拡張するために、特定のモジュールを使用できます。モジュールは、追加の入力 (入力モジュール)、出力 (出力モジュール)、およびその他の機能を提供します。モジュールは、モジュールの読み込み後に利用可能な設定ディレクティブを追加で提供することも可能です。
以下のコマンドを使用して、システムにインストールされている入出力モジュールをリスト表示できます。
ls /usr/lib64/rsyslog/{i,o}m*
# ls /usr/lib64/rsyslog/{i,o}m*
rsyslog-doc パッケージをインストールした後、/usr/share/doc/rsyslog/html/configuration/modules/idx_output.html ファイルで使用可能なすべての rsyslog モジュールのリストを表示できます。
14.11. カーネルメッセージをリモートホストに記録するように netconsole サービスを設定 リンクのコピーリンクがクリップボードにコピーされました!
ディスクへのログインやシリアルコンソールの使用ができない場合は、netconsole カーネルモジュールおよび同じ名前のサービスを使用して、ネットワーク経由でカーネルメッセージをリモートの rsyslog サービスに記録できます。
前提条件
-
rsyslogなどのシステムログサービスがリモートホストにインストールされている。 - リモートシステムログサービスは、このホストから受信ログエントリーを受け取るように設定されています。
手順
netconsole-serviceパッケージをインストールします。dnf install netconsole-service
# dnf install netconsole-serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/netconsoleファイルを編集し、SYSLOGADDRパラメーターをリモートホストの IP アドレスに設定します。SYSLOGADDR=192.0.2.1
# SYSLOGADDR=192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow netconsoleサービスを有効にして起動します。systemctl enable --now netconsole
# systemctl enable --now netconsoleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
リモートシステムログサーバーの
/var/log/messagesファイルを表示します。
第15章 logging システムロールの使用 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、logging システムロールを使用して、Red Hat Enterprise Linux ホストをロギングサーバーとして設定し、多数のクライアントシステムからログを収集できます。
15.1. logging RHEL システムロールを使用したローカルログメッセージのフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールのプロパティーベースのフィルターを使用すると、さまざまな条件に基づいてローカルログメッセージをフィルタリングできます。その結果、たとえば以下を実現できます。
- 明確なログ: トラフィック量の多い環境では、ログが急増することがあります。エラーなどの特定のメッセージに注目することで、問題をより早く特定できるようになります。
- システムパフォーマンスの最適化: ログの量が多すぎると、通常、システムパフォーマンスが低下します。重要なイベントのみを選択的にログに記録することで、リソースの枯渇を防ぎ、システムをより効率的に運用できます。
- セキュリティーの強化: システムエラーやログイン失敗などのセキュリティーメッセージを効率的にフィルタリングすることで、関連するログのみを取得できます。これは、違反を検出し、コンプライアンス基準を満たすために重要です。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
logging_inputs-
ロギングの入力ディクショナリーのリストを定義します。
type: basicsオプションを指定すると、systemdジャーナルまたは Unix ソケットからの入力が対象になります。 logging_outputs-
ロギングの出力ディクショナリーのリストを定義します。
type: filesオプションにより、ローカルファイル (通常は/var/log/ディレクトリー内) にログを保存できます。property: msg、property: contains、およびproperty_value: errorオプションを指定すると、error文字列を含むすべてのログが/var/log/errors.logファイルに保存されます。property: msg、property: !contains、およびproperty_value: errorオプションを指定すると、他のすべてのログが/var/log/others.logファイルに保存されます。error値は、フィルタリングする必要がある文字列に置き換えることができます。 logging_flows-
ロギングのフローディクショナリーのリストを定義して、
logging_inputsとlogging_outputsの関係を指定します。inputs: [files_input]オプションは、ログの処理を開始する入力のリストを指定します。outputs: [files_output0, files_output1]オプションは、ログ送信先の出力のリストを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理対象ノードで、
/etc/rsyslog.confファイルの構文をテストします。rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 管理対象ノードで、システムが
error文字列を含むメッセージをログに送信することを確認します。テストメッセージを送信します。
logger error
# logger errorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように
/var/log/errors.logログを表示します。cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: error
# cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: errorCopy to Clipboard Copied! Toggle word wrap Toggle overflow hostnameはクライアントシステムのホスト名に置き換えます。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
15.2. logging RHEL システムロールを使用したリモートロギングソリューションの適用 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用して、1 つ以上のクライアントで systemd-journal サービスからログを取得し、リモートサーバーに転送するリモートロギングソリューションを設定できます。このサーバーは、remote_rsyslog および remote_files 設定からリモート入力を受け取り、リモートホスト名によって指定されたディレクトリー内のローカルファイルにログを出力します。
その結果、たとえば次のようなユースケースに対応できます。
- ログの集中管理: 複数のマシンのログメッセージを 1 つのストレージポイントから収集、アクセス、管理することで、日々の監視とトラブルシューティングのタスクが簡素化されます。また、このユースケースでは、ログメッセージを確認するために個々のマシンにログインする必要性が軽減されます。
- セキュリティーの強化: ログメッセージを 1 カ所に集中して保存すると、セキュアで改ざん不可能な環境にログを保存しやすくなります。このような環境により、セキュリティーインシデントをより効果的に検出して対応し、監査要件を満たすことが容易になります。
- ログ分析の効率向上: 複数のマシンまたはサービスにまたがる複雑な問題を迅速にトラブルシューティングするには、複数のシステムからのログメッセージを相関させることが重要です。これにより、さまざまなソースからのイベントをすばやく分析し、相互参照することができます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - サーバーまたはクライアントシステムの SELinux ポリシーでポートを定義し、それらのポートのファイアウォールを開く。デフォルトの SELinux ポリシーには、ポート 601、514、6514、10514、および 20514 が含まれます。別のポートを使用するには、クライアントおよびサーバーシステムの SELinux ポリシーの変更 を参照してください。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook の最初のプレイで指定されている設定は次のとおりです。
logging_inputs-
ロギングの入力ディクショナリーのリストを定義します。
type: remoteオプションを指定すると、ネットワークを介した他のロギングシステムからのリモート入力が対象になります。udp_ports: [ 601 ]オプションは、監視する UDP ポート番号のリストを定義します。tcp_ports: [ 601 ]オプションは、監視する TCP ポート番号のリストを定義します。udp_portsとtcp_portsの両方が設定されている場合、udp_portsが使用され、tcp_portsは削除されます。 logging_outputs-
ロギングの出力ディクショナリーのリストを定義します。
type: remote_filesオプションを指定すると、ログの送信元であるリモートホストとプログラム名ごとに、出力がローカルファイルに保存されます。 logging_flows-
ロギングのフローディクショナリーのリストを定義して、
logging_inputsとlogging_outputsの関係を指定します。inputs: [remote_udp_input、remote_tcp_input]オプションは、ログの処理を開始する入力のリストを指定します。outputs: [remote_files_output]オプションは、ログ送信先の出力のリストを指定します。
サンプル Playbook の 2 番目のプレイで指定されている設定は次のとおりです。
logging_inputs-
ロギングの入力ディクショナリーのリストを定義します。
type: basicsオプションを指定すると、systemdジャーナルまたは Unix ソケットからの入力が対象になります。 logging_outputs-
ロギングの出力ディクショナリーのリストを定義します。
type: forwardsオプションにより、ネットワーク経由でリモートログサーバーにログを送信できます。severity: infoオプションは、重大度が情報のログメッセージを示します。facility: mailオプションは、ログメッセージを生成するシステムプログラムの種類を示します。target: <host1.example.com>オプションは、リモートログサーバーのホスト名を指定します。udp_port: 601/tcp_port: 601オプションは、リモートログサーバーがリッスンする UDP/TCP ポートを定義します。 logging_flows-
ロギングのフローディクショナリーのリストを定義して、
logging_inputsとlogging_outputsの関係を指定します。inputs: [basic_input]オプションは、ログの処理を開始する入力のリストを指定します。outputs: [forward_output0, forward_output1]オプションは、ログ送信先の出力のリストを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
クライアントとサーバーシステムの両方で、
/etc/rsyslog.confファイルの構文をテストします。rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアントシステムがサーバーにメッセージを送信することを確認します。
クライアントシステムで、テストメッセージを送信します。
logger test
# logger testCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーシステムで、
/var/log/<host2.example.com>/messagesログを表示します。次に例を示します。cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: test
# cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow <host2.example.com>は、クライアントシステムのホスト名に置き換えます。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
15.3. TLS を使用した logging RHEL システムロールの使用 リンクのコピーリンクがクリップボードにコピーされました!
Transport Layer Security (TLS) は、コンピューターネットワーク上でセキュアな通信を可能にするために設計された暗号化プロトコルです。
RHEL システムロールの logging を使用すると、ログメッセージのセキュアな転送を設定して、1 つ以上のクライアントで systemd-journal サービスからログを取得し、TLS を使用してリモートサーバーに転送できます。
通常、リモートロギングソリューションでログを転送するための TLS は、インターネットなどの信頼性の低いネットワークやパブリックネットワーク経由で機密データを送信する場合に使用されます。また、TLS で証明書を使用することで、クライアントから正しい信頼できるサーバーにログを確実に転送できます。これにより、"中間者攻撃" などの攻撃を防ぐことができます。
15.3.1. TLS を使用したクライアントロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、RHEL クライアントでのロギングを設定し、TLS 暗号化を使用してログをリモートロギングシステムに転送できます。
この手順では、秘密鍵と証明書を作成します。その後、Ansible インベントリーのクライアントグループ内の全ホストに TLS を設定します。TLS プロトコルは、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
証明書を作成するために、Playbook で certificate RHEL システムロールを呼び出す必要はありません。このロールは、logging_certificates 変数が設定されている場合、logging RHEL システムロールによって自動的に呼び出されます。
CA が作成された証明書に署名できるようにするには、管理対象ノードが IdM ドメインに登録されている必要があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - 管理対象ノードが IdM ドメインに登録されている。
- 管理対象ノード上で設定するロギングサーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
logging_certificates-
このパラメーターの値は、
certificateRHEL システムロールのcertificate_requestsに渡され、秘密鍵と証明書の作成に使用されます。 logging_pki_filesこのパラメーターを使用すると、TLS に使用する CA、証明書、および鍵ファイルを検索するためにロギングで使用するパスとその他の設定 (サブパラメーター
ca_cert、ca_cert_src、cert、cert_src、private_key、private_key_src、およびtlsで指定) を設定できます。注記logging_certificatesを使用して管理対象ノードにファイルを作成する場合は、ca_cert_src、cert_src、およびprivate_key_srcを使用しないでください。これらは、logging_certificatesによって作成されていないファイルのコピーに使用されます。ca_cert-
管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemで、ファイル名はユーザーが設定します。 cert-
管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemで、ファイル名はユーザーが設定します。 private_key-
管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemで、ファイル名はユーザーが設定します。 ca_cert_src-
ターゲットホストの
ca_certで指定された場所にコピーされる、コントロールノード上の CA 証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 cert_src-
ターゲットホストの
certで指定された場所にコピーされる、コントロールノード上の証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 private_key_src-
ターゲットホストの
private_keyで指定された場所にコピーされる、コントロールノード上の秘密鍵ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 tls-
このパラメーターを
trueに設定すると、ネットワーク上でログがセキュアに転送されます。セキュアなラッパーが必要ない場合は、tls: falseに設定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイル -
/usr/share/doc/rhel-system-roles/logging/ディレクトリー -
/usr/share/ansible/roles/rhel-system-roles.certificate/README.mdファイル -
/usr/share/doc/rhel-system-roles/certificate/ディレクトリー - RHEL システムロールを使用した証明書の要求
-
rsyslog.conf(5)およびsyslog(3)man ページ
15.3.2. TLS を使用したサーバーロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、RHEL サーバーでのロギングを設定し、TLS 暗号化を使用してリモートロギングシステムからログを受信するようにサーバーを設定できます。
この手順では、秘密鍵と証明書を作成します。その後、Ansible インベントリーのサーバーグループ内の全ホストに TLS を設定します。
証明書を作成するために、Playbook で certificate RHEL システムロールを呼び出す必要はありません。logging RHEL システムロールがこのロールを自動的に呼び出します。
CA が作成された証明書に署名できるようにするには、管理対象ノードが IdM ドメインに登録されている必要があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - 管理対象ノードが IdM ドメインに登録されている。
- 管理対象ノード上で設定するロギングサーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
logging_certificates-
このパラメーターの値は、
certificateRHEL システムロールのcertificate_requestsに渡され、秘密鍵と証明書の作成に使用されます。 logging_pki_filesこのパラメーターを使用すると、TLS に使用する CA、証明書、および鍵ファイルを検索するためにロギングで使用するパスとその他の設定 (サブパラメーター
ca_cert、ca_cert_src、cert、cert_src、private_key、private_key_src、およびtlsで指定) を設定できます。注記logging_certificatesを使用して管理対象ノードにファイルを作成する場合は、ca_cert_src、cert_src、およびprivate_key_srcを使用しないでください。これらは、logging_certificatesによって作成されていないファイルのコピーに使用されます。ca_cert-
管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemで、ファイル名はユーザーが設定します。 cert-
管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemで、ファイル名はユーザーが設定します。 private_key-
管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemで、ファイル名はユーザーが設定します。 ca_cert_src-
ターゲットホストの
ca_certで指定された場所にコピーされる、コントロールノード上の CA 証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 cert_src-
ターゲットホストの
certで指定された場所にコピーされる、コントロールノード上の証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 private_key_src-
ターゲットホストの
private_keyで指定された場所にコピーされる、コントロールノード上の秘密鍵ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 tls-
このパラメーターを
trueに設定すると、ネットワーク上でログがセキュアに転送されます。セキュアなラッパーが必要ない場合は、tls: falseに設定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.4. RELP で logging RHEL システムロールの使用 リンクのコピーリンクがクリップボードにコピーされました!
Reliable Event Logging Protocol (RELP) とは、TCP ネットワークを使用する、データとメッセージロギング用のネットワーキングプロトコルのことです。イベントメッセージを確実に配信するので、メッセージの損失が許されない環境で使用できます。
RELP の送信側はコマンド形式でログエントリーを転送し、受信側は処理後に確認応答します。RELP は、一貫性を保つために、転送されたコマンドごとにトランザクション番号を保存し、各種メッセージの復旧します。
RELP Client と RELP Server の間に、リモートロギングシステムを検討することができます。RELP Client はリモートロギングシステムにログを転送し、RELP Server はリモートロギングシステムから送信されたすべてのログを受け取ります。このユースケースを実現するには、logging RHEL システムロールを使用して、ログエントリーが確実に送受信されるようにロギングシステムを設定できます。
15.4.1. RELP を使用したクライアントロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、ローカルに保存されたログメッセージを RELP を使用してリモートロギングシステムに転送するように設定できます。
この手順では、Ansible インベントリーの clients グループ内の全ホストに RELP を設定します。RELP 設定は Transport Layer Security (TLS) を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
target- リモートロギングシステムが稼働しているホスト名を指定する必須パラメーターです。
port- リモートロギングシステムがリッスンしているポート番号です。
tlsネットワーク上でログをセキュアに転送します。セキュアなラッパーが必要ない場合は、
tls変数をfalseに設定します。デフォルトではtlsパラメーターは true に設定されますが、RELP を使用する場合には鍵/証明書およびトリプレット {ca_cert、cert、private_key} や {ca_cert_src、cert_src、private_key_src} が必要です。-
{
ca_cert_src、cert_src、private_key_src} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certsと/etc/pki/tls/private) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。 -
{
ca_cert、cert、private_key} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。 - トリプレットの両方が設定されている場合には、ファイルはコントロールノードのローカルのパスから管理対象ノードの特定のパスへ転送されます。
-
{
ca_cert-
CA 証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemで、ファイル名はユーザーが設定します。 cert-
証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemで、ファイル名はユーザーが設定します。 private_key-
秘密鍵へのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemで、ファイル名はユーザーが設定します。 ca_cert_src-
ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
ca_certを指定している場合は、その場所にコピーされます。 cert_src-
ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
certを指定している場合には、その証明書が場所にコピーされます。 private_key_src-
ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。
private_keyを指定している場合は、その場所にコピーされます。 pki_authmode-
nameまたはfingerprintの認証モードを使用できます。 permitted_servers- ロギングクライアントが、TLS 経由での接続およびログ送信を許可するサーバーのリスト。
inputs- ロギング入力ディクショナリーのリスト。
outputs- ロギング出力ディクショナリーのリスト。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.4.2. RELP を使用したサーバーログの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、ログメッセージを RELP を使用してリモートロギングシステムから受信するようにサーバーを設定できます。
以下の手順では、Ansible インベントリーの server グループ内の全ホストに RELP を設定します。RELP 設定は TLS を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
port- リモートロギングシステムがリッスンしているポート番号です。
tlsネットワーク上でログをセキュアに転送します。セキュアなラッパーが必要ない場合は、
tls変数をfalseに設定します。デフォルトではtlsパラメーターは true に設定されますが、RELP を使用する場合には鍵/証明書およびトリプレット {ca_cert、cert、private_key} や {ca_cert_src、cert_src、private_key_src} が必要です。-
{
ca_cert_src、cert_src、private_key_src} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certsと/etc/pki/tls/private) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。 -
{
ca_cert、cert、private_key} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。 - トリプレットの両方が設定されている場合には、ファイルはコントロールノードのローカルのパスから管理対象ノードの特定のパスへ転送されます。
-
{
ca_cert-
CA 証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemで、ファイル名はユーザーが設定します。 cert-
証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemで、ファイル名はユーザーが設定します。 private_key-
秘密鍵へのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemで、ファイル名はユーザーが設定します。 ca_cert_src-
ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
ca_certを指定している場合は、その場所にコピーされます。 cert_src-
ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
certを指定している場合には、その証明書が場所にコピーされます。 private_key_src-
ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。
private_keyを指定している場合は、その場所にコピーされます。 pki_authmode-
nameまたはfingerprintの認証モードを使用できます。 permitted_clients- ロギングサーバーが TLS 経由での接続およびログ送信を許可するクライアントのリスト。
inputs- ロギング入力ディクショナリーのリスト。
outputs- ロギング出力ディクショナリーのリスト。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow