概要

パスワードを安全に保存するための一般的な推奨事項

設定ファイルにパスワードを保存する場合、そのファイルへのアクセスを、そのパスワードを知る必要のあるユーザーだけに制限し、 平分で秘密情報が漏洩する偶発的なファイル開き防止が不可欠です。 機密データを安全に保つためのベストプラクティスをいくつか紹介します。

最初のルールは、パスワードをインクルードファイルに分離し、 パスワード変更時にのみそのファイルを開き、関連しない設定編集時には開かないことです。 Wrapper が常にファイルをチェックようにするには、@include.required ディレクティブ (または @include.default_mode=required) を使用してファイルをインクルードすることをお勧めします (そうでない場合は、ファイルは黙って無視されてしまいます)。

少なくとも、Wrapper プロセスはインクルードファイルを読み込む必要があるため、そのファイルを読み取れるユーザーで実行してください。 理想的には、そのファイルへの読み取りアクセスは該当ユーザーのみに付与され、 管理者のみがそのユーザーでログインできるようにします。 Unix では、シェルスクリプトのRUN_AS_USER変数を使用して代替ユーザーで 実行できます。 Windows では、サービスとして実行する際に使用するアカウントを[wrapper.ntservice.account]プロパティで指定できます。

Wrapper は、プロパティ値(またはその一部)を機密としてマークするための「cipher」表記を提供します。 この暗号表記法は、開始の「%」区切り文字、それに続く機密テキスト(オプションで難読化可能)、 縦棒(「|」)、テキストを処理またはデコードするために使用されるメソッドの 識別子、および終了の「%」区切り文字で構成されます。 パスワードと機密データのエンコードページでは、 この表記法と、それに使用できる難読化方法について詳しく説明しています。 Wrapper がテキストを安全に処理するには、暗号表記法の使用が不可欠です。 これにより、機密値がログにで出力されたり、Java コマンドラインに表示されたりすることがなくなりますが、 それを含むファイルに対する権限チェックも実行されます。これについては、以下で説明します。

注意

Wrapper はファイルの権限のチェックにどのように役立ちますか?

Wrapper ver. 3.6.0には、機密データを含むファイルに適切な権限を設定するためのメカニズムがあります。

Wrapper が起動するたびに、以下のファイルが検証されます。

  • %...|<cipher_name>%表記で)マスキングまたは難読化された値を含む設定ファイル
  • %...|<cipher_name>%表記で)マスキングまたは難読化された値を含むパラメーターファイル
  • wrapper.secure_file.additional.<n>]プロパティでリストされた追加のセキュアファイル(スタンダード版)

ファイル権限の管理は Windows と Unix で大きく異なり、Wrapper の権限チェック方法もプラットフォームによって異なります。

  • Windows では、ファイル権限を付与できるユーザーまたはグループは無制限です。 Wrapper は厳格なアプローチを採用しており、ファイルへの権限を持つすべてのユーザーが 設定ファイルで明示的に許可されている必要があります。

    さらに、安全でないとみなされる特定のユーザーはブラックリストに登録され、許可されません。(以下のセクションを参照)

  • Unix では、ファイル権限はowner(オーナー)、(group)グループ、およびother(その他)の3つのクラスに設定できます

    Wrapper は各クラスに対して異なるセキュリティポリシーを持っています。

    • owner」には制限がありません。誰でも任意の許可を持つことができます。 任意の権限を持つ誰でもオーナーになることができます。

    • group」クラスが読み書き可能モードの場合、グループ名は Wrapper 明示的に設定ファイルで許可されている必要があります。

      また、広すぎる特定のグループはブラックリストに登録され、許可できません(以下のセクションを参照)

    • other」クラスは常に非読み書きモード(ゼロ)でなければなりません。

注意

次のような疑問が正当に生じるかもしれません。 単純なコンフィギュレーショプロパティによって、任意のユーザーまたはグループがセキュアファイルにアクセスできるようになるというのは、 セキュリティ上の欠陥ではないでしょうか?

重要なのは、設定で特定のアカウントを許可しても、ファイルの実際の許可は変更されないことです。 [wrapper.secure_file.check.windows.allowed_account.<n>]プロパティは、 Wrapper が起動する前に問題を検出し、初期セットアップ時にできるだけ早くファイルの権限を修正できるように設計されています。 攻撃者が後から独自のアカウントを追加したとしても、その時点ですでに正しく設定されているはずのファイルの実際の権限は 変更されません。


設定ファイルでアカウントまたはグループを明示的に許可するには、以下のプロパティを使用してください。


