概要

Windows では、システムリソースおよびシステム関連タスクへのアクセスは、アクセストークンと 呼ばれるオブジェクトに保持されている特権を使用して制御できます。 ユーザーに代わって Wrapper が実行されると、プロセスはユーザーの特権を含むアクセストークンのコピーを受け取ります。

Wrapper プロフェッショナル版では、これらの特権をさまざまなレベルで調整できます。

  • 管理者の資格情報を使用して Wrapper をサービスとしてインストールする場合 (または、適切なアクセス権限を 使用してサービスを更新する場合)、それらのリストまたは必要な特権を完全に再定義することができます。 その後、サービスコントロールマネージャー (SCM) がサービスを開始すると、指定された特権でプロセストークンが更新されます。

  • 実行時に、Wrapper のプロセストークンに存在する特権を 有効または無効にすることができます。 さらに、特権を完全に削除することもできますが、Wrapper プロセスが存続している間はこの操作を元に戻すことはできません。 アクセストークンに存在しない特権は追加できません。

  • デフォルトでは、ユーザーセッションから開始されたプロセスとそのすべての子プロセスは 同じアクセストークンを共有します。 したがって、1 つのプロセスによって特権が変更されると、 その変更は同じ親子階層内のすべてのプロセスに適用されます。

    ところが、Wrapper を使用すると、一部の子プロセスの特権を個別に設定できます。 これは、Java プロセスイベントコマンドに該当します。 これを機能させるには、Wrapper のアクセストークンの複製が子プロセス専用に 作成されます。 これにより、子プロセスが新しいセキュリティコンテキストで実行できるようになり、 他のプロセスに影響を与えることなくその特権を調整できます。

セキュリティのため、アプリケーションは必要な特権のみを有効にすることをお勧めします。 特権が時折り使用される可能性がある場合、またはその子プロセスの一部で使用する必要が ある場合は、その特権を無効にして、後の段階で再度有効にする機能を保持することができます。 ただし、アプリケーションまたはその子プロセスによって特権が再度有効にならないようにするには、 特権を完全に削除するのが最も安全な方法です。

Windows サービスに必要な特権が指定されていない場合、サービスコントロールマネージャーは 起動時にサービスのアクセストークンを変更せず、デフォルトで割り当てられた特権、 つまりサービスアカウントが属する ユーザーとグループが保持する特権をそのまま残します。

サービスを実行するユーザーには、通常、次の特権が割り当てられます。

  • SeCreateGlobalPrivilege」特権と「SeImpersonatePrivilege」特権は、サービスを実行するすべてのユーザーが属する「SERVICE」グループを通じて付与されます。

  • SeIncreaseWorkingSetPrivilege」特権は、「Users」グループを通じて付与されます。

  • SeChangeNotifyPrivilege」特権は、すべてのユーザーに対してデフォルトで有効になっています。

一般に、上記の特権は Wrapper プロセスに適切 (場合によっては必要) であるため、 ほとんどの場合、特権を変更する必要はありません。 ただし、アプリケーションの使用法によっては、イベントに応答して実行される Java プロセスまたは 子プロセスのアクセストークンから一部の特権を削除する方がセキュリティ上望ましい場合があります。

警告

SeImpersonatePrivilege」特権には特に注意を払う必要があります。Windows サービスではデフォルトで有効になっていますが、Java アプリケーションがユーザーに 任意のコマンドを実行する特権を与えている場合、この特権が悪用され、ローカルアカウントから NT AUTHORITY\SYSTEM に昇格される可能性があります。 このような場合は、Java プロセスから「SeImpersonatePrivilege」特権を削除することを強くお勧めします。

これは、イベントコマンドにも同様に適用されます。 ターゲットプログラムまたはスクリプトが変更または置換されないように、 適切なファイル特権が設定されていることを常に確認する必要があります。 ただし、さらに、設定されたコマンドによってユーザーが独自のコマンドを実行したりコンソールを 開いたりできる場合は、「SeImpersonatePrivilege」も削除する必要があります。

