コマンドプロンプトを適切に昇格できるコマンドはありますか?


61

* nixシステムでは、次のようなルートシェルを取得できます。

$ su # or 'sudo -s'
#

ルートシェルは、同じターミナル内の所定の場所に生成されます。

Windowsコマンドプロンプトで同様のインプレース昇格を行うものを探しています。つまり、新しいウィンドウを生成したり、UACプロンプトを表示したりしないでください。これまでのところ、UACをバイパスするスケジュールタスクを作成できましたが、昇格したコマンドプロンプトウィンドウは所定の場所に表示されません。

新しいウィンドウを生成せずにインプレースエレベーションを実行する同様のコマンドがWindowsにありますか?


31
su / sudo -sは、実際には新しいシェルプロセスも開始することに注意してください。昇格したプロセスが同じ端末に接続されているだけなので、インプレースで昇格したように見えます。
ライライアン

「新しいウィンドウを表示したり、UACプロンプトを表示したりするべきではありません」グラフィカルな対話を必要としてはいけないと言っているだけですか?または、まったくプロンプトが表示さないようにしますか?たとえばsudo、パスワードの入力を求められる場合がありますが、テキストインターフェイスを使用して入力を求められます。Nanoサーバー(デフォルトではリモートデスクトップ用のGUI も提供していないと思います)がNanoサーバーをどのように処理するのか不思議に思っています。
jpmc26

2
@ jpmc26テキストインターフェイスでの相互作用は問題ありません。
user2064000

@ jpmc26 NanoサーバーにもUACが搭載されているのでしょうか。コンテナ用に最適化されているため、あまり便利ではありません。Server Coreバージョン、IIRCでも無効になりました。誤って有効にした場合、トラブルが山積みになります:)
Luaan

2
@ user2064000 UACプロンプトは、(少なくともWindows以外のバイナリではデフォルトで)ユーザーの現在のデスクトップではなく、セキュアデスクトップで起動されます。わずかに迷惑なだけでなく、これは他のプロセスがUACプロンプトを妨げることを防ぐように設計されています。また、認証が必要な場合、それはセキュアデスクトップ上にある必要があり、一部の管理者は、Windowsがパスワードを取得し、パスワードプロンプトを偽装する他のプロセスではないことを証明するためにCtrl-Alt-Delシーケンスを必要とする場合もあります。したがって、cmdウィンドウにパスワードを入力しても、Microsoftのセキュリティの観点からは飛ぶことはないでしょう。
カルチャ

回答:


65

TL; DR-唯一のオプションは、別のプロセスを生成することです。(新しいcmd.exe。)コマンドプロンプトの場合、より高いアクセス許可を持つアクセストークンで新しいインスタンスを開始すると、常に新しいウィンドウが作成されます。


既に実行中のプロセスに追加のアクセス許可を付与することはできません。

管理者権限を持つユーザーが、ユーザーアカウント制御(UAC)が有効なWindowsマシンにログインすると、2つの個別のアクセストークンが作成されます。

  1. 完全な管理者アクセス権を持つもの、および
  2. 標準ユーザーアクセスを備えた2番目の「フィルタートークン」

プロセス(例CMD.EXE)が作成されると、これらの2つのアクセストークンのいずれかが割り当てられます。プロセスが管理者として「昇格」で実行される場合、フィルター処理されていないアクセストークンが使用されます。プロセスに管理者権限が付与されていない場合、フィルタリングされた標準ユーザートークンが使用されます。

プロセスが作成されると、そのアクセストークンを置き換えることはできません1このWindowsデスクトップ スレッドの MSDN アプリケーションセキュリティでは、Windowsカーネルチームのメンバーであることを示すポスターには次のように記載されています。

NTカーネルは、プロセスの実行開始後にトークンの切り替えを許可することを意図していませんでした。これは、ハンドルなどが古いセキュリティコンテキストで開かれている可能性があり、飛行中の操作が一貫性のないセキュリティコンテキストなどを使用している可能性があるためです。ただし、これはVistaまでは強制されませんでした[エンファシス鉱山]@Ben Nに感謝します)

注:ユーザーアカウント制御は、Windows Vistaのリリースで導入されました

このスーパーユーザーの回答は、同じことを確認する2つの追加ソースを引用しています。

したがって、コマンドプロンプトまたは他のプロセスを適切に昇格させることは、単に不可能です。唯一のオプションは、新しいアクセストークンで別のプロセスを生成することです(必要に応じて、元のプロセスの別のインスタンスにすることができます)。コマンドプロンプトの場合、より高いアクセス許可を持つアクセストークンで新しいインスタンスを起動すると、常に新しいウィンドウが作成されます。システムでUACプロンプトが有効になっている場合は、それらも同様にトリガーされます。


