ドメインメンバー以外のサーバー上の任意のユーザーまたはグループにサービスの開始/停止/再起動のアクセス許可を付与するにはどうすればよいですか?


61

サーバー上で実行されている一連のWindowsサービスは、他のサービスを管理する1つのサービスを除いて、互いに独立した一連の自動化されたタスクを実行します。

サービスの1つが応答またはハングに失敗した場合、このサービスはサービスの再起動を試み、試行中に例外がスローされた場合、代わりにサポートチームにメールを送信して、サービスを自分で再起動できるようにします。

少し調べてみると、KB907460に記載されている回避策から、サービスが管理者権限を実行しているアカウントを与えるまで、いくつかの「解決策」に出会いました。

これらの方法のいずれにも慣れていません-Microsoftのナレッジベースの記事に記載されている最初の方法の結果を理解していませんが、サービスが実行されているアカウントへの管理者アクセスを絶対に与えたくありません。

ローカルセキュリティポリシーをざっと見てみましたが、アカウントがサービスとしてログオンできるかどうかを定義するポリシー以外は、サービスを参照しているように見えるものは他にありません。

これをServer 2003とServer 2008で実行しているので、アイデアや指針は喜んで受け取られます!


明確化:特定のユーザーまたはグループにすべてのサービスを開始/停止/再起動する権限を付与したくありません-特定のユーザーまたはグループに特定のサービスのみでこれを実行する権限を付与できるようにします。


さらなる明確化:これらのアクセス許可を付与する必要があるサーバーはドメインに属していません-それらはファイルを受信し、それらを処理し、サードパーティに送信する2つのインターネット接続サーバーであり、いくつかのWebサイトを提供しています。 Active Directoryグループポリシーは使用できません。申し訳ありませんが、私はこれを明確にしませんでした。


:あなたはまた、修正GPを指して、MSからこの記事を見てみるかもしれませんsupport.microsoft.com/kb/256345

3
ごめんなさい。私はあなたがいなくて寂しかったです。あなたはこのような何かを探していました:serverfault.com/questions/15147/...
エヴァンアンダーソン

これは非常に古い質問ですが、Windowsサービスマネージャーで「回復」オプションの使用を検討しましたか?
ティムロング

回答:


51

ドメインに参加していない限り、これを行うGUIベースの方法はないようです-少なくともどこにも見つからないので-私はもう少し掘り下げて、有効な答えを見つけました私たちのシトーション。

ナレッジベースの記事では文字列表現の意味がわかりませんでしたが、少し掘り下げてみると、SDDL構文であることがわかりました。さらに掘り下げて、Alun Jonesによるこの記事に至りました。この記事では、サービスのセキュリティ記述子を取得する方法と各ビットの意味を説明しています。MS KB914392に詳細があります。

サービスの既存のセキュリティ記述子に追加するには、を使用sc sdshow "Service Name"して既存の記述子を取得します。これが単純な古い.NET Windowsサービスである場合(私たちの場合のように)、セキュリティ記述子は次のようになります。

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

RP(サービスを開始する)、WP(サービスを停止する)、DT(サービスを一時停止/継続する)、およびLO(サービスの現在のステータスを照会する)パーミッションを付与する必要がありました。これは、サービスアカウントをPower Usersグループに追加することで実行できますが、メンテナンスサービスを実行するアカウントへの個別のアクセスのみを許可したいです。

runasサービスアカウントでコマンドプロンプトを開くために使用して、サービスアカウントwhoami /allのSIDを取得して実行し、以下の追加のSDDLを作成しました。

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

これは、上記のSDDL文字列のD:セクションに追加されます。

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

これは、sc sdset次のコマンドを使用してサービスに適用されます。

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

すべてが計画通りに進んだ場合、サービスを開始、停止、一時停止し、上記のSIDで定義されたユーザーがサービスのステータスを照会できます。


10
同じことをより簡単に行う方法については、SetACL.exeの使用を検討する必要があります。ここでのサービスにアクセス許可を設定するためにそれを使用する方法の例です:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
メイソンG. Zhwiti

