16.2. ログの管理

Certificate System サブシステムログファイルは、その特定のサブシステムインスタンス内の操作に関連するイベントを記録します。サブシステムごとに、インストール、アクセス、Web サーバーなどの問題について異なるログが保持されます。
すべてのサブシステムには同様のログ設定、オプション、および管理パスがあります。

16.2.1. ログ設定の概要

ログの設定方法は、Certificate System のパフォーマンスに影響を及ぼす可能性があります。たとえば、ログファイルのローテーションにより、ログが大きくなりすぎてサブシステムのパフォーマンスが低下するのを防ぎます。このセクションでは、Certificate System サブシステムによって記録されるさまざまな種類のログについて説明し、ログファイルのローテーション、バッファーリングされたログ、使用可能なログレベルなどの重要な概念を説明します。

16.2.1.1. ログに記録されるサービス

Certificate System のすべての主要コンポーネントとプロトコルは、メッセージをログファイルに記録します。表16.1「ログに記録されるサービス」 デフォルトでログに記録されるサービスを一覧表示します。特定のサービスがログに記録するメッセージを表示するには、適宜ログ設定をカスタマイズします。詳細は、「コンソールでログの表示」 を参照してください。

表16.1 ログに記録されるサービス

サービス 説明
ACL アクセス制御リストに関連するイベントをログに記録します。
管理 コンソールとインスタンス間の HTTPS 通信など、管理アクティビティーに関連するイベントをログに記録します。
すべて すべてのサービスに関連するイベントをログに記録します。
認証 認証モジュールに関連するアクティビティーに関連するイベントをログに記録します。
認証局 Certificate Manager に関連するイベントをログに記録します。
データベース 内部データベース関連のアクティビティーに関連するイベントをログに記録します。
HTTP
サーバーの HTTP アクティビティーに関連するイベントをログに記録します。HTTP イベントは実際には、HTTP サービスを提供するために Certificate System に組み込まれる Apache サーバーに属するエラーログに記録されることに注意してください。
キーリカバリー認証局 KRA に関連するイベントをログに記録します。
LDAP 証明書と CRL の公開に使用される LDAP ディレクトリーを使用してアクティビティーに関連するイベントをログに記録します。
OCSP OCSP ステータスの GET 要求など、OCSP に関連するイベントをログに記録します。
その他 コマンドラインユーティリティーやその他のプロセスなどの他のアクティビティーに関連するイベントをログに記録します。
要求キュー 要求キューアクティビティーに関連するイベントをログに記録します。
ユーザーおよびグループ インスタンスのユーザーおよびグループに関連するイベントをログに記録します。

16.2.1.2. ログレベル (メッセージカテゴリー)

Certificate System サービスによってログに記録されるさまざまなイベントは、ログレベルによって決定されるため、イベントの識別とフィルタリングが簡単になります。さまざまな Certificate System のログレベルが、表16.2「ログレベルと対応するログメッセージ」 に一覧表示されます。
ログレベルは、サーバーによって実行されるログのレベルをどの程度詳細にするかを示す番号で表されます。
優先度が高いほど、優先度の高いイベントのみがログに記録されるため、詳細度が低くなります。

表16.2 ログレベルと対応するログメッセージ