1 AdjustTokenPrivileges関数を使用して既存のアクセストークンの権限を調整できますが、MSDNによると

AdjustTokenPrivileges関数は、アクセストークンに新しい特権を追加できません。トークンの既存の権限のみを有効または無効にできます。


19

私はの熱心なユーザーですがTCC-LE、新しいプログラムを必要としないソリューションがあります-

  • cmd管理者として起動します。
  • これはあなたを始めるはずです%SystemRoot%\system32\-そうでなければ、cdそこに。
  • copy cmd.exe cmdadmin.exe(または選択した任意の名前、などsu.exe)。
  • 次に、エクスプローラーを実行してを見つけますcmdadmin.exe
  • 右クリックして[ プロパティ ]を選択します
  • では互換性 ]タブ管理者として実行]を選択します(または、すべてのユーザーのためにそれを設定します)。

これcmdadminがあなたのsuor sudoです:パラメータなしで起動して管理者権限を持つシェルを提供するか/c、このモードで実行して単一のコマンドを実行できます。ポリシーに応じて、確認のプロンプトが表示される場合とされない場合があります。

これは常に新しいウィンドウを開くことに注意してください(TCCソリューションと同様start /elevated ...):GUIアプリケーションではこれが期待されますが、コマンドラインプログラムでは、出力を表示する機会を与えるため/k/c、の代わりに使用することができます; または、実行文字列の最後にsudo.cmd連結するバッチファイル(おそらく?)を介して実行でき& pauseます。

いずれの場合も、それは全く同じではないのですsusudo、それはあなたが買ってあげる最も近いです。ウィンドウのレイアウトを手動で設定することにより、元のウィンドウのすぐ下に隣接する新しいウィンドウを作成できます。


これはおそらく、OPがの動作に到達できる最も近いものでありsudo、まだ生成されている新しいウィンドウ/プロセスに対処する必要があるという警告があります。おそらくセキュリティの観点からは最善のアイデアではありませんが、すべてのUACプロンプトを無効にすると、昇格したプロセスの開始時にUACプロンプトに応答する必要がなくなります。
私は

@Twisty-コメントありがとうございます。セキュリティへの影響は認識していましたが、アカウントが管理者として実行することを許可するという元の前提よりも悪くはありません。呼び出されたときに常にリマインダーを必要とするかどうかを決定するのは、それを実装する人次第です。
AFH

2
私はあなたの利益のためではなく、他の読者のためにセキュリティの意味について言及していませんでした。ただし、UACプロンプトを無効にすることは、管理者として実行することより悪くないことに同意しません。UACプロンプトにより、管理者としてログインしたユーザーがプロセスに不要な管理者権限を付与するの防ぐことができます。プロンプトがなければ、ユーザーはこの機会を失います。
私は言う

@Twisty-そうです。私の反応は同様の動機から来ました。再度、感謝します。
AFH

1
cmd.exeをコピーする代わりに、シンボリックリンクを作成します。Windowsはそれを更新し、セキュリティバグにパッチを適用した場合、この方法では、古いバージョンを実行していないmklink cmdadmin.exe cmd.exe
ヨーゼフ

11

コマンドプロンプトを適切に昇格できるコマンドはありますか?

かなり不便な方法があります:

powershell -Command "Start-Process 'cmd.exe' -Verb runAs"

より良い方法はありましたが、Microsoftはそれらを閉じました。もちろん、あなたはいつでも自分の袖をまくり上げて、sudo先ほど説明したソースコードに相当する独自のスクリプトを書くことができます。

つまり、新しいウィンドウを生成したり、UACプロンプトを表示したりしないでください。

冒涜!彼を賭けて燃やしなさい!;)冗談はさておき、いいえ。ありません。それはバグであり、セキュリティ上の脆弱性です。マイクロソフトは、昇格されたプロセスと標準プロセスの共通点をできる限り少なくするために、明示的な努力を行いました。

2つのバックエンド(1つは標準でもう1つは高架)と両方のグラフィカルなフロントエンドについて考えている賢い子供は、セッション0分離について読んでください。


2

新しいウィンドウを生成せずにインプレースエレベーションを実行する同様のコマンドがWindowsにありますか?

そのようなコマンドは組み込まれていません。それを証明していませんが、この問題を回避するために追加のソフトウェア/コードを使用する複数の方法を見たことがあると思います。

つまり、新しいウィンドウを生成したり、UACプロンプトを表示したりしないでください。

忘れてください。絶対に忘れてください。それはUACの設計に反します。それを管理できれば、基本的なセキュリティプロセスを壊しています。マイクロソフトがこの問題を回避するために行う可能性のあるプロセスを認識して修正した後、パッチで解決することを期待してください。