NT AUTHORITY\SYSTEM は、Windows の管理者よりも多くの特権を持つ 強力なアカウントです。 このアカウントにアクセスすると、マシンをほぼ完全に制御できるようになるため、 安全性が懸念されます。

Wrapper プロセスの偽装を制御する方法の詳細については、「wrapper.ntservice.impersonation」特権の説明を参照してください。


特権を設定するために使用できるプロパティは以下にあります。

Windows サービスに必要な特権

wrapper.ntservice.required_privileges

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

このプロパティは、Wrapper を Windows サービスとしてインストールする場合、または既存のサービスを更新する場合に使用され、 サービスコンフィギュレーションに挿入される必要な特権のリストを指定します。 サービスコントロールマネージャー(SCM)はこのリストを使用して、サポートされている特権を判別し、該当する場合は、 サービスが起動されるたびにそれらの特権をサービスに割り当てます。 必要な特権リストに存在しないサービスアクセストークンの特権は、サービスコントロールマネージャーによって削除されます。 ただし、例外として、互換性の理由から削除されない 「SeChangeNotifyPrivilege」特権があります。

値「NONE」または空の値を使用すると、サービスに必要な特権を使用しないように指定できます。 必要な特権が指定されていない場合、サービスコントロールマネージャーは起動時にサービスのアクセストークンを変更せず、 デフォルトで割り当てられた特権、つまりサービスが属するユーザーとグループが保持する特権をそのまま残します。

デフォルト値は「default value is UNCHANGED」です。 サービスをインストールする場合、そのサービスに必要な特権は使用されないことを意味します。 サービスを更新すると、設定された必要な特権は更新されません。

注意

wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege」を使用すると、 サービス特権が最小限に制限されます。これにより、起動時に「SeChangeNotifyPrivilege」を除くすべての特権が削除されます。

プロパティは、それぞれ「Se」で始まり「Privilege」で終わる、特権名のカンマ区切りのリストで定義する必要があります。

設定例:
wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege, SeIncreaseWorkingSetPrivilege

whoami /priv」コマンドを使用すると、現在のユーザーの特権名を表示できます。

NT AUTHORITY\SYSTEM として実行されるコマンドプロンプトで、「whoami /priv」を実行すると、次の出力が返されます。
whoami /priv

PRIVILEGES INFORMATION
----------------------

特権名                                    説明                                                   状態
========================================= ====================================================== ====
SeAssignPrimaryTokenPrivilege             プロセス レベル トークンの置き換え                     無効
SeLockMemoryPrivilege                     メモリ内のページのロック                               有効
SeIncreaseQuotaPrivilege                  プロセスのメモリ クォータの増加                        無効
SeTcbPrivilege                            オペレーティング システムの一部として機能              有効
SeSecurityPrivilege                       監査とセキュリティ ログの管理                          無効
SeTakeOwnershipPrivilege                  ファイルとその他のオブジェクトの所有権の取得           無効
SeLoadDriverPrivilege                     デバイス ドライバーのロードとアンロード                無効
SeSystemProfilePrivilege                  システム パフォーマンスのプロファイル                  有効
SeSystemtimePrivilege                     システム時刻の変更                                     無効
SeProfileSingleProcessPrivilege           単一プロセスのプロファイル                             有効
SeIncreaseBasePriorityPrivilege           スケジューリング優先順位の繰り上げ                     有効
SeCreatePagefilePrivilege                 ページ ファイルの作成                                  有効
SeCreatePermanentPrivilege                永続的共有オブジェクトの作成                           有効
SeBackupPrivilege                         ファイルとディレクトリのバックアップ                   無効
SeRestorePrivilege                        ファイルとディレクトリの復元                           無効
SeShutdownPrivilege                       システムのシャットダウン                               無効
SeDebugPrivilege                          プログラムのデバッグ                                   有効
SeAuditPrivilege                          セキュリティ監査の生成                                 有効
SeSystemEnvironmentPrivilege              ファームウェア環境値の修正                             無効
SeChangeNotifyPrivilege                   走査チェックのバイパス                                 有効
SeUndockPrivilege                         ドッキング ステーションからコンピューターを削除        無効
SeManageVolumePrivilege                   ボリュームの保守タスクを実行                           無効
SeImpersonatePrivilege                    認証後にクライアントを偽装                             有効
SeCreateGlobalPrivilege                   グローバル オブジェクトの作成                          有効
SeIncreaseWorkingSetPrivilege             プロセス ワーキング セットの増加                       有効
SeTimeZonePrivilege                       タイム ゾーンの変更                                    有効
SeCreateSymbolicLinkPrivilege             シンボリック リンクの作成                              有効
SeDelegateSessionUserImpersonatePrivilege 同じセッションで別のユーザーの偽装トークンを取得します 有効