ファイルがファイル権限をサポートしない形式のボリュームにある場合、上記のセキュリティチェックは実行できません。 デフォルトでは、このようなボリュームは非セキュアと見なされますが、以下のプロパティで挙動を変更できます。


上記の条件がチェック対象のファイルで満たされない場合、Wrapper のデフォルト挙動は、 権限の調整方法を示すメッセージを表示して停止することです。

ただし、この挙動は次のプロパティを使用してカスタマイズできます。


スタンダード版およびプロフェッショナル版では、権限をチェックすべき追加ファイルをリストする以下のプロパティを提供します。

wrapper.secure_file.check.windows.allowed_account.<n> プロパティ

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

これらのプロパティは、Windows でセキュアファイルの権限をチェックする際に許可されるアカウントのリストを指定するために使用できます。

簡便のため、これらのプロパティはすべてのセキュアファイルに適用されます。 したがって、異なるファイルで異なるアカウントに権限を付与する場合、これらのプロパティは、すべてのセキュアファイルに 共通の許可アカウントリストを作成する必要があります。

以下のアカウントは本質的に安全ではないため、許可できないことに注意してください。

  • Everyone」(皆さん)

  • ANONYMOUS LOGON」(匿名ログオン)

  • Authenticated users」(認証済みユーザー)

  • Guests」(ゲスト)

  • Users」(ユーザー)

パスワードを含むファイルが NT AUTHORITY\SYSTEMBUILTIN\Administrators、およびDESKTOP-06SJR11\johnに許可で作成されたと仮定します。ファイルがパスワードを含むため機密と見なされ、以下のログ出力が表示されます。

Wrapper 出力:
wrapper  | ファイル「C:\mayapp\conf\wrapper.conf」に機密データが含まれていますが、その権限は緩すぎます。
wrapper  |   問題のある権限:
wrapper  |     NT AUTHORITY\SYSTEM    : コンフィギュレーションでこのアカウントを許可するか、ファイルの読み取りおよび書き込み権限を削除してください。
wrapper  |     BUILTIN\Administrators : コンフィギュレーションでこのアカウントを許可するか、ファイルの読み取りおよび書き込み権限を削除してください。
wrapper  |     DESKTOP-06SJR11\john   : コンフィギュレーションでこのアカウントを許可するか、ファイルの読み取りおよび書き込み権限を削除してください。
wrapper  |
wrapper  |     Wrapper を Windows サービスとして実行するには、許可されたアカウントのリストに「.\LocalSystem」を追加してください。
wrapper  |     Wrapper をコンソールアプリケーションとして実行するには、許可されたアカウントのリストに「DESKTOP-06SJR11\john」を追加してください。
wrapper  |
wrapper  |   Wrapper は停止します。

最初に取るべき行動は、不要な権限を削除することです。ファイルを右クリックし、「プロパティ」を開き、「セキュリティ」タブを選択します。 次に、「編集」ボタンをクリックし、削除したいユーザーまたはグループを選択します。その後「削除」ボタンをクリックすることで、 ユーザーを削除できます。?例えば、「john」を削除できます。

残りの権限が必要な場合、Wrapper コンフィギュレーションで以下のように明示的に許可する必要があります。

設定例:
wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators

Wrapper 再起動後、メッセージが表示されなくなり、アプリケーションは正常に起動します。


警告

Windows では、権限の継承が有効になっていることがよくあります。 これは、ファイル作成時に親フォルダーの権限を自動的に継承することを意味します。 権限の追加は可能ですが、継承された権限を削除しようとすると、以下のメッセージが表示されます。

継承された権限を削除するには、権限の継承が無効になっている親フォルダーにファイルを保存するか、 ファイル自体の権限の継承を削除する必要があります。

wrapper.secure_file.check.unix.allowed_group.<n> プロパティ

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :Windows (未対応)Mac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

これらのプロパティは、Unix システム上のセキュアファイルの権限を確認するときに、 許可されるグループのリストを指定するために使用できます。

Unix システムでは、グループ所有権は1つのグループにのみ設定できますが、 これらのプロパティは、すべてのセキュアファイルで許可されるグループのリストを形成します。 別々のセキュリティファイルに対して複数のグループを許可する必要がある場合は、必要な数の [wrapper.secure_file.check.unix.allowed_group.<n>]プロパティを追加してグループをリスト化できます。 その際、各グループごとに「<n>」インデックスを増分することを忘れないでください。

次のグループは範囲が広すぎるため許可されないことに注意してください。

  • users」(ユーザー)

  • other」(その他)

  • everyone」(皆さん)

  • staff」(スタッフ)

パスワードを含むファイルが次の所有権と権限で作成されたと仮定します。