ログレベル メッセージカテゴリー 説明
0-1 トレース これらのメッセージには、より詳細なデバッグ情報が含まれます。このレベルはパフォーマンスに影響する可能性があるため、定期的に使用しないでください。
2-5 デバッグ これらのメッセージにはデバッグ情報が含まれます。このレベルは、非常に多くの情報を生成するため、通常の使用には推奨されません。
6-10 情報提供 これらのメッセージは、証明書システムの初期化完了成功した操作要求 などのステータスメッセージを含む、証明書システムの状態に関する一般的な情報を提供します。
11-15 警告 これらのメッセージは警告のみであり、サーバーの通常の操作に障害があることを示すものではありません。
> 15 失敗 これらのメッセージは、証明書サービス操作の実行の失敗 (User authentication failed または Certificate revoked) や、取り消せないエラーを引き起こす可能性のある予期しない状況 (リクエストがクライアントからされた同じチャネルでクライアントに対して処理された要求を返信できない) など、サーバーが正常に動作することを妨げるエラーおよび障害を示します。レベルを 15 より上に設定すると、障害のみが記録されるため、ログが最小限に抑えられます。
ログレベルを使用すると、イベントの重大度に基づいてログエントリーをフィルターできます。デフォルトのログレベルは 10 です。
ログデータは、特に低い (より冗長な) ログレベルでは広範囲に及ぶ可能性があります。ホストマシンには、すべてのログファイルに十分なディスク領域があることを確認します。また、すべてのログファイルがバックアップされ、ホストシステムが過負荷にならないように、ログレベル、ログローテーション、およびサーバーバックアップポリシーを適切に定義することも重要です。そうしないと、情報が失われる可能性があります。

16.2.1.3. バッファー付きおよびバッファーなしのロギング

Java サブシステムはすべてのタイプのログに対するバッファーロギングをサポートします。サーバーは、バッファー付きまたはバッファーなしのロギング用に設定できます。
バッファーログが設定されていると、サーバーは対応するログのバッファーを作成し、メッセージを可能な限りバッファーに保持します。サーバーは以下の条件のいずれかが発生した場合に限りログファイルにメッセージをフラッシュします。
  • バッファーが満杯になった場合。バッファーサイズが bufferSize 設定パラメーターで指定された値以上になると、バッファーが満杯になります。このパラメーターのデフォルト値は 512 KB です。
  • バッファーのフラッシュ間隔に到達した場合。最後のバッファーフラッシュからの経過時間、または flushInterval 設定パラメーターで指定された値と同じか大きい場合は、フラッシュ間隔に到達します。このパラメーターのデフォルト値は 5 秒です。
  • 現在のログがコンソールから読み取られる場合。サーバーは現在のログについてクエリーされる際に最新のログを取得します。
サーバーがバッファーなしロギング用に設定されている場合、サーバーはログファイルに生成されるときにメッセージをフラッシュします。サーバーはメッセージが生成されるたびに I/O 操作 (ログファイルへの書き込み) を実行するため、バッファーなしログ用にサーバーを設定するとパフォーマンスが低下します。
ログパラメーターの設定は、「コンソールでログの設定」を参照してください。

16.2.1.4. ログファイルローテーション

サブシステムログにはオプションのログ設定があり、ログファイルを無期限に拡張する代わりに、ログをローテーションして新しいログファイルを開始できます。ログファイルは、以下のいずれかの場合にローテーションされます。
  • 対応するファイルのサイズ制限に到達した場合。対応するログファイルのサイズは、maxFileSize 設定パラメーターで指定された値以下である必要があります。このパラメーターのデフォルト値は 100 KB です。
  • 対応するファイルの経過時間制限に到達した場合。対応するログファイルは、rolloverInterval 設定パラメーターで指定された間隔以上です。このパラメーターのデフォルト値は 2592000 秒 (30 日ごと) です。
注記
これらのパラメーターを 0 に設定すると、ログファイルのローテーションが実質無効にされます。
ログファイルがローテーションされると、追加したタイムスタンプを持つファイルの名前を使用して古いファイルの名前が指定されます。追加されたタイムスタンプは、対応するアクティブなログファイルがローテーションされた日時を示す整数です。日付と時刻の形式は、YYYYMMDD (年、月、日) および HHMMSS (時、分、秒) です。
ログファイル (特に監査ログファイル)v には重要な情報が含まれています。log ディレクトリー全体をアーカイブメディアにコピーして、これらのファイルを定期的に一部のバックアップメディアにアーカイブする必要があります。
注記
Certificate System は、ログファイルをアーカイブするためのツールやユーティリティーを提供していません。
Certificate System は、改ざん検出の手段としてログファイルをアーカイブする前にログファイルに署名するコマンドラインユーティリティー signtool を提供します。詳細は、「ログファイルの署名」 を参照してください。
ログファイルの署名は、署名された監査ログ機能の代わりに使用されます。署名付き監査ログは、サブシステム署名証明書で自動的に署名される監査ログを作成します。署名済み監査ログの詳細は、「コンソールでの署名監査ログの設定」を参照してください。
ローテーションされたログファイルは削除されません。