特権の完全なリスト(英語版)については、Microsoft MSDN ページを参照してください (「Privilege」で終わる定数のみ使用できます)。

Wrapper プロセス実行時の特権

次のプロパティは、Wrapper プロセスの特権を調整するために使用されます。 Wrapper プロセスのアクセストークンに存在する特権のみを調整できます。

デフォルトでは、アクセストークンには Wrapper を実行しているユーザーが保持する特権と、 このユーザーが属するグループの特権が含まれます。

Windows サービスの場合、必要な特権のリストを設定することで、デフォルトの特権を上書きできます。 特権が不足している場合は、「wrapper.ntservice.required_privileges」リストに追加して、 サービスを再インストールまたは更新することができます。 次回の起動時に、Wrapper のアクセストークンに特権が含まれるようになります。

これらのプロパティは最初のコンフィグレーションの読み込み時にのみ有効になり、コンフィギュレーションが再読み込みされた場合は無視されることに注意してください。

wrapper.privileges.enable プロパティ

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

このプロパティは、Wrapper がコンソールまたはサービスとして起動するときに有効にする特権のリストを 指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

設定例(「SeIncreaseWorkingSetPrivilege」 と「SeCreateGlobalPrivilege」特権を有効にする):
wrapper.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」を使用すると、Wrapper プロセスのアクセストークンに存在するすべての特権を有効にすることができます。

wrapper.privileges.enable=ALL」を「wrapper.privileges.disable」と組み合わせて使用??して、いくつかの特権を除くすべての特権を有効にすることもできます。

設定例(「SeIncreaseWorkingSetPrivilege」以外のすべての特権を有効にする):
wrapper.privileges.enable=ALL
wrapper.privileges.disable=SeIncreaseWorkingSetPrivilege

wrapper.privileges.disable プロパティ

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

このプロパティは、Wrapper がコンソールまたはサービスとして起動するときに無効にする特権のリストを 指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

設定例(「SeIncreaseWorkingSetPrivilege」と「SeCreateGlobalPrivilege」特権を無効にする):
wrapper.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」を使用すると、Wrapper プロセスのアクセストークンに存在するすべての特権を無効にすることができます。

wrapper.privileges.disable=ALL」 を「wrapper.privileges.enable」と組み合わせて使用??して、いくつかの特権を除くすべての特権を無効にすることもできます。

設定例(「SeIncreaseWorkingSetPrivilege」以外のすべての特権を無効にする):
wrapper.privileges.disable=ALL
wrapper.privileges.enable=SeIncreaseWorkingSetPrivilege

警告

  • 特権が[wrapper.privileges.enable]のリストと[wrapper.privileges.disable]の」リストの両方に存在する場合、警告がログに記録され、特権は無効になります (プロパティの 1 つが ALL に設定されている場合を除く)。

  • wrapper.privileges.enable=ALL]と[wrapper.privileges.disable=ALL]の両方を使用することは無効です。

wrapper.privileges.remove プロパティ

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

このプロパティは、Wrapper がコンソールまたはサービスとして起動したときに削除する特権のリストを指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

設定例(「SeIncreaseWorkingSetPrivilege」と「 SeCreateGlobalPrivilege」特権を削除する):
wrapper.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」を使用すると、Wrapper プロセスのアクセストークンに存在するすべての特権を削除にすることができます。

設定例(すべての特権を削除する):
wrapper.privileges.remove=ALL

警告