ls -la ../conf/wrapper-secure.conf
-rw-rw-r-- 1 john team 9489 Nov 21 17:00 ../conf/wrapper-secure.conf
Wrapper 出力:
wrapper  | ファイル「/home/john/wrapper/conf/wrapper.conf」に機密データが含まれていますが、その権限は緩すぎます。
wrapper  |   問題のある権限:
wrapper  |     「04」(r--)権限は「others」(その他)に付与されました。「00」である必要があります。
wrapper  |     「060」(rw-)権限は、「team」グループに付与されましたが、このグループはコンフィギュレーションで許可されていません。
wrapper  | 
wrapper  |   Wrapper を一人のユーザーによって実行することを意図している場合は、保護されたファイルの
wrapper  |    所有権をそのユーザーに設定し、他のすべての権限を削除するのが最適です。
wrapper  |    複数のユーザーが保護されたファイルにアクセスできるようにするには、制限されたユーザーリストのみが
wrapper  |    属するグループに読み取り権限を付与できますが、このグループはコンフィギュレーションで明示的に
wrapper  |    許可されている必要があります。
wrapper  | 
wrapper  |   Wrapper は停止します。

最初に行うべきアクションは、「other」クラスに対する権限を削除することです。例えば、「chmod o-r ../conf/wrapper.conf」コマンドを使用します。

ほとんどの場合、グループの権限も削除する必要がありますが、複数のユーザーが同じグループに属していて、Wrapper の実行を 許可されているといった状況も考えられます。「team」グループの権限を維持する必要がある場合は、以下の設定を使用して、 許可されたグループのリストに追加できます。

設定例:
wrapper.secure_file.check.unix.allowed_group.1=team

Wrapper 再起動後、メッセージが表示されなくなり、アプリケーションは正常に起動します。

wrapper.secure_file.check.windows.allow_unsecured_volumes プロパティ

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

このプロパティにより、機密データを含むファイルを、ファイル権限をサポートしていない形式のボリュームに保存することが可能です。

Windows では、FAT32 や exFAT などのファイルシステムはファイル権限をサポートしていません。 つまり、ボリュームにアクセスできる人なら誰でも、そのボリューム上のファイルにアクセスできることになります。

ボリューム自体へのアクセスが安全であることがわかっている場合(たとえば、許可されたユーザーのみがマウントしている場合など)を除き、 機密データを含むファイルは、アクセス権限をサポートするファイルシステム(「NTFS」など)が使用されているボリュームに保存し、 これらのアクセス権限を必要最小限に制限することを推奨します。

デフォルトでは、セキュリティ保護されていないボリュームに機密ファイルを保存することは許可されていません(デフォルト値は「FALSE」です)。

保護されていないボリューム上に機密ファイルが見つかった場合、Wrapper は次のメッセージを出力して停止します。

Wrapper 出力:
wrapper  | ファイル「A:\wrapper-secret.conf」は、ファイル権限をサポートしていない形式のボリューム上にあります。そのボリュームにアクセスできるユーザーなら誰でもファイルを読み取ることができます。
wrapper  |   「wrapper.secure_file.check.windows.allow_unsecured_volumes=TRUE」を使用するか、ファイルを別のボリュームに移動してください。
wrapper  |
wrapper  |   Wrapper は停止します。

[wrapper.secure_file.check.windows.allow_unsecured_volumes]が「TRUE」に設定されている場合、 Wrapper はこのメッセージを表示しなくなり、起動できるようになります。

設定例(機密ファイルをセキュリティ保護されていないボリュームに保存できるようにします):
wrapper.secure_file.check.windows.allow_unsecured_volumes=TRUE

wrapper.secure_file.check.unix.allow_unsecured_volumes プロパティ

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :Windows (未対応)Mac OSXLinuxIBM AIX (未対応)FreeBSDHP-UX (未対応)Solaris (未対応)IBM z/Linux

このプロパティにより、機密データを含むファイルを、ファイル権限をサポートしていない形式のボリュームに保存することが可能です。

Unix システムでは、FAT32 や NTFS などのファイルシステムはファイル権限をサポートしていません。 つまり、ボリュームにアクセスできる人なら誰でも、そのボリューム上のファイルにアクセスできることになります。 たとえば、Windows サーバーでホストされ、Linux システムと共有されているボリュームがこれに該当します。

ボリューム自体へのアクセスが安全であることがわかっている場合(たとえば、許可されたユーザーのみがマウントしている場合など)を除き、 機密データを含むファイルは、アクセス権限をサポートするファイルシステム(「ext4」など)が使用されているボリュームに保存し、 これらのアクセス権限を必要最小限に制限することを推奨します。

