Windows でアプリの UAC 要求を拒否した場合、アプリの実行が継続されないのはなぜですか?

Windows でアプリの UAC 要求を拒否した場合、アプリの実行が継続されないのはなぜですか?

Linux/Unix の経験があるため、Windows で UAC がどのように機能するのか理解できません。

UAC は のように動作すると聞きましたsudo。私の Linux アプリケーションは を呼び出す前に他の作業を行うことができますsudo

しかし、Windows では、UAC の確認を必要とするすべてのアプリケーションは、実際の作業を行う前に UAC を許可する必要があるようです。アプリケーションを実行すると、UAC の確認を求められますが、拒否すると、アプリケーションは実行されません。

それで、UAC はこのように動作するのでしょうか?

sudo su
./run_app

それよりも:

./do_work1
sudo su
./du_work2

皆様の素晴らしい回答に感謝します!

答え1

標準ユーザーとして Windows にログインすると、ログオン セッションが作成され、最も基本的な権限のみを含むトークンが割り当てられます。この方法では、新しいログオン セッションでは、システム全体に影響する変更を行うことはできません。Administrators グループのユーザーとしてログインすると、2 つの別々のトークンが割り当てられます。最初のトークンには、通常管理者に与えられるすべての権限が含まれており、2 つ目は標準ユーザーが受け取るものと同様の制限付きトークンです。Windows シェルを含むユーザー アプリケーションは、制限付きトークンを使用して起動されるため、管理者アカウントでも権限が制限された環境になります。アプリケーションがより高い権限を要求するか、[管理者として実行] をクリックすると、UAC は確認を求め、同意すると、制限なしのトークンを使用してプロセスを開始します。

私が理解している限りでは、最後の文が意味するのは、アプリが読み込まれる前にUACダイアログが表示されて無制限のトークンで起動されるか、標準ユーザー権限で起動され、その間に何らかの作業のために昇格された権限が必要な場合は、ユーザーの同意を得てから新しいプロセスを作成し、昇格された権限で実行するプロセスの開始時に割り当てられたトークンによって、そのプロセスの権限が決まります。このトークンは後で変更できないため、さらに権限が必要な場合は、新しいプロセスを生成する必要があります。

このように、UACは須藤

答え2

Windowsでは、実行可能ファイルを実行しようとするとUACプロンプトが表示されます。マニフェストで昇格が必要とマークされているファイルに埋め込まれており、すでに管理者特権で実行されていない場合。この動作は、実行可能ファイルを別の資格情報で実行するように OS に指示するのはコマンドではなくファイルであるという点で、su よりも setuid に似ています。

答え3

それは単純に、それらが異なっているからです。UACできたのように実装されたことがありますsudoが、そうではありませんでした。

これはネットワーク保護との類似点として考えることができます。

sudoこれは、プログラムがネットワーク アクセスを要求し、ファイアウォールがそれを許可するかどうかを尋ねる場合と似ています。はいと答えるとプログラムはソケットを開きますが、いいえと答えると接続がないことをエラーとして表示し、ネットワーク アクセスなしでできることをすべて実行します (設計が不十分なプログラムの中には実際にクラッシュするものもあります)。例:

function1();
input();
function2();
secure_operation(); //requests access
function3();        //may depend on results of previous operation; error-checking important

UAC は、NTFS ボリュームにダウンロードされたファイルを開こうとしたときに表示される警告に似ています。Windows は潜在的な危険性について警告し、それを実行するかどうか (まったく) を尋ねます。これはすべてかゼロかの操作です。プログラムの一部だけを信頼し、他の部分は信頼しないという選択はできません。たとえば、次のようになります。

if (requires_high_priv(program)) {
  if (request_priv(program))
    program();
}
else {
  program();
}

上級ユーザーや上級アプリケーション向けの Linux とは異なり、Windows はできるだけ幅広いユーザーにとって使いやすいように設計されているため、セキュリティを簡素化することが最も重要であることを覚えておく必要があります。さらに、露出面が大きいためマルウェアの標的になりやすいため、プログラムを完全に信頼するか、まったく信頼しないかのどちらかにするのが理にかなっています。

答え4

私は Linux アーキテクチャを詳しくは知らないので、間違いがあったらご容赦ください。しかし、この点では Linux と Windows にそれほど違いはないというのが私の理解です...

例...通常のファイルを保護されていない場所にコピーし、ファイルを保護された場所にコピーしてから、再度通常のコピーを実行するコピー スクリプト。

私の理解では、Linux では、アプリケーションは単に実行され、アクションを実行しようとします。そのアクションを実行する権限がない場合、そのアクションは失敗しますが、続行されます。上記の例では、Linux でコピー スクリプトを通常のユーザーとして実行すると、通常のファイルがコピーされ、権限の問題が発生して 2 番目のファイルがコピーされます。sudo で実行すると、3 つのコピーがすべて実行されます。

Windows もこの点ではまったく同じです。管理者以外のユーザーとしてスクリプトを実行すると、1 つをコピーし、2 つ目に権限を発行して、次のものをコピーするだけです。UAC を使用すると、3 つすべてが実行されます。

違いは、多くの Windows アプリケーションでは、デフォルトで UAC の昇格を要求し、昇格がない場合は終了/失敗するように構成が設定されていることです。ただし、このような状況は大幅に減少しています。

関連情報