プロセスのアクセストークンから特権が削除されると、そのプロセスの存続期間中は特権を再度追加することはできません。 特権を削除すると、同じアクセストークンを共有するすべての子プロセス、または Wrapper のアクセストークンを 複製して起動される将来の子プロセスでも特権が使用できなくなります。

Wrapper が別のプロセスから起動され、両方のプロセスが同じアクセストークンを共有している場合、 Wrapper のアクセストークンを編集すると、親プロセスにも影響します。 ただし、最も一般的なシナリオであるコンソールまたは Windows サービスとして起動する場合は、 Windows が Wrapper プロセスに新しいトークンを割り当てるため、これは問題になりません。

注意

wrapper.privileges.remove]プロパティが実行時に 1 つ以上の特権を削除するために 使用できます。 ただし、通常は、[wrapper.ntservice.required_privileges]プロパティの値から特権を削除し、サービスを再インストールまたは更新する方が適切です。

wrapper.ntservice.impersonation プロパティ

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

このプロパティは、Wrapper プロセスとそのすべての子プロセス (Java アプリケーションプロセスを含む) の偽装を 削除するかどうかを設定します。

Windows サービスが開始すると、サービスコントロールマネージャーは、サービスで使用されるアカウントに SERVICE グループを自動的に追加します。 これは、組み込みアカウントやカスタムローカルアカウントなど、Windows サービスに使用できるほとんどのアカウントに当てはまります。 デフォルトでは、SERVICE グループには、「認証後にクライアントを偽装する」ユーザー特権である 「SeImpersonatePrivilege 」があります。この特権は互換性のために多くのシステムサービスで必要ですが、 ほとんどの Java アプリケーションでは実際には必要ありません。

SeImpersonatePrivilege」特権が悪意のあるコードによって悪用され、Windows システムで最高の 特権レベルを持つ LocalSystem アカウントに昇格される可能性があることは、セキュリティ上の既知の懸念事項です。 望ましくないコードの実行を許可する脆弱性によってプログラムが影響を受けないことを保証することはできません。 したがって、最も安全な方法は、必要のないときにこの特権を許可しないことです。

最小特権の原則に従い、NT AUTHORITY\SYSTEM 以外のアカウントで実行されているサービスについては、 Wrapper がこの特権をデフォルトで削除することになりました。 (SYSTEM アカウントで実行されている場合、Java プロセスは既に最高の特権を持っているため、それ以上のエスカレーションのリスクはありません。) これは Wrapper 3.5.58版以降のすべてのバージョンに適用されます。 「SeImpersonatePrivilege」特権を必要とするサービスのみで有効にする必要があります。

wrapper.ntservice.impersonation]プロパティでは、次の値が使用可能です。

  • 【 [UNCHANGED] 】

    Wrapper プロセスから「SeImpersonatePrivilege」特権を決して削除しないようにします。

  • 【 [DEFAULT] 】

    NT AUTHORITY\SYSTEM 以外のアカウントでサービスとして実行しているときに「SeImpersonatePrivilege」特権を削除します。

  • 【 [REMOVE] 】

    Wrapper プロセスから常に「SeImpersonatePrivilege」特権を削除します。

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

注意

サービスに必要な特権が指定されている場合、「SeImpersonatePrivilege」は削除されません。 これは「SeImpersonatePrivilege」が必要な特権のリストに存在しない場合、 サービスコントロールマネージャーによって削除されるためです。 プロフェッショナル版では、必要な特権を細かく設定できます。

プロフェッショナル版では、[wrapper.privileges.remove]プロパティで「SeImpersonatePrivilege」を指定して[wrapper.ntservice.impersonation]をオーバーライドすることもできます。

イベントコマンド (プロフェッショナル版)、Java アプリケーション、またはその子プロセスのいずれかに SeImpersonatePrivilege が必要な場合は、[wrapper.ntservice.impersonation]を「UNCHANGED」に設定する必要があります。 次に、プロフェッショナル版では、どのプロセスがこの特権を削除し、どのプロセスがこの特権を保持するかを微調整できます。

設定例:
# サービスの偽装を削除しない
wrapper.ntservice.impersonation=UNCHANGED

