Windowsで、特定のユーザーに特定のサービスの再起動を許可する
Follow @venividivici830
Windowsで、ユーザーごとに、サービスレベルで操作権限(サービスの開始、停止など)を与える話です。
流れとしては、scコマンドで、サービスの随意アクセス制御リスト (DACL) に対し、セキュリティ記述子定義言語 (SDDL) 構文で、アクセス制御情報を追加することになります。
これにより、あるユーザーはOracleの再起動だけ許可、あるユーザーはTomcatの再起動だけ許可、など、細かい権限設定が可能です。
サーバーのマシン自体の再起動権限は与えられないけど、アプリケーションサーバープログラムや、DBサーバープログラムの再起動だけは許可したい、などのシチュエーションに使えます。
サービスのDACLは、名の通り、サービス単位で権限を制御するためのACLです。
SDDLは、ACLを文字列で記述するための構文です。
「;」で各フィールドを区切る形です。詳細については、こちら。に公式ドキュメントg
サービスの操作権限をユーザーレベルで制御するには、最低限、下記のように3つのフィールドを設定すれば良いようです。
(許可 (A)/拒否 (D);;アクセス許可の文字列;;;SID)
;;や;;;って何だよ、と最初見た時思いましたが、フィールドが空で、デリミター(;)だけが並んでいるだけですね。
許可 (A)/拒否 (D)には、サービスに対する特定の操作を許可する場合はA、拒否する場合はDを設定します。
(許可または拒否する)サービスに対する特定の操作は、アクセス許可の文字列で設定します。
このページに、アクセス許可の文字列に設定できる値が一覧されています。
再起動の場合は、RP(Start)とWP(Stop)の操作を許可すれば良いので、RPWPを指定すれば良いです。
SIDは、ユーザーオブジェクトに固有のIDで、要はユーザーのIDです。権限を付与したいユーザーのSIDを指定します。
権限を付与したいユーザーで、コマンドプロンプトからwhoamiコマンドをuserオプション付きで実行することにより、SIDを取得できます。
> whoami /user
WIndowsにもwhoamiコマンドがあったんですね。知らなかった。
まとめると、特定のユーザーに再起動権限を許可する場合は、下記のようになります。
(A;;RPWP;;;SID)
※SIDには、 「whoami /user」コマンドで得られた、S-N-N-N-NNNNNNNNN-NNNNNNNNNN-NNNNNNNNNN-NNN のような文字列を指定(Nは、0〜9までの数字)
上の文字列を、scコマンドで指定します。
<既存のアクセス許可>を指定しないと、既存の権限が上書きされて消されてしまいます。
なので、予め下記のコマンドで<既存のアクセス許可>を調べ、書き留めておきます。
sc sdshow "サービス名"
サービス名には、その名の通り、サービス名を指定します。
タスクマネージャーのサービスの「名前」の部分の名前です。
SIDは、上述の通り、権限を付与したいユーザーのSIDです。
これで、特定のユーザーに、特定のサービスの、特定の操作を、許可することができます。
これで、このユーザーはOracleの再起動だけ許可、このユーザーはTomcatの再起動だけ許可、など、細かい権限設定が可能になります。
Windowsで、ユーザーごとに、サービスレベルで操作権限(サービスの開始、停止など)を与える話です。
流れとしては、scコマンドで、サービスの随意アクセス制御リスト (DACL) に対し、セキュリティ記述子定義言語 (SDDL) 構文で、アクセス制御情報を追加することになります。
これにより、あるユーザーはOracleの再起動だけ許可、あるユーザーはTomcatの再起動だけ許可、など、細かい権限設定が可能です。
サーバーのマシン自体の再起動権限は与えられないけど、アプリケーションサーバープログラムや、DBサーバープログラムの再起動だけは許可したい、などのシチュエーションに使えます。
サービスのDACLは、名の通り、サービス単位で権限を制御するためのACLです。
SDDLは、ACLを文字列で記述するための構文です。
「;」で各フィールドを区切る形です。詳細については、こちら。に公式ドキュメントg
サービスの操作権限をユーザーレベルで制御するには、最低限、下記のように3つのフィールドを設定すれば良いようです。
(許可 (A)/拒否 (D);;アクセス許可の文字列;;;SID)
;;や;;;って何だよ、と最初見た時思いましたが、フィールドが空で、デリミター(;)だけが並んでいるだけですね。
許可 (A)/拒否 (D)には、サービスに対する特定の操作を許可する場合はA、拒否する場合はDを設定します。
(許可または拒否する)サービスに対する特定の操作は、アクセス許可の文字列で設定します。
このページに、アクセス許可の文字列に設定できる値が一覧されています。
再起動の場合は、RP(Start)とWP(Stop)の操作を許可すれば良いので、RPWPを指定すれば良いです。
SIDは、ユーザーオブジェクトに固有のIDで、要はユーザーのIDです。権限を付与したいユーザーのSIDを指定します。
権限を付与したいユーザーで、コマンドプロンプトからwhoamiコマンドをuserオプション付きで実行することにより、SIDを取得できます。
> whoami /user
WIndowsにもwhoamiコマンドがあったんですね。知らなかった。
まとめると、特定のユーザーに再起動権限を許可する場合は、下記のようになります。
(A;;RPWP;;;SID)
※SIDには、 「whoami /user」コマンドで得られた、S-N-N-N-NNNNNNNNN-NNNNNNNNNN-NNNNNNNNNN-NNN のような文字列を指定(Nは、0〜9までの数字)
上の文字列を、scコマンドで指定します。
実際のコマンドは、下記のようになります。
sc sdset "サービス名" D:(A;;RPWP;;;SID)<既存のアクセス許可><既存のアクセス許可>を指定しないと、既存の権限が上書きされて消されてしまいます。
なので、予め下記のコマンドで<既存のアクセス許可>を調べ、書き留めておきます。
sc sdshow "サービス名"
サービス名には、その名の通り、サービス名を指定します。
タスクマネージャーのサービスの「名前」の部分の名前です。
SIDは、上述の通り、権限を付与したいユーザーのSIDです。
これで、特定のユーザーに、特定のサービスの、特定の操作を、許可することができます。
これで、このユーザーはOracleの再起動だけ許可、このユーザーはTomcatの再起動だけ許可、など、細かい権限設定が可能になります。
コメント
コメントを投稿