サーバー上で実行されている一連のWindowsサービスがあり、他のサービスの世話をする1つのサービスを除いて、互いに独立して一連の自動化タスクを実行します。
サービスの1つが応答しないかハングする必要がある場合、このサービスはサービスの再起動を試み、試行中に例外がスローされた場合は、代わりにサポートチームにメールを送信して、サービスを自分で再起動できるようにします。
少し調査を行った後、 KB90746 で説明されている回避策から、サービスが管理者権限を実行しているアカウントを与えることまで、いくつかの「解決策」を見つけました。
私はこれらの方法のどちらにも慣れていません-Microsoftのナレッジベースの記事で概説されている最初の方法の結果を理解していませんが、サービスが実行されているアカウントへの管理者アクセスを付与したくありません。
ローカルセキュリティポリシーをざっと見ましたが、アカウントがサービスとしてログオンできるかどうかを定義するポリシー以外に、サービスを参照しているように見えるものは何もありません。
私たちはこれをServer 2003とServer 2008で実行しているので、アイデアやポインタは喜んで受け取られます!
説明:特定のユーザーまたはグループにすべてのサービスを開始/停止/再開する機能を許可したくない-できるようにしたい特定のユーザーまたはグループに、特定のサービスのみにそれを行う権限を付与します。
詳細説明:これらのアクセス許可を付与する必要があるサーバーはドメインに属していません-それらはファイルを受信して処理する2つのインターネットに面したサーバーですそれらをサードパーティに送信し、いくつかのWebサイトを提供するため、Active Directoryグループポリシーは使用できません。これを明確にしていないことに申し訳ありません。
ドメインに参加していない限り、これを行う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
コマンドを使用してサービスに適用されます(S:
テキストの前):
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で定義されたユーザーがサービスのステータスを照会できるようにします。
私は同じ問題を抱えていました。
リソースキットのSubInACL.exeを使用できます。スタンドアロンユーティリティをここからダウンロードします。 http://www.Microsoft.com/download/en/details.aspx?displaylang=en&id=2351
.msiをインストールしない場合は、msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo
を使用してファイルを抽出します
subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP
を実行しますT =サービスを開始
O =サービスを停止
P =サービスを一時停止/続行
完全なリファレンス: Windows 2000でサービスを管理する権限をユーザーに付与する方法
またはタイプsubinacl /help
注:subinacl /service SERVICE_NAME /perm
を試してはいけません。問題が発生する可能性があるためです(教訓:P)。この名前は、すべてのユーザー(Admin!も含む)のすべての権限を削除するため、誤解を招く可能性があります(perm!=権限)。
あなたが探しているコンピューターの構成-ポリシー-Windowsの設定-セキュリティの設定-システムサービス
そこで、サービスの開始タイプを定義できるだけでなく、各サービスのセキュリティACLを構成することもできます。デフォルトでは、インターフェースには、GPエディターを実行しているマシンにインストールされているサービスのみが一覧表示されます。
別のマシンにのみ存在するサービスを追加するには:
(patrxで提案されているように)SubinAclを使用して、MySQLを(管理者ではなく)通常のドメインユーザーとして起動できるようにしました。 (ただし、コマンドは-local少なくとも-Adminとして実行する必要があります)
コマンドは次のとおりです。
[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP
ドメインを前に付けずにユーザーを入力したことに注意してください。そうしないと、コマンドの解析に失敗します!