# Java プロセスの偽装を削除する
wrapper.java.privileges.remove=SeImpersonatePrivilege

# デフォルトですべてのイベントコマンドの偽装を削除する
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege

# 特定のコマンド 1 つに対してのみ「SeImpersonatePrivilege」を有効にする
wrapper.event.user1.command.argv.1=./myscript.bat
wrapper.event.user1.command.privileges.enable=SeImpersonatePrivilege

注意

wrapper.ntservice.impersonation」 は、プログラムが Windows サービスとして実行されている場合にのみ使用されます。 ただし、その他の特権プロパティについては、サービスとして実行しているか、コンソール アプリケーションとして実行しているかに応じて異なる設定を適用する必要がある場合は、パスが %WRAPPER_RUN_MODE% 変数を参照するインクルードファイルの使用を検討してください。

設定例 (サービスモードとコンソールモードの異なる設定):
#include ../conf/wrapper-privileges-%WRAPPER_RUN_MODE%.conf

Java プロセス実行時の特権

次のプロパティは、Java プロセスの特権を調整するために使用されます。 これらのプロパティのいずれかが設定されている場合、Wrapper プロセスのアクセストークンが複製され、 指定された特権がトークンのコピーで調整されます。 その後、この新しいトークンによって表されるセキュリティコンテキストで Java プロセスが起動されます。

Java プロセスのアクセストークン内に存在する (したがって、Wrapper プロセスのトークン内にも存在する) 特権のみを調整できます。

Java プロセスが起動される前に、特権のリストは 2 つのレベルで変更される可能性があることに留意してください。 必要な特権が指定されている場合に Windows サービスをインストールするとき、または Wrapper 起動時に 1 つ以上の特権が削除された場合です。

新しい JVM が起動するたびに、特権は再調整されます。 コンフィギュレーションファイルの再読み込みが許可されている場合は、これらのプロパティを変更して、次回の JVM 呼び出し時に異なる特権設定を使用できます。

wrapper.java.privileges.enable プロパティ

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

このプロパティは、Java プロセス起動時に有効にする特権のリストを指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

設定例(「SeIncreaseWorkingSetPrivilege「と」SeCreateGlobalPrivilege」を有効にする):
wrapper.java.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」の値を使用すると、Wrapper プロセスのアクセストークンに存在する すべての特権を有効にすることができます。

wrapper.java.privileges.enable=ALL]を[wrapper.java.privileges.disable]と組み合わせて使用すると、 いくつかの特権を除くすべての特権を有効にすることもできます。

設定例(「SeIncreaseWorkingSetPrivilege」除くすべての特権を無効にする):
wrapper.java.privileges.enable=ALL
wrapper.java.privileges.disable=SeIncreaseWorkingSetPrivilege

wrapper.java.privileges.disable プロパティ

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

このプロパティは、Java プロセス起動時に無効にする特権のリストを指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

設定例「SeIncreaseWorkingSetPrivileg」と「SeCreateGlobalPrivilege」特権を無効にする):
wrapper.java.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」の値を使用すると、Wrapper プロセスのアクセストークンに存在する すべての特権を無効にすることができます。

wrapper.java.privileges.disable=ALL]を[wrapper.java.privileges.enable ]と組み合わせて使用すると、 いくつかの特権を除くすべての特権を無効にすることもできます。

設定例(SeIncreaseWorkingSetPrivilege」特権を除くすべての特権を無効にする):
wrapper.java.privileges.disable=ALL
wrapper.java.privileges.enable=SeIncreaseWorkingSetPrivilege

警告

  • もし、1つの特権が[wrapper.java.privileges.enable]と[wrapper.java.privileges.disable]の両方のリストに存在する場合、 警告がログに記録され、特権は無効になります (プロパティの 1 つが「ALL」に設定されている場合を除く)。

  • wrapper.java.privileges.enable=ALL]と[wrapper.java.privileges.disable=ALL]を両方使用することは無効です。

wrapper.java.privileges.remove プロパティ

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

このプロパティは、Java プロセス起動時に削除する特権のリストを指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