16.2.2. コンソールでログの設定

ログは、サブシステムコンソールとサブシステムの CS.cfg ファイルを使用して設定できます。署名付き監査ログやカスタムログなどの特別なログは、コンソールまたは設定ファイルからも作成できます。
監査ログは、CA、OCSP、TKS、および KRA サブシステムのサブシステムコンソールで設定できます。TPS ログは、設定ファイルでのみ設定されます。
  1. Configuration タブのナビゲーションツリーで Log を選択します。
  2. ログイベントリスナー管理 タブには、現在設定されているリスナーが一覧表示されます。
    新しいログインスタンスを作成するには、Add をクリックし、Select Log Event Listener Plug-in Implementation ウィンドウの一覧からモジュールプラグインを選択します。
  3. Log Event Listener Editor ウィンドウでフィールドを設定または変更します。表16.3「ログイベントリスナーフィールド」 に、さまざまなパラメーターを記載しています。

表16.3 ログイベントリスナーフィールド

フィールド 説明
Log Event Listener ID リスナーを識別する一意の名前を指定します。この名前には、文字 (aA から zZ)、数字 (0 から 9)、アンダースコア (_)、およびハイフン (-) を使用できますが、他の文字やスペースは使用できません。
type ログファイルのタイプを指定します。transaction を指定すると、監査ログが記録されます。
enabled ログがアクティブかどうかを設定します。有効にするログのみがイベントを記録します。値は true または false です。
level テキストフィールドにログレベルを設定します。このレベルは、フィールドに手動で入力する必要があります。選択メニューはありません。DebugInformationWarningFailureMisconfigurationCatastrophe、および Security を選択できます。詳細は、「ログレベル (メッセージカテゴリー)」を参照してください。
fileName ログファイルへのファイル名を含む完全パスを指定します。サブシステムユーザーには、ファイルへの読み書きパーミッションがなければなりません。
bufferSize ログのキロバイトサイズ (KB) のバッファーサイズを設定します。バッファーがこのサイズに達すると、バッファーの内容はフラッシュされ、ログファイルにコピーされます。デフォルトのサイズは 512 KB です。バッファーロギングの詳細は、「バッファー付きおよびバッファーなしのロギング」 を参照してください。
flushInterval バッファーの内容がフラッシュされてログファイルに追加されるまでの時間を設定します。デフォルトの間隔は 5 秒です。
maxFileSize ローテーションされる前に可能なログファイルのサイズをキロバイト (KB) 単位で設定できます。このサイズに達すると、ファイルはローテーションファイルにコピーされ、ログファイルが新たに開始されます。ログファイルのローテーションに関する詳細は、「ログファイルローテーション」を参照してください。デフォルトのサイズは 2000 KB です。
rolloverInterval アクティブなログファイルをローテートするようにサーバーの頻度を設定します。利用可能なオプションは hourly、daily、weekly、monthly、および yearly です。デフォルトは monthly です。詳細は、「ログファイルローテーション」 を参照してください。

16.2.3. CS.cfg ファイルでのログの設定

CS.cfg ファイルを編集してこのログを設定する方法は、『Red Hat Certificate System の計画、インストール、およびデプロイメントのガイド』 の CS.cfg での CRL の更新間隔の設定 セクションを参照してください。

16.2.4. 監査ログの管理

