ローカルシステムアカウントでどのようにCMD.exeを実行しますか?


144

現在Vistaを実行していますが、Windowsサービスと同じ操作を手動で実行したいと考えています。Windowsサービスはローカルシステムアカウントで実行されているので、これと同じ動作をエミュレートしたいと思います。基本的に、ローカルシステムアカウントでCMD.EXEを実行します。

DOSタスクスケジューラのATコマンドを使用してCMD.exeを起動することを提案する情報をオンラインで見つけましたが、「セキュリティの強化により、このタスクは実行時以外はインタラクティブに実行されません」というVistaの警告を受け取りました。次にコマンドの例を示します。

AT 12:00 /interactive cmd.exe

別のソリューションでは、CMD.exeを起動するだけのサービスコントロール(sc.exe)を介してセカンダリWindowsサービスを作成することを提案しました。

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

この場合、サービスは開始できず、次のエラーメッセージが表示されます。

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

3番目の提案は、スケジュールされたタスクを介してCMD.exeを起動することでした。さまざまなアカウントでスケジュールされたタスクを実行できますが、ローカルシステムアカウントはそれらの1つではないと思います。

Runasも使用してみましたが、スケジュールされたタスクを実行したときと同じ制限に直面していると思います。

これまでのところ、私の試みはすべて失敗に終わりました。助言がありますか?

回答:


221

私は個人的にテストしていませんが、上記のATコマンドソリューションがXP、2000、およびServer 2003で機能すると信じる十分な理由があります。私とブライアントのテストによると、同じアプローチがVistaでは機能しないことがわかりましたまたはWindows Server 2008-ほとんどの場合、セキュリティの強化と/ interactiveスイッチの廃止が原因です。

しかし、私はこの出くわした記事の使用を示していPsToolsのからSysInternalsの私は、次のと突然、私は魔法のようにローカルの管理者アカウントの下で実行された経由でコマンドラインを立ち上げました(2006年7月にマイクロソフトに買収されました):

psexec -i -s cmd.exe

PSToolsはうまく機能します。これは、私の問題に対する適切な解決策を提供する、軽量で十分に文書化されたツールのセットです。

助けてくれた方々に感謝します。


11
-d追加した方がいいので、起動したコンソールを使い続けることができます。
SamB

1
Vista x64で試してみたところ、「...で実行されているPsExecサービスは互換性のないバージョンです。」\\ live.sysinternals.com \ tools \ psexecと最新のバイナリから直接試しました。x64バージョンではないようです
ZXX

52
  1. Sysinternalsからpsexec.exeをダウンロードします。ます。
  2. C:\ドライブに配置します。
  3. 標準ユーザーまたは管理ユーザーとしてログオンし、次のコマンドを使用します。 cd \。これにより、psexecが配置されているドライブのルートディレクトリに移動します。
  4. 次のコマンドを使用しますpsexec -i -s cmd.exe。-iはインタラクティブ、-sはシステムアカウントです。
  5. コマンドが完了すると、cmdシェルが起動します。タイプwhoami; 「システム」と表示されます
  6. タスクマネージャーを開きます。explorer.exeを終了します。
  7. 管理者特権のコマンドシェルからを入力しstart explorer.exeます。
  8. エクスプローラを起動すると、スタートメニューバーに「システム」という名前が表示されます。これで、system32ディレクトリ内のいくつかのファイルを削除できます。これらのファイルは、管理者としては削除できません。または、管理者としてこれらのファイルを削除するためのアクセス許可を変更する必要があります。

Windowsの保護されたディレクトリでシステムファイルの名前を変更または委任しようとするユーザーは、ファイルの名前を変更する間、すべてのWindowsファイルがDACLSによって保護されていることを知っている必要があります。所有者を変更し、ファイルを所有するTrustedInstallerを置き換えて、ユーザーのようなユーザーにする必要があります。ファイルの所有者として管理者グループに属し、権限を変更した後で名前を変更しようとすると、ファイルが機能し、カーネルの特権でWindowsエクスプローラーを実行している間は、セキュリティ上の理由からネットワークアクセスに関していくらか制限されますが、これはまだ研究トピックですアクセスを取り戻すために