設定例(「SeIncreaseWorkingSetPrivilege」と「SeCreateGlobalPrivilege」を削除する):
wrapper.java.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」の値を使用すると、Wrapper プロセスのアクセストークンに存在する すべての特権を削除することができます。

設定例(すべての特権を削除する):
wrapper.java.privileges.remove=ALL

警告

プロセスのアクセストークンから特権が削除されると、そのプロセスの存続期間中は特権を再度追加することはできません。 特権を削除すると、Java によって起動されたすべての子プロセスでも特権が使用できなくなります。

注意

wrapper.privileges.remove]は、Wrapper プロセスよりも低い特権で Java プロセスを 実行するために使用できます。

イベントコマンド実行時の特権

次のプロパティは、特定のイベントに応じて起動されるコマンドの特権を調整するために使用されます。 これらのプロパティのいずれかが設定されている場合、Wrapper プロセスのアクセストークンが複製され、 指定された特権がトークンのコピーで調整されます。 その後、この新しいトークンによって表されるセキュリティコンテキストでイベントコマンドが起動されます。

イベントコマンドのアクセストークン内に存在する (したがって、Wrapper プロセスのトークン内にも存在する) 特権のみを調整できます。

イベントコマンドが起動される前に、特権のリストは 2 つのレベルで変更される可能性があることに留意してください。 必要な特権が指定されている場合に Windows サービスをインストールするとき、または Wrapper 起動時に 1 つ以上の特権が削除された場合です。

注意

プロセスが起動されるときに異なるレベルで特権を制御できるため、次のような構成が可能になります。 イベントコマンドの特定の特権を有効にするには、その特権が Wrapper プロセスにも存在している必要があります。 ただし、Java プロセスはこの特権を完全に削除できるため、Java アプリケーションやその子プロセスによって この特権が使用されないようにすることができます。

設定例:
# 次の特権でサービスをインストールする
wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege, SeImpersonatePrivilege, SeIncreaseWorkingSetPrivilege

# Wrapper 自体には必要ないので、「SeImpersonatePrivilege」特権を無効にする
# (ただし、イベントコマンドで引き続き有効にできるように、アクセストークンに保持します)
wrapper.privileges.disable=SeImpersonatePrivilege

# remove Java アプリケーションとそのすべての子プロセスの「SeImpersonatePrivilege」を削除する 
wrapper.java.privileges.remove=SeImpersonatePrivilege

# デフォルトでは、すべてのイベントコマンドの「SeImpersonatePrivilege」も削除する
by default, also remove SeImpersonatePrivilege to all event commands
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege

# 特定のイベントコマンドの上記のデフォルトプロパティを上書きする
wrapper.event.user1.command.privileges.remove=NONE

# 特定のイベントコマンドに対して「SeImpersonatePrivilege」を有効にする
wrapper.event.user1.command.privileges.enable=SeImpersonatePrivilege

wrapper.event.<event_name>.command.privileges.enable プロパティ

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

このプロパティは、イベントコマンド起動時に有効にする特権のリストを指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

いくつかのイベントコマンド プロパティと同様に、次のように定義できます。

  • すべてのイベントに対してグローバル:[wrapper.event.default.command.privileges.enable]プロパティ、または、
  • 特定のイベントに対して:[wrapper.event.<event_name>.command.privileges.enable]プロパティ。

設定例(「SeIncreaseWorkingSetPrivilege」と「SeCreateGlobalPrivilege」特権を有効にする):
wrapper.event.user1.command.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」の値を使用すると、Wrapper プロセスのアクセストークンに存在する すべての特権を有効にすることができます。

wrapper.event.<event_name>.command.privileges.enable=ALL]を[wrapper.event.<event_name>.command.privileges.disable]と組み合わせて使用すると、 いくつかの特権を除くすべての特権を有効にすることもできます。

設定例(「SeIncreaseWorkingSetPrivilege」特権以外のすべての特権を有効にする):
wrapper.event.user1.command.privileges.enable=ALL
wrapper.event.user1.command.privileges.disable=SeIncreaseWorkingSetPrivilege

