【作成日]

2019/11/28

=========================================================================================
【変更内容]

このパッチはリストア処理の不具合修正パッチです。

[詳細]

バックアップファイルのリストア処理中に、ユーザWeb 画面へのアクセスやバッチ処理等で
データベースへ書き込みが発生した場合に、タイミングや条件によってデータベースの
スキーマ破損が発生する可能性があることが判明しました。

この不具合は以下の条件のもとでリストア処理を実行することで回避することが可能です。

  - リストア処理の際、死活監視を含めたWeb アクセスを遮断
  - LDAP ID 同期等のデータベースへの書き込みが発生するバッチ処理の実行時間帯以外に
    リストア処理を実行

上記方法での回避が困難な場合、本パッチを適用してください。

本パッチでは以下の対策を行っています：

  1) リストア処理中、アプリケーションからのデータベースアクセスをロックします。

  2) LDAP ID 同期等、データベースへの書き込みを伴うバッチ処理が実行されている
     最中にリストア処理が起動された場合、先行のバッチ処理終了後にリストア処理を
     実施します。その一方、リストア処理中にデータベースへの書き込みを伴う
     バッチ処理が起動された場合、バッチ処理は、即時停止します。

＜リストア処理の変更点＞

リストア処理の実行方法は、Web 管理画面、及びコマンドライン実行のいずれの場合も
変更点はありません。その一方で、本パッチ適用後、リストア処理が異常終了した場合の
動作が以下の通り変更になります。

・バックアップファイル以外のファイルを用いてリストア処理を実行した場合

  Web 管理画面 ->

    エラーメッセージ「バックアップファイルを読み込めませんでした。」を表示

  コマンドライン実行 ->

    restore.sh コマンドが終了コード 2 で終了

・ロック取得に失敗した場合

  リストア処理起動時、LDAP ID 同期等 DB への書き込みを行うバッチ処理が動作中の場合
  バッチ処理終了を最大5分間待機します。5分間待機後ロックを取得できない場合、リストア
  処理を実行せずに異常終了します。

  Web 管理画面 ->

    エラーメッセージ「ロックの取得に失敗しました。」を表示

  コマンドライン実行 ->

    restore.sh コマンドが終了コード 4 で終了

・リストア処理に失敗した場合

  リストア処理中に認証サーバがシャットダウンした場合、ネットワーク障害等でデータベースの
  冗長化構成が切断された場合にリストア処理が失敗します。

  Web 管理画面 ->

    エラーメッセージ「リストアに失敗しました。コマンドラインからリストアしてください。」を
    表示

  コマンドライン実行 ->

    restore.sh コマンドが終了コード 3 で終了

  リストアに失敗した場合、コマンドラインから再度リストア処理を実行してください。


＜リストア処理中のユーザ画面＞

リストア処理中、ユーザ Web 画面に HTTP(s) アクセスした場合、レスポンスコード 500 を
返却します。

冗長化構成の場合、リストア処理中、両系の Web アクセスがレスポンスコード500 を返却します。

＜データベースへの書き込みを伴うバッチ処理＞

リストア処理と排他制御の対象となる処理は以下の通りです。
  
  - LDAP ID 同期
  - 有効期限切れお知らせメール送信
  - スタンダード版データ取り込み
  - CSV 一括登録 (コマンド名: userimport.php)
  - LDAP 認証連携ユーザ削除スクリプト（コマンド名: passlogic_adsync.php)
  - ログ削除バッチ (passlogic_log_db_delete.sh)
  - リストア処理 (リストア処理実行中に、リストア処理を新たに実行する場合)

これらのバッチ処理は、リストア処理実行中に起動された場合、処理を実施せずに終了します。
またバッチ処理が実行中にリストア処理が起動された場合、バッチ処理の終了を最大5分間待機
します。

=========================================================================================
【対象バージョン】

PassLogic Enterprise Edition 3.1.0 (RHEL6/CentOS6, RHEL7/CentOS7)
PassLogic Enterprise Edition 3.1.0-SP1 (RHEL6/CentOS6, RHEL7/CentOS7)

PassLogic Enterprise Edition 3.1.0 に本パッチを適用した場合、
「ユーザー一括登録不具合修正パッチ for Ent-v3.1.0(t963) 」も
合わせて適用された状態になります。

[パッチ適用時のサービス停止]
パッチ適用時、httpd, passlogic-pgpool, passlogic-pgsql, radiusd の停止は
必要ありませんが、パッチ適用作業中は、ユーザアクセスへ影響が考えられます。
メンテナンス時間を設けた上でパッチを適用してください。


[適用範囲]
全ての PassLogic 認証サーバ （ゲートウェイサーバへの適用は必要ありません）

[変更・追加ファイル]

/opt/passlogic/apps/admin/cgi/stdImport.php
/opt/passlogic/apps/admin/cgi/userimport.php
/opt/passlogic/apps/admin/restore.php
/opt/passlogic/apps/admin/userLdapCmd.php
/opt/passlogic/apps/admin/userPasschgMail.php
/opt/passlogic/apps/lib/database/getPDO.php
/opt/passlogic/apps/lib/passlogic_lock.php
/opt/passlogic/apps/passlogic-lang.xml
/opt/passlogic/apps/tools/pm.sh
/opt/passlogic/apps/tools/passlogic_adsync.php
/opt/passlogic/apps/tools/passlogic_log_db_delete.sh
/opt/passlogic/apps/tools/restore.sh
/opt/passlogic/apps/tools/lock_mon.sh
/opt/passlogic/apps/tools/make_lock.sh
/opt/passlogic/apps/tools/passlogic_cron_mon.sh
/opt/passlogic/pgsql/start-script (RHEL6/CentOS6 のみ)
/usr/lib/systemd/system/passlogic-pgsql.service (RHEL7/CentOS7 のみ)

[パッチ適用手順]

    /usr/local/src にパッチプログラムをコピーした場合のコマンド例

    # cd /usr/local/src
    # tar zxvf passlogic-ent_t1405.tar.gz
    # cd passlogic-ent_t1405
    # bash patch.sh exec
    Start updating to the version ent-3.1.0_t1405 [yes or no] （yes をタイプ）
    # systemctl daemon-reload (RHEL7/CentOS7 の場合。必ず実行してください)

    patch.sh 実行終了時下記のメッセージを表示します。

    Normal termination （正常終了）
    Error （異常終了） 異常終了の場合は、サポートにお問い合わせください

    RHEL7/CentOS7 の環境では、passlogic-pgsql.service 設定ファイルを更新します。
    パッチプログラムを実行したあと、必ず systemctl daemon-reload を実行して、
    新しい設定を有効にしてください。

    patch.sh 実行後、パッチプログラムを展開したディレクトリには、切り戻し用の
    バックアップファイルが保存されます。このディレクトリを削除した場合、切り戻し
    処理は実施できなくなります。
    
[パッチ切り戻し手順]
    /usr/local/src にパッチプログラムをコピーした場合のコマンド例

    # cd /usr/local/src/passlogic-ent_t1405
    # bash patch.sh undo
    Start reverting the patched files [yes or no] （yes をタイプ）
    # systemctl daemon-reload (RHEL7/CentOS7 の場合。必ず実行してください)

    patch.sh 実行終了時下記のメッセージを表示します。

      Normal termination （正常終了）
      Error （異常終了） 異常終了の場合は、サポートにお問い合わせください

    RHEL7/CentOS7 の環境では、passlogic-pgsql.service 設定ファイルを更新します。
    パッチプログラムを実行したあと、必ず systemctl daemon-reload を実行して、
    新しい設定を有効にしてください。