私はこのトリックを使用して、エクスプローラーを昇格したユーザーとして頻繁に起動します。特に、VNCを介してPCに接続する場合は、ネットワーク設定などが必要になります。私からの+1
TPAKTOPA 14

このトリックは今では無効のようです。私のOSはWindows 7 SP1です。スタートメニューバーに「システム」が表示されるまで行きました。しかし、それでもsystem32フォルダー内のファイルの名前を変更すると、権限が拒否されたと表示されます。system32フォルダーはTrustedInstallerが所有するようになり、ローカルシステムアカウントでさえ特別な権限しか持っていません。
Shaohua Li

TrustedInstallerが所有する保護されたWindowsディレクトリにあるファイルの名前を変更または削除しようとした場合、現在のユーザーは権限を変更してファイルを所有する必要があり、ファイルの名前を変更または委任できます。これはslmgrの委任によく使用されます。 exeやその他のシステムファイルを使用して、料金を支払うことなくWindowsの試用版に無制限にアクセスできる
レイヴン

10

/ k startをbinPathパラメータに追加することで問題を解決するように見える答えがここに見つかりました。だからそれはあなたに与えるでしょう:

sc create testsvc binpath= "cmd /K start" type= own type= interact

しかし、ベンはそれは彼にとってはうまくいかなかったと言いました、そして私がWindows Server 2008でそれを試みたとき、それはローカルシステムの下でcmd.exeプロセスを作成しました、しかしそれはインタラクティブではありませんでした(私はウィンドウを見ることができませんでした)。

あなたが尋ねたことを簡単に行う方法はないと思いますが、なぜあなたがそれをしているのでしょうか?サービスを実行しているときに何が起こっているのかを確認しようとしているだけですか?ローカルシステムとしてexeを実行する必要がなく、ロギングを使用して何が起こっているのかを判断できるようです...


こんにちはブライアント。このソリューションは本質的に質問で概説されています。実際に機能しますか?それは私にとって失敗に終わっています。ありがとう。
ベングリスウォルド

ブライアント、私は別のコンポーネントのインストールとアンインストールを管理するサービスを持っています。私のサポートグループが、サービスが機能しない場合にコンポーネントを「強制的に」アンインストールする簡単な方法を提供したいと考えています。テスト中に、アンインストールも「強制」できるようにしたいと思います。Thx for the help ..
ベングリスウォルド

1
@ベン:サービス「インタラクティブサービス検出」の開始タイプを「手動」または「無効」に設定していますか?
Hello71

1
Server 2012のインタラクティブサービスを許可HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServicesするには、0(デフォルト1)に設定する必要があります
Ivan Chau


6

特権が高すぎるローカルシステムコンテキストではなく、サービスで実際に必要な最小限のアクセス許可セットを作成して使用することをお勧めします。たとえば、Local Service

セッション0の分離により、Windows VistaおよびWindows Server 2008でインタラクティブサービスが機能しなくなり、少なくともUIが表示されなくなりました。


4
マイク、返事ありがとう。私はあなたの推薦に同意し、誰もがあなたの答えから恩恵を受けると思いますが、あなたが質問に答えたことはないと思います。
ベングリスウォルド

@Ben Griswold:しかし、彼は、Vistaで古い方法が失敗する原因を正確に指摘しています。+1。
SamB

1
問題は、「ローカルシステムアカウントでCMD.exeをどのように実行するか」です。
Jaco Pretorius

2
@SamB、そしてそれはコメントのためのものです、あなたが実際には答えではない貢献する何かがある場合。
Synetech 2014年

6

Secure Desktopを使用して実行する cmd.exeするsystem

CMDデバッガーを接続することで、Windows XP / Vista / 7 / 8.1で簡単にカーネルにアクセスできます。

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. 走る CMD管理者として

  2. 次に、このコマンドをElevatedで使用します。

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. 次に実行します osk(onscreenkeyboard)をます。プロセスエクスプローラーを介してチェックした場合、システム整合性レベルではまだ実行されませんが、サービスセッションでOSKを使用できる場合は、次のように実行されます。NT Authority\SYSTEM