2
GUIにProcess Hacker(processhacker.sourceforge.net)を使用して、すべてのサービスを構成できます。非表示のサービスが含まれており、バイナリパスなどのサービスの設定や権限を構成できます。
イゴー

1
CoreTech guiは私のために働いた。GUIが既にWindowsに存在しないとは信じられません。ここで答えを読むと、どうしてこんなに難しいのでしょうか?マイクロソフトに代わって大きな失敗。
-MikeKulls

CCLCSW(RPWPDTLOに加えて)SDDLアクセス許可に追加して、Get-Serviceの実行時にリストされたサービスも表示できるようにします(アクセス可能なサービスを一覧表示するには、scmanagerサービスコントロールマネージャーサービスのSDDLを最初に変更する必要があります) 。SW特定のサービスを再起動できるようにする必要もありました。
バオダー

34

私はちょうど同じ問題を抱えていました。リソースキットのSubInACL.exe
使用できます。ここからスタンドアロンユーティリティをダウンロードします:http : //www.microsoft.com/download/en/details.aspx?displaylang= en&id =23510

msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo.msiをインストールしたくない場合は、ファイルの抽出に使用します

  1. 管理者としてコマンドプロンプトを開きます
  2. .exeを配置したディレクトリに移動します
  3. 走る subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T =サービスの開始
O =サービスの
停止P =サービスの一時停止/継続

完全なリファレンス:ユーザーにWindows 2000
またはタイプのサービスを管理する権限を付与する方法subinacl /help

注:subinacl /service SERVICE_NAME /perm問題が発生する可能性があるため、試さないでください(教訓:P)。名前は、すべてのユーザー(Admin!を含む)へのすべてのアクセス許可を削除するため、誤解を招く可能性があります(perm!=アクセス許可)。


SOアカウントとSFアカウントを統合できません。ごめんなさいPat。
チョッパー3

@ Chopper3お返事ありがとうございます。実際、2つのSOアカウントがあります。1つが登録され、このSFアカウントに関連付けられています。もう1つは、登録する前に持っていた未登録の SOアカウントです(同じメールアドレスを使用)。以前に行った投稿を追跡できるように、この2つがマージされることを望んでいました。ここで述べたように、私は投稿にフラグを立てようとしましたが、SO(1評価)でそれを行うことができませんでした。これがこの投稿にフラグを立てた理由です。また、2週間以上前にteam@stackoverflow.comにメールを送信しようとしましたが、応答がありませんでした。正しい場所/人に案内してくれますか?
patrx

1
MSDNでこの手順の詳細を確認してください
kbid=288129

4

お探しのコンピューターの構成-ポリシー-Windowsの設定-セキュリティの設定-システムサービス

そこでは、サービスの開始タイプを定義できるだけでなく、各サービスのセキュリティACLも設定できます。既定では、インターフェイスには、GPエディターを実行しているコンピューターにインストールされているサービスのみが一覧表示されます。

別のマシンにのみ存在するサービスを追加するには:

  • 他のマシンからサービスのregキーをエクスポートします
  • gpeditマシンでインポートする
  • ポリシーを適用する
  • インポートされたキーを削除する

gpedit.msc「サーバーの管理」ウィンドウにはポリシーノードがリストされていないため、これを行うことを意味すると信じています。もしそうなら、私はどちらかServer 2008またはServer 2003上で、あなたは上記の提案として「システムサービス」を参照してセキュリティの設定]ノードの下の項目を見ることができない
abitgone

ああ、はい。グループポリシーを介してこれらの変更を行うことを計画していると仮定しました。
ライアンボルガー

1
確かに-これらはメンバーサーバーではありません。ローカルポリシーまたは他の方法を使用してこれをターゲットにする方法はありますか?
アビットゴーン

2

私はSubinAcl(patrxが示唆するように)を使用して、MySQLを通常のドメインユーザー(管理者ではない)として起動できるようにしました。(ただし、コマンドは-local少なくともAdminとして実行する必要があります)

コマンドは次のとおりです。

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

ドメインをプレフィックスとして付けずにユーザーを入力したことに注意してください...そうしないと、コマンドの解析でコマンドが失敗します!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.