web-dev-qa-db-ja.com

コマンドプロンプトを昇格させることができるコマンドはありますか?

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

$ su # or 'Sudo -s'
#

ルートシェルは同じ端末内の適切な場所に生成されます。

私は、Windowsのコマンドプロンプトで同じような場所での昇格ができるものを見つけようとしています。つまり、新しいウィンドウを表示したり、UACプロンプトを表示したりしないでください。これまでのところ、UACを迂回するスケジュールされたタスクを実行することができましたが、昇格したコマンドプロンプトウィンドウはその場に生成されません。

新しいウィンドウを生成せずにインプレース昇格を行うWindows用の同様のコマンドはありますか?

59
user2064000

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


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

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

  1. 完全な管理者アクセス権を持つ方
  2. 標準のユーザーアクセス権を持つ2番目の「フィルター処理されたトークン」

プロセス(例えばCMD.EXE)が作成されるとき、それはこれら2つの アクセストークンのうちの1つに割り当てられます 。プロセスが管理者として "昇格"している場合は、フィルタ処理されていないアクセストークンが使用されます。プロセスに管理者権限が付与されていない場合は、フィルタ処理された標準のユーザートークンが使用されます。

プロセスが作成されると、そのアクセストークンを置き換えることはできません1 このMSDNWindowsデスクトップ用アプリケーションセキュリティthread では、自分自身をWindowsカーネルチームの一員として特定するポスターが次のように述べています。

NTカーネルは、プロセスの実行が開始された後にトークンの切り替えを許可することを目的としていませんでした。これは、ハンドルなどが古いセキュリティコンテキストで開かれていたり、機内操作で矛盾したセキュリティコンテキストなどが使用されている可能性があるためです。そのため、実行開始後にプロセスのトークンを切り替えることは意味がありません。しかし、これはVistaまで実施されませんでした。 [mine mine](ソース ありがとう / @Ben N

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

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

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


1既存のアクセストークンの特権をAdjustTokenPrivileges関数で調整できますが、 MSDNによれば

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

64

私はTCC-LEの熱心なユーザーですが、新しいプログラムを必要としない解決策があります。 -

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

これでcmdadminがあなたのsuまたはSudoになります。管理者権限を持つシェルを与えるためにパラメータなしで起動することも、このモードで単一のコマンドを実行するために/cとともに実行することもできます。ポリシーによっては、確認を求められる場合とされない場合があります。

これは常に新しいウィンドウを開くことに注意してください(TCCソリューションのstart /elevated ...と同様に)。これは期待されることですが、コマンドラインプログラムの場合は、/kの代わりに/cを使用するとよいでしょう。出力を見てください。または、実行文字列の最後にSudo.cmdを連結したバッチファイル(おそらく& pause)を介して実行することもできます。

どちらの場合もsuSudoとはまったく同じではありませんが、最も近いものになります。ウィンドウのレイアウトを手動で設定することで、新しいウィンドウをオリジナルの真下に作成して直接隣接させることができます。

19
AFH

コマンドプロンプトを昇格させることができるコマンドはありますか?

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

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

より良い方法がありましたが、マイクロソフトはそれらを閉じました。もちろん、あなたはいつでもあなたの袖を巻き上げて、私が今あなたに与えたソースコードでSudoと同等のあなた自身のスクリプトを書くことができます。

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

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

2つのバックエンド(1つの標準と1つの昇格)と1つのグラフィカルなフロントエンドを考えているスマートキッズは、 を読んでください。セッション0分離

9
user477799

新しいウィンドウを生成せずにインプレース昇格を行うWindows用の同様のコマンドはありますか?

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

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

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

UACプロンプトを回避するための解決策は、最初は高度を高くすることです。あなたが十分に承認されていれば、UACはあなたを邪魔するべきではありません。低い標高から始めて(セキュリティ上の利点でよく推奨されます)、それからより高い標高を必要とすることをしてみると、UACの対話が期待できます。

2
TOOGAM

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

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

2
magicandre1981

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

注意:UACプロンプトが表示されます。これを隠すことは不可能です、それはちょうどUACが設計されている方法です。

Usage:
  rsudo.exe "[command]"

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

注:コマンドは新しいウィンドウで実行されます。出力を見たい場合はrsudo.exe "pause && [command]"を実行してください。

2
rahuldottech

これは変です。

あなたはあなた自身のコンピュータにsshをやろうとするかもしれません。それは同じ既存の端末を使うでしょうが、実際には全く違うものになるでしょう。

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

他の人はそれが便利だと思うかもしれません。

0