監査ログには、記録可能なイベントとして設定されたイベントのレコードが含まれます。logSigning 属性が true に設定されている場合、監査ログはサーバーに属するログ署名証明書で署名されます。この証明書は、ログが改ざんされていないことを確認するために監査人が使用できます。
デフォルトでは、通常の監査ログは /var/log/pki/instance_name/subsystem_name/ ディレクトリーと他のタイプのログにありますが、署名済み監査ログは /var/log/pki/instance_name/subsystem_name/signedAudit/ に書き込まれます。ログのデフォルトの場所を変更するには、設定を変更してください。
署名された監査ログは、ログ録画システムイベントを作成し、イベントが潜在的なイベント一覧から選択されます。有効にすると、署名された監査ログは、選択したイベントアクティビティーに関するメッセージの詳細セットを記録します。
署名付き監査ログは、インスタンスの初回作成時にデフォルトで設定されますが、インストール後に署名済み監査ログを設定することができます。(「インストール後の署名監査ロギングの有効化」を参照) 「コンソールでの署名監査ログの設定」 で説明されているように、設定後に設定の編集や署名証明書の変更も可能です。

16.2.4.1. 監査イベントの一覧

証明書システムの監査イベントの一覧は、付録E 監査イベント を参照してください。

16.2.4.2. インストール後の署名監査ロギングの有効化

署名付き監査ログは、pkispawn コマンドに pki_audit_group デプロイメントパラメーターを使用して、インスタンスの初回作成時にデフォルトで有効にできます。ただし、インスタンスの作成時に署名された監査ログを設定しなかった場合には、audit ログディレクトリーの所有権を pkiaudit などの auditor システムユーザーグループに再割り当てすることで、このログを有効にできます。
  1. インスタンスを停止します。
    # pki-server stop instance_name
  2. 署名付き監査ログディレクトリーのグループ所有権を、pkiaudit のような PKI 監査ログのオペレーティングシステムグループに設定します。これにより、PKI auditors グループのユーザーに signedAudit ディレクトリーへの必要な読み取りアクセスが許可され、ログファイルの署名を確認することができます。ユーザー (Certificate System ユーザーアカウント pkiuser を除く) に、このディレクトリーのログファイルへの書き込みアクセス権があるはずです。
    chgrp -R pkiaudit /var/log/pki/instance_name/subsystem_name/signedAudit
    
  3. インスタンスを再起動します。
    # pki-server start instance_name

16.2.4.3. コンソールでの署名監査ログの設定

署名付き監査ログは、インスタンスの初回作成時にデフォルトで設定されますが、設定後に設定を編集するか、署名証明書を変更することが可能です。
注記
署名された監査ログは大きくなる可能性があるため、ファイルシステムに十分なスペースを確保してください。
logSigning パラメーターを enable に設定し、ログの署名に使用される証明書のニックネームを指定することにより、ログが署名済み監査ログに設定されます。特別なログ署名証明書は、サブシステムの初回設定時に作成されます。
auditor 権限を持つユーザーのみが、署名済み監査ログにアクセスでき、表示できます。監査担当者は、AuditVerify ツールを使用して、署名済み監査ログが改ざんされていないことを確認できます。
署名付き監査ログはサブシステムの設定時に作成され、有効になりますが、監査ログの作成および署名を行うには追加の設定が必要になります。
  1. コンソールを開きます。
    注記
    CS.cfg ファイルを編集して監査ログを作成または設定するには、『Red Hat Certificate System 計画、インストール、およびデプロイメントガイド』 の CS.cfg ファイルのログの設定 を参照してください。
  2. Configuration タブのナビゲーションツリーで Log を選択します。
  3. ログイベントリスナー管理 タブで、SignedAudit エントリーを選択します。
  4. Edit/View をクリックします。
  5. Log Event Listener Editor ウィンドウでリセットする必要のある 3 つのフィールドがあります。
    • signedAuditCertNickname を入力します。これは、監査ログの署名に使用される証明書のニックネームです。監査署名証明書はサブシステムが設定されているときに作成され、auditSigningCert cert-instance_name subsystem_name のようなニックネームがあります。
      注記
      監査署名証明書のニックネームを取得するには、certutil を使用してサブシステムの証明書データベースの証明書を一覧表示します。以下に例を示します。
      certutil -L -d /var/lib/pki-tomcat/alias
      
      Certificate Authority - Example Domain    CT,c,
      subsystemCert cert-pki-tomcat             u,u,u
      Server-Cert cert-pki-tomcat               u,u,u
      auditSigningCert cert-pki-tomcat CA       u,u,Pu
      
    • logSigning フィールドを true に設定して、署名済みロギングを有効にします。
    • 監査ログに記録される イベント を設定します。付録E 監査イベント ログ可能なイベントを一覧表示します。ログイベントは、空白のないコンマで区切ります。
  6. ファイル名、ログレベル、ファイルサイズ、ローテーションスケジュールなど、ログに関するその他の設定を行います。
    注記
    デフォルトでは、通常の監査ログは /var/log/pki/instance_name/subsystem_name/ ディレクトリーと他のタイプのログにありますが、署名済み監査ログは /var/log/pki/instance_name/subsystem_name/signedAudit/ に書き込まれます。ログのデフォルトの場所を変更するには、設定を変更してください。
  7. ログ設定を保存します。
