So-net無料ブログ作成
検索選択

【Tips】Windowsのサービスを一般(AdminやPowerGroup以外)ユーザで起動できるようにする。 [備簿録]

 会社などでは開発者や運用担当者からAdministrator権限をとられるケースも多く見受けられるようになったが、仕事でとあるWindowsサービスの起動/停止の権限を一般ユーザ(認証済みユーザ-Authenticated User)に対して付与する方法を調べたのでメモとして残しておく。

 Administrator権限やPowerUser権限を持たない一般ユーザが、Windowsサービス画面(services.msc)でサービス対して起動や停止の操作を要求すると「起動だけできる」や「起動/停止のどちらもできない」サービスが存在することに気づくだろう。
 これは一般ユーザの権限が制限されているためで、「エラー5 - アクセスが拒否されました」と表示された場合はこれに該当する。
 しかし一般ユーザに対して、サービスの起動や停止を行わせたい場合はよくあることなので、以下に対処法を記載しておく。

対象OS
 Windows Server 2003(それ以外のバージョンは調べてないがscコマンドが入っていれば、おそらく同じ方法で操作可能だと思われる。

押さえておきたいところ
 アクセス拒否されているのは、サービス起動の為に登録されているユーザではなく、ログインしている操作対象者であるということ。また、この設定を行うためにはAdministratorsグループに所属するひとが行う必要があることは覚えておいてほしい。

利用コマンド
 sc.exe

やるべきこと
1.対象のサービスのサービス名を知る。
 まず、sc queryコマンドを利用してサービスの一覧を見ることができるが、今回の作業に必要な情報は限られるので、findstrコマンドを利用して表示内容を絞り込んで表示する。

C:\>sc query|findstr _NAME
SERVICE_NAME: AcPrfMgrSvc
DISPLAY_NAME: AcPrfMgrSvc
SERVICE_NAME: AcSvc
DISPLAY_NAME: AcSvc
SERVICE_NAME: AeLookupSvc
DISPLAY_NAME: Application Experience
SERVICE_NAME: Appinfo
DISPLAY_NAME: Application Information




 ずらずらSERVICE_NAMEとDISPLAY_NAMEの2つが交互に表示されるが1つのサービスについて2行づつ表示されていて、「DISPLAY_NAME」は Windowsサービスの画面で表示される表示名、「SERVICE_NAME」が今回サービスを指定する際に利用する名前だ。DISPLAY_NAMEとSERVICE_NAMEは同じ場合もあるが異なる場合もあるので注意が必要だ。

 ここで対象のサービスの名前が出てこない場合は、"sc query state= all" を利用することで停止中のサービスも表示することができる。scコマンドにはその他多数のオプションもあるので詳細は sc コマンドのヘルプを見て欲しい。

サービス名を特定出来たら "sc query <サービス名>"で間違いがないか確認する。

2.対象サービスのセキュリティ記述子を表示する。
 セキュリティ記述子とは対象のサービスに対して、だれがどういったことを行えるかを(何故か?)人間に読みにくい形で文字列表示する機能で、"sc sdshow <サービス名>"で見ることができる。内容の詳細についてはマイクロソフトのサポート(サービスのアクセス制御)を参考にしてほしいが、この内容を変更することで一般ユーザに対して起動/停止の権限を与えることができる。

 ここでは試しに、「Application Information」サービスのセキュリティ記述子を表示してみる。

C:\>sc sdshow Appinfo
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)....<中略>....(A;;CR;;;AU)


 表示結果の1つの小カッコがユーザもしくはグループ毎の設定を表していて、右かっこの直前の2文字が誰(もしくはどのグループ)を表している。
今回は認証済みユーザ-Authenticated Userに対する権限を変更するので最後の「(A;;CR;;;AU)」この部分を変更することになる。

3.対象サービスのセキュリティ記述子を変更する。
 サービスのセキュリティ記述子の変更は"sc sdset <サービス名> <セキュリティ記述子>"コマンドを利用して変更することができる。まず、2で表示したセキュリティ記述子をいったんすべてTextエディターにコピーし、必要な部分を修正もしくは追加して新しいセキュリティ記述子を作成する。

AU(Authentication User)に対してサービスの起動(RP)、停止(WP)権限を付与する。
C:\>sc sdset Appinfo D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)....<中略 sc sdshowの表示内容と同じ>....(A;;RPWPCR;;;AU)
[SC] SetServiceObjectSecurity SUCCESS

 sdshowで表示された文字列との違いは最後のAUに関するセキュリティ記述子のみだ。
変更前:(A;;CR;;;AU)
変更後:(A;;RPWPCR;;;AU)


 これで一般ユーザでログインしなおしても「Application Information」の起動と停止は行えるはずである。

 お試しあれ!

参考Webサイト
  マイクロソフトのサポート(サービスのアクセス制御)
  @iITの掲示板(最後までよく読むことをお勧め)


Simple is best.
--
butineko

nice!(0)  コメント(3)  トラックバック(0) 
共通テーマ:仕事

nice! 0

コメント 3

コメントの受付は締め切りました
ストム

正に知りたいことが全部載ってました
おかげで助かりました
ありがとうございます!
by ストム (2010-06-01 14:22) 

butineko

 このページの内容を調べるのには私も少し苦労したので、こういうページは自分の備簿録として書いておいたのですが、ストムさんにはお役に立ったようでよかったよかった。せっかく書いたんだから他の人にも役に立ってほしいですからね。
 個人的な趣味Blogですが、よかったらまた遊びに来てくださいね。

Simple is best!
--
butineko
by butineko (2010-06-01 19:16) 

青年海外協力隊

一般ユーザでサービスを起動する方法でぐぐったらたどりつきました。
大変有益な情報をありがとうございます。
by 青年海外協力隊 (2012-10-24 14:44) 

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。
メッセージを送る
RSS RSS

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。