UACプロンプトを回避するための解決策は、最初に高度を上げることです。UACは、あなたが十分に許可されていれば気にしません。低い標高(多くの場合、セキュリティ上の利点から推奨されます)から始めて、高い標高が必要なことをしようとすると、UACの相互作用が予想されます。


UACプロンプトは、スケジュールされたタスクで既にバイパスできます。新しいコマンドプロンプトウィンドウを生成する代わりに、インプレースでの昇格を行うものを探しています。
user2064000

その場合、UACの要件を満たさずに、スケジュールされたタスクを実際にセットアップできますか?産卵に関しては、これまで期待していたすべての昇格ソリューションが新しいプロセスの開始に関与していることに気付いたので、そうは思わないと言っています。インストールプログラムが開始後にUACを要求する場合があるため、新しいプロセスを開始せずに技術的に昇格できると思いますが、バッチファイルに簡単にインポートできる、すぐに使用可能なソリューションを見たことはまだありません。
-TOOGAM

確かに; スケジュールされたタスクはUACを完全に無効にします。昇格したら、サービスを介してSYSTEMに昇格し、元のcmd.exeプロセスで置換トークンを使用できます。
ジョシュア

基本的な仕事をする、やや公式のPowerToyスクリプトがあります。elevate cmdUACプロンプトで新しいコマンドプロンプトウィンドウを開くように入力できます(サイトにはコンテキストメニューコマンドもあります!)。または、もちろん、既存のコマンドプロンプトウィンドウのタスクバーアイコンをCtrl + Shift +クリックするだけで同じことを行うことができます。これが私が最もよく行うことです。(私が知っているのは、OPが要求したものではありませんが、OPが要求したものは設計によってブロックされています。)
Miral

2

この概念をサポートしていないため、Windowsで望んでいることは不可能です。より高い権限で新しいプロセスを開始する必要があります。

nircmdを使用して、コマンドラインからプロセスを昇格させます。あなたのコマンドはnircmdc elevate cmd


2

私はこの質問を見て、簡単な解決策を思いつきました。これはと呼ばれる小さなユーティリティでrsudo、通常のCMDウィンドウからエスカレーションされたコマンドを実行します。

注:UACプロンプトが表示されます。これを非表示にすることはできません。それがUACの設計方法です。

Usage:
  rsudo.exe "[command]"

ダウンロード [ダウンロードが機能しない、間もなく更新されます]

注:コマンドは新しいウィンドウで実行されます。出力を表示する場合は、実行しますrsudo.exe "pause && [command]"


そうじゃないrsudo.exe "[command] && pause"

@フリートいいえ、バグがpause最初に実行されます
rahuldottech

ラーフル、ありがとう!ソースコードの可能性はありますか?;)(または、あなたのサイトの間違った場所を探していたのかもしれません。)
cxw

@cwz確かに!家に着いてブログ投稿を追加したら編集します:D
rahuldottech

0

これは奇妙です。

同じ既存の端末を使用するコンピューターにsshを実行することもできますが、実際にはまったく異なる端末になります。

それは動作しますが、おそらくあなたが望むものではありません。

しかし、他の人はそれを役に立つと思うかもしれません。


-1

JPSOFT Take CommandコマンドプロンプトTCC / LEを試してください。32ビット版と64ビット版があり、より多くの機能が必要でない限り無料です。

移動しhttps://jpsoft.com/し、ダウンロードをクリックして、必要なものを選択します。

TCC / LEにはSTART / ELEVATEDがあり、完全な管理者特権で昇格したプログラムを開始します。(Windows Vista以降のみ。)


1
これは質問とどのように関連していますか?
user2064000

@DavidGraingerでは、/ elevatedスイッチを使用しても、UACをバイパスしてインプレースでの昇格を行うことができません(詳細については質問を参照してください)。何か不足していますか?
user2064000

これは、Windowsコマンドプロンプトに代わるものです。さらに、昇格を開始することは、組み込みのコマンドプロンプトを昇格することと同じです。
私は

UAC設定を[通知しない]に変更する唯一の方法は、UAC通知がポップアップ表示されたら、[詳細を表示]リンクをクリックし、[この通知が表示されるタイミングを表示]リンクを選択します。動作する設定を選択します。完了したら元に戻すと、不要なアクションがキャッチされます。これは、Windowsの設定で実行できます。
デビッドグレインジャー

TCC / LEは他にも多くのことを行います。UACをneverに設定して試してから、「Start / Elevated / PGM "C:\ Program Files \ IrfanView \ i_view64.exe" / thumbs」を使用してElevatedプログラムを開きました。
デビッドグレインジャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.