署名付き監査ログを有効にした後、ユーザーを作成し、そのエントリーを監査人グループに割り当てることにより、監査人ユーザーを割り当てます。監査グループのメンバーは、署名された監査ログを表示して検証できる唯一のユーザーです。auditors の設定に関する詳細は、「ユーザーの作成」 を参照してください。
監査担当者は、AuditVerify ツールを使用してログを確認できます。このツールの使用方法は、man ページの AuditVerify(1) を参照してください。

16.2.4.4. 監査ロギングエラーの処理

監査ロギング機能が失敗する可能性があるイベントがあるため、イベントをログに書き込むことができません。たとえば、監査ログファイルが含まれるファイルシステムが満杯であったり、ログファイルのファイル権限が誤って変更されると、監査ログのロギングが失敗する可能性があります。監査ロギングが失敗すると、Certificate System インスタンスは以下のようにシャットダウンします。
  • サーブレットが無効になり、新しいリクエストを処理しません。
  • 保留中のリクエストと新しいリクエストはすべて強制終了されます。
  • サブシステムがシャットダウンしています。
これが発生すると、管理者と監査人はオペレーティングシステム管理者と協力して、ディスク領域またはファイルパーティションの問題を解決する必要があります。IT の問題が解決したら、監査人は最後の監査ログエントリーが署名されていることを確認する必要があります。そうでない場合は、今後監査検証の失敗を防ぐために、手動で署名 (「ログファイルの署名」)、アーカイブし、削除する必要があります。これが完了すると、管理者は Certificate System を再起動することができます。

16.2.4.5. ログファイルの署名

Certificate System は、監査目的でアーカイブまたは配布される前にログファイルへのデジタル署名を行うことができます。この機能により、ファイルの改ざんを確認できます。
これは、署名された監査ログ機能の代替機能です。署名付き監査ログ機能は、自動的に署名される監査ログを作成します。このツールは、アーカイブされたログを手動で署名します。署名済み監査ログの詳細は、「コンソールでの署名監査ログの設定」を参照してください。
ログファイルの署名には、署名ツール (signtool) と呼ばれるコマンドラインユーティリティーを使用します。このユーティリティーの詳細は、http://www.mozilla.org/projects/security/pki/nss/tools/ を参照してください。
ユーティリティーは、サブシステムインスタンスの証明書、キー、およびセキュリティーモジュールデータベースの情報を使用します。
auditor 権限を持つユーザーとしては、signtool コマンドを使用してログディレクトリーに署名します。
signtool -d secdb_dir -k cert_nickname -Z output input
  • secdb_dir は、CA の証明書、キー、およびセキュリティーモジュールデータベースが含まれるディレクトリーへのパスを指定します。
  • cert_nickname は、署名に使用する証明書のニックネームを指定します。
  • output は JAR ファイルの名前 (署名された zip ファイル) を指定します。
  • input は、ログファイルを含むディレクトリーへのパスを指定します。