デフォルトでは、セキュリティ保護されていないボリュームに機密ファイルを保存することは許可されていません(デフォルト値は「FALSE」です)。

保護されていないボリューム上に機密ファイルが見つかった場合、Wrapper は次のメッセージを出力して停止します。

Wrapper 出力:
wrapper  | ファイル「/mnt/myvolume/wrapper-secret.conf」は、ファイル権限をサポートしていない形式のボリューム上にあります。そのボリュームにアクセスできるユーザーなら誰でもファイルを読み取ることができます。
wrapper  |   「wrapper.secure_file.check.unix.allow_unsecured_volumes=TRUE」を使用するか、ファイルを別のボリュームに移動してください。
wrapper  | 
wrapper  |   Wrapper は停止します。

[wrapper.secure_file.check.unix.allow_unsecured_volumes]が「TRUE」に設定されている場合、 Wrapper はこのメッセージを表示しなくなり、起動できるようになります。

設定例(機密ファイルをセキュリティ保護されていないボリュームに保存できるようにします):
wrapper.secure_file.check.unix.allow_unsecured_volumes=TRUE

wrapper.secure_file.check.disable プロパティ

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

このプロパティを使用すると、セキュアファイルの権限チェックを無効にすることができます。 ただし、上記のセクションで赤で示されている禁止アカウントの使用は無効のままとなり、Wrapper を起動できないことに注意してください。

デフォルト値は「FALSE」です。

設定例(セキュアファイルの権限チェックを無効にします):
wrapper.secure_file.check.disable=TRUE

wrapper.secure_file.check.loglevel プロパティ

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

このプロパティを使用すると、セキュアファイルのアクセス権限に関する問題が検出された場合に出力されるメッセージのログレベルを設定できます。

wrapper.secure_file.check.srict]が「TRUE」の場合、 デフォルト値は「FATAL」で、それ以外の場合は「WARN」です。

設定例(メッセージのログ レベルを DEBUG に変更する):
wrapper.secure_file.check.loglevel=DEBUG

wrapper.secure_file.check.srict プロパティ

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

このプロパティを使用すると、セキュアファイルのアクセス権限に関する問題が検出された場合に Wrapper を停止するか続行するかを定義できます。

権限の問題をできるだけ早く検出して解決するために、このプロパティを「TRUE」に設定しておくことをお勧めします。 Wrapper がユーザーの介入なしに自動的に起動するように設定されている場合(たとえば、サービスとして起動する場合など)、 このプロパティを「FALSE」に設定すると便利な場合があります。 Wrapper は、デフォルトのログレベル「WARN」で権限の問題を報告し、実行を継続します。 後でログを確認するユーザーは、警告が報告された場合は、できるだけ早くファイルの権限を修正することをお勧めします。

デフォルト値は「TRUE」です。

設定例(権限の問題は報告されますが、実行は続行されます):
wrapper.secure_file.check.srict=FALSE

wrapper.secure_file.additional.<n> プロパティ群

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

スタンダード版とプロフェッショナル版では、Wrapper によって自動的に機密ファイルとして検出されたファイルと同じルールを 用いてチェックすべき追加ファイルをリストする機能を提供しています。これは、例えば、Wrapper ではなく Java アプリケーションによって 読み込まれる機密ファイルの場合に役立ちます。

<n>」コンポーネント部:

各要素は、「wrapper.secure_file.additional.」で始まるプロパティ名を持ち、 プロパティ名の「<n>」コンポーネント部には、 「1」からカウントアップしていく整数値のナンバリング数値を入れて指定します。 デフォルトでは、連番であり欠番で飛ぶことはないはずです。 [wrapper.ignore_sequence_gaps]プロパティは、 シーケンス内でギャップ(途切れ)を「許可する/許可しない」を任意に設定にすることができます。

設定例(権限を確認する必要がある追加ファイルをリスト化します):
wrapper.secure_file.additional.1=../conf/db-credentials.xml
wrapper.secure_file.additional.2=../conf/settings.json

wrapper.secure_file.additional.<n>.required プロパティ群

対応バージョン :3.6.1
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

ファイルが存在する必要があるか(TRUE)、任意であるか(FALSE)を指定します。

デフォルト値は「TRUE」です。

注意

存在しているものの、現在のユーザーがアクセスできないファイルの場合、エラーメッセージは表示されません。

設定例:
wrapper.secure_file.additional.1=../conf/db-credentials.xml
wrapper.secure_file.additional.1.required=TRUE

wrapper.secure_file.additional.2=../conf/settings.json
wrapper.secure_file.additional.2.required=FALSE

参照: セキュリティ

暗号設定:

セキュアファイル:

コマンド: