Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

Windowsでは、デフォルト設定では一般ユーザー(管理者権限を持たないユーザー)はWindowsサービスを管理できません。つまり、サービスの停止・開始・再起動や、設定・アクセス許可の変更を行うことができません。しかし、業務の都合上、特定のサービスの再起動や管理を一般ユーザーに許可したいケースは少なくありません。本記事では、Windowsサービスのアクセス許可を管理する複数の方法を紹介し、特に管理者権限のないユーザーに対して特定のサービスの開始・停止・再起動を許可する方法を詳しく解説します。

ここでは、ドメインアカウント contoso\tuser に対して、Print Spooler サービス(サービス名:spooler)の再起動権限を付与する例を想定します。管理者権限のないユーザーがサービスを再起動しようとすると、次のようなエラーが表示されます。

System error 5 has occurred. Access is denied.

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

残念ながら、Windowsにはサービスのアクセス許可を管理するためのシンプルで使いやすい標準ツールは用意されていません。そこで、ユーザーにサービス管理権限を付与するためのいくつかの方法を順番に見ていきましょう。

SC.exe(Service Controller)ツールを使ってサービスのアクセス許可を設定する

Windows標準の方法としては、sc.exe(Service Controller)ツールを使用してシステムサービスのアクセス許可を管理します。ただし、このユーティリティの最大の難点は、サービスのアクセス許可を指定する形式(SDDL:Security Description Definition Language)の構文が非常に複雑な点です。

現在のサービスのアクセス許可は、SDDL文字列として次のコマンドで取得できます。

sc.exe sdshow Spooler

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

これらの記号の意味は次のとおりです。

S: — システムアクセス制御リスト(SACL)
D: — 任意アクセス制御リスト(DACL)

括弧の直後の最初の文字は「許可(A)」か「拒否(D)」を表します。続く記号の組み合わせは、割り当て可能な個別のアクセス許可です。

CC — SERVICE_QUERY_CONFIG(サービス設定の照会)
LC — SERVICE_QUERY_STATUS(サービス状態のポーリング)
SW — SERVICE_ENUMERATE_DEPENDENTS(依存サービスの列挙)
LO — SERVICE_INTERROGATE(サービスへの問い合わせ)
CR — SERVICE_USER_DEFINED_CONTROL(ユーザー定義コントロール)
RC — READ_CONTROL(読み取り制御)
RP — SERVICE_START(サービスの開始)
WP — SERVICE_STOP(サービスの停止)
DT — SERVICE_PAUSE_CONTINUE(一時停止/再開)

最後の2文字は、アクセス許可を与える対象(ユーザー、グループ、SID)を示します。あらかじめ定義されている主なグループは以下のとおりです。

AU — Authenticated Users(認証済みユーザー)
AO — Account Operators(アカウントオペレーター)
AN — Anonymous Logon(匿名ログオン)
BA — Built-in Administrators(ビルトインAdministrator)
BG — Built-in Guests(ビルトインGuest)
BO — Backup Operators(バックアップオペレーター)
BU — Built-in Users(ビルトインユーザー)
CA — Certificate Server Administrators(証明書サーバー管理者)
CG — Creator Group(作成者グループ)
CO — Creator Owner(作成者所有者)
DA — Domain Administrators(ドメイン管理者)
DC — Domain Computers(ドメインコンピューター)
DD — Domain Controllers(ドメインコントローラー)
DG — Domain Guests(ドメインゲスト)
DU — Domain Users(ドメインユーザー)
EA — Enterprise Administrators(エンタープライズ管理者)
ED — Enterprise Domain Controllers(エンタープライズドメインコントローラー)
WD — Everyone(全員)
PA — Group Policy Administrators(グループポリシー管理者)
IU — Interactively Logged-on User(対話ログオンユーザー)
LA — Local Administrator(ローカルAdministrator)
LG — Local Guest(ローカルGuest)
LS — Local Service Account(ローカルサービスアカウント)
SY — Local System(ローカルシステム)
NU — Network Logon User(ネットワークログオンユーザー)
NO — Network Configuration Operators(ネットワーク構成オペレーター)
NS — Network Service Account(ネットワークサービスアカウント)
PO — Printer Operators(プリンターオペレーター)
PS — Personal Self(自分自身)
PU — Power Users(Power Users)
RS — RAS Servers Group(RASサーバーグループ)
RD — Terminal Server Users(ターミナルサーバーユーザー)
RE — Replicator(Replicator)
RC — Restricted Code(制限付きコード)
SA — Schema Administrators(スキーマ管理者)
SO — Server Operators(サーバーオペレーター)
SU — Service Logon User(サービスログオンユーザー)

