nix システムでは、以下のように root シェルを取得することができます
$ su # or 'sudo -s'
#
ルートシェルは、同じターミナル内の所定の場所にスポーンされます
私は、Windowsのコマンドプロンプトで同様の、インプレースの昇降を行うものを探しています。言い換えれば、それは新しいウィンドウをスポーンしたり、UACプロンプトを表示したりしてはいけません。これまでのところ、私はUACをバイパスするスケジュールされたタスクを作ることができましたが、昇降したコマンドプロンプトのウィンドウはその場でスポーンされません
新しいウィンドウをスポーンせずにインプレース立面図を行うWindows用の同様のコマンドはありますか?
62 user2064000 2017-04-16
TL;DR – 唯一の選択肢は、別のプロセスを起動することです。(新しい cmd.exe
) コマンドプロンプトの場合、より高いパーミッションを持つアクセストークンで新しいインスタンスを開始すると、常に新しいウィンドウが作成されます
すでに実行されているプロセスに追加の権限を与えることはできません
管理者権限を持つユーザーがユーザーアカウント制御(UAC)を有効にしてWindowsマシンにログインすると、2つの別々のアクセストークンが作成されます
- 完全な管理者アクセス権を持つものと
- 標準的なユーザーアクセスを持つ2つ目の「フィルタリングされたトークン」
プロセス (例: CMD.EXE
) が作成される際には、これら 2 つの アクセストークン のうちの 1 つが割り当てられます。プロセスが管理者として “昇格 “して実行されている場合、フィルタリングされていないアクセストークンが使用されます。プロセスが管理者権限を付与されていない場合は、フィルタリングされた標準ユーザートークンが使用されます
1 この MSDN Application Security for Windows Desktop threadでは、Windows Kernel Team のメンバーと名乗る投稿者が次のように述べています
NTカーネルは、プロセスが実行を開始した後にトークンの切り替えを許可することを意図したものではありませんでした。これは、ハンドルなどが古いセキュリティコンテキストで開かれていたり、機内での操作が一貫性のないセキュリティコンテキストを使用していたりする可能性があるからです。このように、プロセスが実行を開始した後にプロセスのトークンを切り替えることは、一般的には意味がありません。しかし、これはVistaまで施行されていなかった。[強調します] (ソース thanks to @Ben N)
注: ユーザーアカウント制御は、Windows Vista のリリースとともに導入されました
このスーパーユーザー回答は、同じことを確認している2つの追加ソースを引用しています
devzest.com のブログ記事 昇格特権/UAC をプログラムする
コードは起動時にプロセスレベルでしか昇格できないため、実行中のプロセスを昇格させることはできません。既存のアプリケーションを昇格させるには、アプリケーションプロセスの新しいインスタンスを作成する必要があります
techtarget.comの記事How to elevate programs’ privileges correctly using Vista’s UACは、VistaのUACを使ってプログラムの権限を正しく昇格させる方法を紹介しています
プログラムは一度起動してしまうと昇格できません
したがって、コマンドプロンプトや他のプロセスをその場で昇格させることはできません。唯一の選択肢は、新しいアクセストークンを持つ別のプロセスを起動することです (これは、必要に応じて元のプロセスの別のインスタンスにすることができます)。コマンドプロンプトの場合、より高い権限を持つアクセストークンで新しいインスタンスを開始すると、常に新しいウィンドウが作成され、システム上で UAC プロンプトが有効になっている場合は、同様にトリガされます
1既存のアクセストークンの権限は AdjustTokenPrivileges 関数で調整できますが、MSDN によると
AdjustTokenPrivileges 関数は、アクセストークンに新しい権限を追加することはできません。トークンの既存の権限を有効または無効にすることができるだけです
68 I say Reinstate Monica 2017-04-16
私はTCC-LE
の熱狂的なユーザーですが、新しいプログラムを必要としない解決策があります:-
- 管理者として
cmd
を起動します - これは、
%SystemRoot%\system32\
から始まるはずです – そうでない場合は、cd
から始まります copy cmd.exe cmdadmin.exe
(またはsu.exe
のように任意の名前でも可)- ここでエクスプローラを起動して、
cmdadmin.exe
を探します - 右クリックしてプロパティを選択します
- 互換性タブで、管理者として実行を選択します(またはすべてのユーザーに設定します)
cmdadmin
は su
または sudo
で、パラメータなしで起動して管理者権限のあるシェルにすることもできますし、 /c
で実行してこのモードで一つのコマンドを実行することもできます。ポリシーによっては、確認のプロンプトが表示される場合とされない場合があります
GUIアプリケーションではこれが期待されますが、コマンドラインプログラムでは、出力を見る機会を与えるために、/c
の代わりに/k
を使用したいかもしれません; あるいは、& pause
を実行文字列の最後に連結するバッチファイル(sudo.cmd
など)を使って実行することもできます
どちらの場合も su
や sudo
のようにはいきませんが、これが一番近いでしょう。ウィンドウのレイアウトを手動で設定することで、新しいウィンドウを元のウィンドウの直下に作成したり、元のウィンドウに隣接させたりすることができます
18 AFH 2017-04-16
コマンドプロンプトをその場で昇格させるコマンドはありますか?
むしろ不便な方法があります
powershell -Command "Start-Process 'cmd.exe' -Verb runAs"
もっと良い方法があったのですが、マイクロソフトはそれを閉鎖してしまいました。もちろん、いつでも袖をまくって、先ほどあげたソースコードを使ってsudo
に相当するスクリプトを自分で書くことができます
言い換えれば、新しいウィンドウを生成したり、UACプロンプトを表示したりしてはいけません
冒涜だ!磔にして燃やせ!)冗談はさておきありません。それはバグとセキュリティ上の脆弱性になります。マイクロソフトは、高架化されたプロセスと標準プロセスの共通点が可能な限り少ないことを確認するために、明示的な努力をしました
2 つのバックエンド (標準と昇格) と 1 つのグラフィカルなフロントエンドの両方を考えている賢い子供たちは、セッション 0 分離を読むべきです
14 None 2017-04-17
新しいウィンドウをスポーンせずにインプレース立面図を行うWindows用の同様のコマンドはありますか?
そのようなコマンドは組み込まれていません。それを証明したわけではありませんが、この問題を回避するために余分なソフトウェア/コードを使用する方法を複数見てきたので、私はそう信じています
- 例えば、以下のようなものです。アンダースのソリューション
- もう一つの例です。マットのスクリプト(スティーブンのフォローアップも参照してください
言い換えれば、新しいウィンドウを生成したり、UACプロンプトを表示したりしてはいけません
忘れろ絶対に忘れろそれはUACの設計に反するもしあなたがそれを管理できるとしたら、あなたは基本的なセキュリティプロセスを壊していることになります。マイクロソフトがこのプロセスを知って修正した後に、あなたのソリューションがパッチで壊れることを期待してください
UACプロンプトを避けるための解決策は、そもそも標高が高いことです。十分に権限を与えられていれば、UACは気にならないはずです。(セキュリティ上の利点のために推奨されることが多い) 低いレベルから始めて、より高いレベルを必要とする何かをしようとした場合、UAC との相互作用を期待してください
2 TOOGAM 2017-04-16
あなたが望むものは、この概念をサポートしていないため、Windowsでは不可能です。あなたは、より高いパーミッションで新しいプロセスを開始する必要があります
私はnircmdを使ってコマンドラインからプロセスを昇格させています。コマンドは nircmdc elevate cmd
となります
2 magicandre1981 2017-04-16
この質問を見て、簡単な解決策を思いつきました。これはrsudo
という小さなユーティリティで、通常のCMDウィンドウからエスカレートしたコマンドを実行します
注意: UACのプロンプトが出てきます。これを隠すことはできません
Usage:
rsudo.exe "[command]"
ダウンロード [ダウンロードが機能していません、近日中に更新します]
注意: コマンドは新しいウィンドウで実行されます。出力を表示したい場合は、rsudo.exe "pause && [command]"
を実行してください
2 undo 2017-04-17
UACをスキップして昇格させることはできないはずで、そうでなければwindowsのセキュリティ原則に違反します
しかし、これを可能にするツールがあります。gsudo
のように、代わりにコマンドプロンプトを昇格させることができるWindows用のsudo。私は著者です
最初の昇降のためのUACウィンドウが表示されます。昇降した gsudo のタイムアウト前に gsudo
を再度実行すると、再び UAC を要求しなくなります
Features
- 昇格したコマンドは、新しいウィンドウでコマンドを開くのではなく、
*nix sudo
のようにユーザレベルのコンソールに表示されます - クレデンシャルキャッシュ。
gsudo
が数分以内に何度か起動された場合、UACのポップアップが一度だけ表示されます - CMDコマンドのためのSuport。
gsudo md folder
(長い形式のgsudo cmd.exe /c md folder
を使用する必要はありません - PSシェルから起動された場合のPowerShellコマンドをサポートします
- Scripting:
gsudo
は、1つ以上のコマンドを昇格させる必要があるスクリプトに使用できます。(UACポップアップが一度だけ表示されます)- 昇格したコマンドの出力と終了コードを解釈することができます。例えば、StdOutbound はパイプやキャプチャ (
gsudo dir | findstr /c:"bytes free" > FreeSpace.txt
) と終了コードも解釈できます (‘%errorlevel%)) - 既に昇格しているコンソールから
gsudo
が (パラメータを指定して) 起動された場合、コマンドを実行するだけです。そのため、すでに昇格しているコンソールからgsudo
を使うスクリプトを起動しても動作します。UAC ポップアップは表示されません
Installation
- Scoop経由でインストール。
scoop install gsudo
- Chocolatey経由でインストール:
choco install gsudo
- Or:
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
実際に見てみてください。
Github プロジェクト https://github.com/gerardog/gsudo
2 Gerardo Grignoli 2020-01-03
これは気持ち悪いな
自分のコンピュータにsshしてみてはいかがでしょうか
上手くいくけど、たぶんあなたが望んでいるものとは違うでしょう
他の人は便利だと思うかもしれませんが
0 Paddy 2017-11-28
JPSOFT Take CommandコマンドプロンプトTCC/LEを試してみてください。これには32ビット版と64ビット版があり、より多くの機能が必要な場合を除いて無料です
https://jpsoft.com/ に移動し、「ダウンロード」をクリックして、必要なものを選択します
TCC/LEにはSTART /ELEVATEDがあり、完全な管理者権限で昇格したプログラムを起動します。(Windows Vista以降のみ)
-1 David Grainger 2017-04-16