16.2.4.6. 監査イベントのフィルタリング

Certificate System では、管理者はフィルターを設定して、イベント属性に基づいて監査ファイルに記録される監査イベントを設定できます。
フィルターの形式は LDAP フィルターと同じです。ただし、Certificate System は、以下のフィルターのみをサポートします。

表16.4 サポート対象の Audit イベントフィルター

タイプ 形式
Presence (attribute=*) (ReqID=*)
Equality (attribute=value) (Outcome=Failure)
Substring (attribute=initial*any*...*any*final) (SubjectID=*admin*)
AND 演算 (&(filter_1)(filter_2)...(filter_n)) (&(SubjectID=admin)(Outcome=Failure))
OR 演算 (|(filter_1)(filter_2)...(filter_n)) (|(SubjectID=admin)(Outcome=Failure))
NOT 演算 (!(filter)) (!(SubjectID=admin))
LDAP フィルターの詳細は、『Red Hat Directory Server 管理ガイド』の複合検索フィルターを参照してください。

例16.3 監査イベントのフィルタリング

InfoName フィールドが rejectReadon または cancelReason に設定されている処理済み証明書要求のイベントと、プロファイル証明書要求およびイベントの失敗したイベントのみを記録するには、以下を実行します。
  1. /var/lib/pki/instance_name/subsystem_type/conf/CS.cfg ファイルを編集して、以下のパラメーターを設定します。
    log.instance.SignedAudit.filters.PROFILE_CERT_REQUEST=(Outcome=Failure)
    log.instance.SignedAudit.filters.CERT_REQUEST_PROCESSED=(|(InfoName=rejectReason)(InfoName=cancelReason))
  2. Certificate System を再起動します。
    # pki-server restart instance_name

16.2.5. ログモジュールの管理

許可されるログのタイプとそれらの動作は、ログモジュール プラグインで設定されます。新しいロギングモジュールが作成され、カスタムログの作成に使用できます。
新しいログプラグインモジュールは、コンソールから登録できます。新しいモジュールを登録するには、モジュール名と、ログインターフェイスを実装する Java™ クラスのフルネームを指定する必要があります。
プラグインモジュールを登録する前に、モジュール用の Java™ クラスを classes ディレクトリーに配置します。実装はクラスパス上になければなりません。
ログプラグインモジュールをサブシステムインスタンスで登録するには、以下を実行します。
  1. カスタムジョブクラスを作成します。この例では、カスタムログプラグインは MyLog.java と呼ばれます。
  2. インスタンスの lib ディレクトリーに新しいクラスをコンパイルします。
    javac -d . /var/lib/pki/pki-tomcat/lib -classpath $CLASSPATH MyLog.java
  3. CA がカスタムクラスにアクセスできるように、CA の WEB-INF Web ディレクトリーにディレクトリーを作成します。
    mkdir /var/lib/pki/pki-tomcat/webapps/ca/WEB-INF/classes
  4. 所有者を Certificate System のシステムユーザー (pkiuser) に設定します。
    chown -R pkiuser:pkiuser /var/lib/pki/pki-tomcat/lib
    
  5. プラグインを登録します。
    1. コンソールにログインします。
    2. Configuration タブで、ナビゲーションツリーから Logs を選択します。次に、Log Event Listener Plug-in Registration タブを選択します。
    3. Register をクリックします。
      Register Log Event Listener Plug-in Implementation ウィンドウが表示されます。
    4. プラグインモジュールの名前と、Java™ クラス名を指定します。
      Java™ クラス名は、実装する Java™ クラスの完全パスです。このクラスがパッケージに含まれる場合は、パッケージ名を含めます。たとえば、com.customplugins という名前のパッケージに customLog という名前のクラスを登録すると、クラス名は com.customplugins.customLog になります。
    5. OK をクリックします。
不要なログプラグインモジュールは、コンソールから削除できます。モジュールを削除する前に、このモジュールに基づくリスナーをすべて削除します。「ログファイルローテーション」を参照してください。