定義済みグループの代わりに、SIDを指定して特定のユーザーやグループを明示的に指定することもできます。現在のユーザーのSIDは次のコマンドで確認できます。

whoami /user

また、Active DirectoryのユーザーのSIDはGet-ADUserコマンドレットで取得できます。

Get-ADUser -Identity 'sadams' | select SID

ADセキュリティグループのSIDはGet-ADGroupコマンドレットで取得できます。

Get-ADGroup -Filter {Name -eq "ny-ithelpdesk"} | Select SID

特定のサービスにSDDL形式のアクセス許可文字列を適用するには、sc sdset コマンドを使用します。たとえば、次のコマンドでユーザーに権限を付与できます。

sc sdset Spooler "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

SubInACLを使ってサービスの開始・停止・再起動を許可する

サービスのアクセス許可の管理には、Mark Russinovich氏によるSysinternalsのコマンドラインツール SubInACL を使う方がはるかに簡単です。このツールの構文ははるかにシンプルで扱いやすくなっています。SubInACLを使ってサービスの再起動権限を付与する手順は以下のとおりです。

  1. Microsoftのダウンロードページ(https://www.microsoft.com/en-us/download/details.aspx?id=23510)から subinacl.msi をダウンロードし、対象のシステムにインストールします。管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法
  2. 管理者権限でコマンドプロンプトを開き、ツールのあるディレクトリへ移動します。
    cd "C:\Program Files (x86)\Windows Resource Kits\Tools\"
  3. 次のコマンドを実行します。
    subinacl.exe /service Spooler /grant=contoso\tuser=PTO
    管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法
    補足:この例では、ユーザーに対してサービスの一時停止/再開(P)、開始(T)、停止(O)の権限を付与しています。利用可能なサービス権限の全一覧は次のとおりです。
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(ユーザー定義制御コマンド)

リモートコンピューター上で動作しているサービスに権限を付与する場合は、次の構文を使用します。
subinacl /SERVICE \\lon-prnt1\spooler /grant=contoso\tuser=F

  1. その後、対象のユーザーアカウントでコンピューターにログオンし、次のコマンドでサービスを再起動できるか確認します。
    net stop spooler
    net start spooler
    または
    sc stop spooler && sc start spooler
    管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

すべて正しく設定していれば、サービスは正常に再起動されるはずです。

付与したサービス権限を取り消す場合は、subinacl.exeの /revoke オプションを使用します。たとえば次のように実行します。

subinacl.exe /service Spooler /revoke=contoso\tuser

Process Explorerを使ってサービスのアクセス許可を変更する方法

Sysinternalsのもうひとつのユーティリティ Process Explorer を使っても、Windowsサービスのアクセス許可を変更できます。Process Explorerを管理者として実行し、対象サービスのプロセスを見つけます。この例では spoolsv.exe(Spoolerの実行ファイル:C:\Windows\System32\spoolsv.exe)です。プロセスのプロパティを開き、Services タブをクリックします。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

Permissions ボタンをクリックし、開いたウィンドウでユーザーまたはグループを追加します。その後、付与したいアクセス許可(フルコントロール/書き込み/読み取り)を選択します。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

PowerShellを使ってサービスのアクセス許可を設定する

TechNetギャラリーには、さまざまなWindowsオブジェクトのアクセス許可を管理するための非公式PowerShellモジュール PowerShellAccessControl Module があります。このモジュールでもサービスのアクセス許可を管理できます。モジュールをインストールし、PowerShellセッションにインポートしましょう。

Import-Module PowerShellAccessControl

特定のWindowsサービスの実効アクセス権は、PowerShellから次のように確認できます。

Get-Service spooler | Get-EffectiveAccess -Principal corp\tuser

管理者権限のないユーザーにspoolerサービスの開始・停止を許可するには、次のコマンドを実行します。

Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp\tuser

セキュリティテンプレートを使ってサービスのアクセス許可を管理する

視覚的(ただし操作手順は多め)なGUIでの管理方法として、セキュリティテンプレートを使う方法もあります。mmc.exe コンソールを開き、セキュリティテンプレート スナップインを追加します。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

新しいセキュリティテンプレートを作成します(New Template)。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

新しいテンプレートに名前を付け、System Services セクションへ移動します。サービス一覧から Print Spooler を選択し、プロパティを開きます。

スタートアップの種類(自動)を選択し、Edit Security をクリックします。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

Add ボタンで、権限を付与するユーザーアカウントまたはグループを追加します。この例では、開始・停止・一時停止 の権限があれば十分です。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

テンプレートを保存します。

補足:セキュリティテンプレートの内容は、INFファイルとして C:\Users\%username%\Documents\Security\Templates フォルダーに保存されます。

このファイルを開くと、先ほど説明したSDDL形式でアクセス許可の情報が保存されていることがわかります。この方法で得られた文字列は、sc.exeコマンドの引数としても使用できます。

[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Service General Setting]
"Spooler",2,"D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;RPWPDTRC;;;S-1-5-21-3243688314-1354026805-3292651841-1127)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法
次に、セキュリティの構成と分析 スナップインで新しいデータベースを作成し(Open Database)、作成したセキュリティテンプレート Spooler User Rights.inf をインポートします。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

コンテキストメニューから 今すぐコンピューターを構成する を選択して、テンプレートを適用します。

管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

これで、管理者権限のないユーザーアカウントでもPrint Spoolerサービスを管理できることを確認してください。

GPOを使ってユーザーにサービス管理権限を付与する方法

複数のサーバーやドメインコンピューターに対して、サービスの開始・停止権限をユーザーに付与する必要がある場合は、グループポリシー(GPO)を利用するのが簡単です。

  1. 新しいGPOを作成するか既存のGPOを編集し、コンピューターオブジェクトが含まれるActive Directoryコンテナー(OU)にリンクします。ポリシー設定の コンピューターの構成 -> Windowsの設定 -> セキュリティの設定 -> システムサービス へ移動します。管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法
  2. Spoolerサービスを見つけて、前述の方法と同様にユーザーへ権限を付与し、変更を保存します。補足:同じGPOを使って、すべてのユーザーから任意のWindowsサービスを非表示にすることもできます。
  3. GPOがクライアントコンピューターに適用されるまで待ち、新しいサービス権限が割り当てられていることを確認します。

Windowsサービスのセキュリティ権限はどこに保存されるのか?

デフォルトの権限を変更したすべてのサービスのセキュリティ設定は、それぞれのレジストリキー HKLM\System\CurrentControlSet\Services\<servicename>\Security 内のREG_BINARY型の Security パラメーターに保存されています。

つまり、他のコンピューターにサービス権限を設定する方法のひとつとして、このレジストリ値をエクスポート/インポートする(GPO経由での配布を含む)という手段があります。管理者以外のユーザーにWindowsサービスの開始・停止を許可する方法

以上、Windowsサービスのアクセス許可を管理するいくつかの方法を紹介しました。これらを活用すれば、管理者権限のないユーザーにもシステムサービスへの任意の権限を付与できます。なお、ユーザーにローカルログオンやRDPの権限を与えずにリモートからサービスへアクセスさせたい場合は、Service Control Manager経由でリモート接続およびサービス列挙を許可する設定が必要になる点に注意してください。

  1. Windows 11のナレーターを停止・起動する方法を徹底解説

    Windows 11の「ナレーター」は、画面上のテキストを読み上げることで、視覚に障害のある方でもパソコンを快適に操作できるよう支援するスクリーンリーダーアプリです。OSに標準搭載されているため、追加でダウンロードやインストールを行う必要はありません。 この記事では、Windows 11のナレーターを停止または起動する方法をわかりやすく解説します。 Windows 11ナレーターのキーボードショートカット Windows 11(およびWindows 10)でナレーターを最も手軽に停止・起動する方法は、「Windowsキー + Ctrl + Enter」のショートカットキーを使うことです。このシ

  2. Windows 11でWindows Updateを停止する3つの方法【一時停止からレジストリ設定まで】

    Microsoftは、セキュリティパッチ、新機能、不具合の修正などを含むアップデートを定期的にWindows OSへ提供しています。これらのアップデートは強く推奨されており、継続的に適用することが望ましいとされています。しかし、PCが従量制課金のネットワーク接続を使用している場合など、一時的にWindows Updateを無効化し、ダウンロードやインストールを止めたい場面もあるでしょう。この記事では、Windows Updateを停止するためのいくつかの方法を詳しく解説します。 Windows Updateを停止するさまざまな方法 方法1:Windows Updateを一時停止する 最初の方法