サーバーでローカルユーザーとして実行されているアプリケーションを作成しようとしています。サービスを列挙し、場合によってはサービスを制御(開始/停止)するためにアクセスする必要があります。
only管理者グループの一部であるため、このユーザーはこの機能にアクセスできます( ServiceController クラス)?もっと簡単に言えば、サービスのリストを列挙できるだけでも大丈夫です(インタラクティブな開始/停止はショーストッパーではありません)。ユーザーをパワーユーザーのグループ作業に追加しますか?
ありがとう!
Power Usersグループが答えになることはありません。それは古い遺産です。存在しないと考えてください。
個々のWindowsサービスにアクセス許可をきめ細かく設定したい場合は可能ですが、ファイルにアクセス許可を設定するほど簡単で直感的ではありません。
Windowsサービスの現在の権限を表示するには:
C:\Users\Ryan>sc sdshow netlogon
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR
RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)
たとえば、管理者以外のユーザーが特定のサービスを開始および停止できるように、単一のWindowsサービスに権限を設定するには:
sc sdset netlogon "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
[SC] SetServiceObjectSecurity SUCCESS
ひどいですね。そのgooはSDDL-Security Descriptor Definition Languageと呼ばれています。
この記事 は、SDDLを解釈し、実行しようとしていることを行う方法についてのかなり優れた入門書です。
セキュリティテンプレートとグループポリシーを使用して、同じことを実行することもできます。
同じことを行うためのもう1つの使いやすいオプションは、Windows 2003リソースキットに含まれているsubinaclコマンドラインツールです。トリックの素敵な小さなバッグです。
サービスにユーザー権限を設定する構文は次のとおりです。
SUBINACL /SERVICE \\MachineName\ServiceName /GRANT=[DomainName\]UserName[=Access]
利用可能なアクセスオプションは次のとおりです。
F : Full Control
R : Generic Read
W : Generic Write
X : Generic eXecute
L : Read controL
Q : Query Service Configuration
S : Query Service Status
E : Enumerate Dependent Services
C : Service Change Configuration
T : Start Service
O : Stop Service
P : Pause/Continue Service
I : Interrogate Service
U : Service User-Defined Control Commands
したがって、グループDOMAIN\GroupNameのメンバーにサービス「ServiceName」を開始および停止する権限を与えるには、次のようにします。
subinacl /service ServiceName /GRANT=DOMAIN\GroupName=TO
サービス「ServiceName」に設定された権限を表示するには(上記を実行する前と後)、次のようにします。
subinacl.exe /service /verbose=1 ServiceName
以下は、subinaclを使用してサービスのアクセス許可を設定するための公式HOWTOです。 http://support.Microsoft.com/kb/288129
そして、これがsubinaclダウンロードリンクです: http://www.Microsoft.com/en-us/download/details.aspx?id=2351
サービスを列挙するには、プロセスにはSC_MANAGER_ENUMERATE_SERVICE
権限が必要です。昔は、認証されたすべてのユーザーにこの権限がありましたが、Vista以降はそうではありません。
インタラクティブユーザーはそれを持っているので、通常のユーザーはnet start
またはGet-Service
を実行できます
プロセスがサービスを列挙できるように、サービスコントロールマネージャーのアクセス許可を変更できます。また、アクセスするサービスの権限を変更する必要もあります。
これを行う方法について ブログ投稿 を書いたところ、ローカルマシン上のすべてのサービスに対してこれを行うためのPowerShellスクリプトが含まれています。
それはすべて、プロセスのクエリに使用している言語に依存しますが、必要なユーザーロールは、ターゲットマシンでコードが必要とする一連の特権によって決まります。これらの権限の一部は通常のユーザーアカウントに関連付けられていますが、その他の権限には管理者の役割が必要です。