デフォルト値「NONE」は、[wrapper.event.<event_name>.command.privileges.enable]が [wrapper.event.default.command.privileges.enable]の値を上書きするのに役立ちます。

設定例( 「SeTimeZonePrivilege」を user1 イベントを除くすべてのイベントのコマンドに対して有効にする):
wrapper.event.default.command.privileges.enable=SeTimeZonePrivilege
wrapper.event.user1.command.privileges.enable=NONE

wrapper.event.<event_name>.command.privileges.disable プロパティ

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

このプロパティは、Wrapper がコンソールアプリケーション、またはサービスとして起動する時に有効にする特権のリストを指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

いくつかのイベントコマンド プロパティと同様に、次のように定義できます。

  • すべてのイベントに対してグローバル:[wrapper.event.default.command.privileges.disable]プロパティ、または、
  • 特定のイベントに対して:[wrapper.event.<event_name>.command.privileges.disable]プロパティ。

設定例(「SeIncreaseWorkingSetPrivilege」と「SeCreateGlobalPrivilege」を無効にする):
wrapper.event.user1.command.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」の値を使用すると、Wrapper プロセスのアクセストークンに存在する すべての特権を無効にすることができます。

wrapper.event.<event_name>.command.privileges.disable=ALL]を[wrapper.event.<event_name>.command.privileges.enable]と組み合わせて使用すると、 いくつかの特権を除くすべての特権を無効にすることもできます。

設定例(「SeIncreaseWorkingSetPrivilege」以外の特権をすべて無効にする):
wrapper.event.user1.command.privileges.disable=ALL
wrapper.event.user1.command.privileges.enable=SeIncreaseWorkingSetPrivilege

デフォルト値「NONE」は、[wrapper.event.<event_name>.command.privileges.disable]が [wrapper.event.default.command.privileges.disable]の値を上書きするのに役立ちます。

設定例(「SeImpersonatePrivilege」特権を user1 イベントを除くすべてのイベントのコマンドに対して無効にする):
wrapper.event.default.command.privileges.disable=SeImpersonatePrivilege
wrapper.event.user1.command.privileges.disable=NONE

警告

  • もし、1つの特権が[wrapper.event.<event_name>.command.privileges.enable]と[wrapper.event.<event_name>.command.privileges.disable]の両方のリストに存在する場合、 警告がログに記録され、特権は無効になります (プロパティの 1 つが「ALL」に設定されている場合を除く)。

  • wrapper.event.<event_name>.command.privileges.enable=ALL]と[wrapper.event.<event_name>.command.privileges.disable=ALL]を両方使用することは無効です。

wrapper.event.<event_name>.command.privileges.remove プロパティ

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

このプロパティは、Wrapper がコンソールアプリケーション、またはサービスとして起動する時に削除する特権のリストを指定するために使用されます。 リストされる特権は、カンマで区切る必要があります。

いくつかのイベントコマンド プロパティと同様に、次のように定義できます。

  • すべてのイベントに対してグローバル:[wrapper.event.default.command.privileges.remove]プロパティ、または、
  • 特定のイベントに対して:[wrapper.event.<event_name>.command.privileges.remove]プロパティ。

設定例(「SeIncreaseWorkingSetPrivilege」と「SeCreateGlobalPrivilege」特権を削除する):
wrapper.event.user1.command.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

プロパティ値「ALL」の値を使用すると、Wrapper プロセスのアクセストークンに存在する すべての特権を削除することができます。

設定例(すべての特権と削除する):
wrapper.event.user1.command.privileges.remove=ALL

デフォルト値「NONE」は、[wrapper.event.<event_name>.command.privileges.remove]が [wrapper.event.default.command.privileges.remove]の値を上書きするのに役立ちます。

設定例(SeImpersonatePrivilege を、user1 イベントを除く、すべてのイベントのコマンドから削除する):
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege
wrapper.event.user1.command.privileges.remove=NONE

警告

プロセスのアクセストークンから特権が削除されると、そのプロセスの存続期間中は特権を 再度追加することはできません。 特権を削除すると、同じアクセストークンを共有するすべての子プロセス、または Wrapper の アクセストークンを複製して起動される将来の子プロセスでも特権が使用できなくなります。