Secure Desktopで実行する必要があるという考えがありました。

管理者としてファイルを起動します。UACプロンプトが表示されたら、Win+ Uを押して開始するだけで、代わりOSKに開始さCMDれます。次に、昇格したプロンプトで次のように入力します。whoamiします。NT Authority\System。その後、システムコマンドシェルからエクスプローラーを起動してシステムプロファイルを使用できますが、セキュリティ上の理由から、SYSTEM権限を使用してネットワーク上で実行できる操作には制限があります。1年前に発見したので、後で詳しく説明します。

これがどのように発生するかについての簡単な説明

実行しています。この方法は、以前に発見されたデバッガートラップテクニックを実行します。このテクニックには独自の利点があり、巧妙で悪意のあるワームやマルウェアをデバッガーでトラップし、代わりに他のexeを実行して、拡散を停止したり一時的に損傷したりすることができます。ここで、このレジストリキーは、Windowsネイティブデバッガーのオンスクリーンキーボードをトラップし、代わりにcmd.exeを実行しますが、cmdはログオンユーザー権限で実行されますが、session0でcmdを実行すると、システムシェルを取得できます。安全なデスクトップのcmdにまたがる別のアイデアをここに追加します。安全なデスクトップはシステムアカウントのセッション0で実行され、システムシェルを取得します。したがって、管理者権限で何かを実行するときはいつでも、暗い非対話型デスクトップでUACプロンプトとUACプロンプトに応答する必要があり、表示されたら+ を押す必要があります。Cmd.exeを使用せずにローカルシステムアカウントでするPsExecWinU選択するあります。OSKCMD.exeローカルシステム権限で実行されます。ローカルシステムにアクセスするには、さらに多くの方法があります。CMD


yaをNT権限で昇格してcmdを実行する方法はさらにあります
レイヴン

これはすごく素敵。非常に素晴らしい。私は何かを成し遂げるためにサードパーティのアドオンに依存することを嫌います。これはとても速くて簡単です。永続的:-)唯一の問題は、UACウィンドウですべてのコマンドを実行する必要があり、一部のアプリケーションのみが開くことです。たとえば、Explorer.exeが開きません。これをトリガーする別の方法があるかどうかを実験したいと思います。UACが特定のアプリを制限することなく、ネイティブWindows環境で他のアプリを実行できるようにしたい。素晴らしいものレイヴン!
KonaRin

3

これに代わる方法として、run as ...(インタラクティブ機能はセキュリティが強化されたユーザーには機能しませんが、問題はありません)を実行し、ボックスが開いたら、サービスをボックスタイプに入れ、システムをユーザーボックスに入れ、Cを入れます。 :\ Users \ Windows \ system32 \ cmd.exe残りはokをクリックして、cmdが表示されたウィンドウが表示されたらシステムを実行します。システムとして実行すると、自分で他の手順を実行できます。


2

別の方法があります。上位のcmdを実行できるようにするPowerRunと呼ばれるプログラムがあります。TrustedInstaller権限があっても。コンソールとGUIコマンドの両方が可能です。


1

インタラクティブである必要のないバッチファイルを作成できる場合は、そのバッチファイルをサービスとして実行して、必要な処理を行ってください。


0

私が使用しRunAsTiとして実行するためのユーティリティTrustedInstaller(高い特権を)。ユーティリティは、Windowsさえのリカバリモード(あなたが実行して入力モードで使用することができますShift+をRestart)、PSEXECユーティリティが動作しません。ただし、C:\Windowsand C:\Windows\System32X:\Windowsおよびand X:\Windows\System32ではなく)パスをPATH環境変数に追加する必要があります。 RunAsTiリカバリモードでは動作しません、それだけで印刷します:呼び出し側に割り当てられている参照されていないすべての権限またはグループ:SeImpersonateNameためAdjustTokenPrivilegesが


0

タスクスケジューラを使用して、/ add:/ user:および/ pass:の適切な引数を指定して、SYSTEMで実行されるCMDKEYの実行をスケジュールします。

何もインストールする必要はありません。

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