注意

wrapper.event.<event_name>.command.privileges.remove]プロパティは、実行時に 1 つ以上の特権を削除するために使用できます。 ただし、通常は[wrapper.ntservice.required_privileges]プロパティ値から特権を 削除してからサービスを再インストールまたは更新する方が適切です。

ログ記録

wrapper.privileges.status.loglevel プロパティ

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

このプロパティでは、特権に関する情報が Wrapper ログに出力されるログレベルを設定します。

ログレベルを変更すると、特権がどのように変更されるかを視覚化できるため、 デバッグに役立ちます。 プロセスごとに、有効な特権のリストとそのステータスも出力されます。

デフォルト値は「NONE」で、ログに何の情報も出力されません。 運用環境では、特権ステータスに関する情報がログに残らないように、「NONE」を使用することをお勧めします。

設定例(特権ステータスのログレベル変更):
wrapper.privileges.status.loglevel=STATUS

ログ出力は以下のようになります。

出力例(Java プロセス特権ステータス):
...
STATUS | wrapper  | JVM 起動中…
STATUS | wrapper  | Java プロセス: 「SeUndockPrivilege」特権は、DISABLED から ENABLED に変更されました。
STATUS | wrapper  | Java プロセス: 「SeTimeZonePrivilege」特権は削除されました。
STATUS | wrapper  | Java プロセス: 有効な特権:
STATUS | wrapper  | Java プロセス:   SeShutdownPrivilege (無効)
STATUS | wrapper  | Java プロセス:   SeUndockPrivilege (有効)
STATUS | wrapper  | Java プロセス:   SeIncreaseWorkingSetPrivilege (無効)
...

Windows サービスの特権を照会する

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

Windows サービスに必要な特権、および Wrapper プロセスとその子プロセスの実行時特権を、1つのコマンド「.\wrapper.exe -qr ../conf/wrapper.conf」で照会することができます。

設定例:
wrapper.ntservice.required_privileges=SeIncreaseWorkingSetPrivilege, SeUndockPrivilege, SeImpersonatePrivilege

wrapper.event.jvm_prelaunch.command.privileges.disable=ALL
wrapper.event.jvm_prelaunch.command.privileges.remove=SeIncreaseWorkingSetPrivilege

wrapper.java.privileges.enable=SeUndockPrivilege, SeTimeZonePrivilege
wrapper.java.privileges.remove=SeImpersonatePrivilege

出力例:
.\wrapper.exe -qr ..\conf\wrapper.conf
STATUS | wrapperm | 「testwrapper3」サービスに必要な特権:
STATUS | wrapperm |   SeChangeNotifyPrivilege (デフォルト、有効)
STATUS | wrapperm |   SeIncreaseWorkingSetPrivilege (無効)
STATUS | wrapperm |   SeUndockPrivilege (無効)
STATUS | wrapperm |   SeImpersonatePrivilege (デフォルト、有効)
STATUS | wrapperm |
STATUS | wrapperm | 子プロセス:
STATUS | wrapperm |   myscript.bat: 有効な特権:
STATUS | wrapperm |   myscript.bat:   SeChangeNotifyPrivilege (無効)
STATUS | wrapperm |   myscript.bat:   SeUndockPrivilege (無効)
STATUS | wrapperm |   myscript.bat:   SeImpersonatePrivilege (無効)
STATUS | wrapperm |
STATUS | wrapperm |   java.exe: 有効な特権:
STATUS | wrapperm |   java.exe:   SeChangeNotifyPrivilege (デフォルト、有効)
STATUS | wrapperm |   java.exe:   SeUndockPrivilege (有効)
STATUS | wrapperm |   java.exe:   SeIncreaseWorkingSetPrivilege (無効)


-qr オプションに「=」とサービス名(-qr=サービス名)を追加することで、 別のサービスの特権を照会することもできます。

サービス名を使用して特権を照会する:
.\wrapper.exe -qr=myservice ../conf/wrapper-license.conf