Wenn ich in Windows die UAC-Anforderung einer App ablehne, warum darf sie dann nicht weiter ausgeführt werden?


17

Ich komme aus einem Linux / Unix-Hintergrund und kann nicht verstehen, wie die Benutzerkontensteuerung unter Windows funktioniert.

Ich habe gehört, dass UAC funktioniert sudo. Meine Linux-Anwendung kann noch andere Aufgaben ausführen, bevor sie anruft sudo.

In Windows muss jedoch allen Anwendungen, für die eine UAC-Bestätigung erforderlich ist, eine UAC-Berechtigung erteilt werden, bevor überhaupt eine tatsächliche Arbeit ausgeführt werden kann! Ich führe eine Anwendung aus, frage nach einer UAC-Bestätigung und lehne sie ab - die Anwendung wird einfach nicht ausgeführt.

Funktioniert die Benutzerkontensteuerung also so?

sudo su
./run_app

Eher, als:

./do_work1
sudo su
./du_work2

Vielen Dank für die tolle Antwort!

Antworten:


12

Wenn Sie sich als Standardbenutzer bei Windows anmelden, wird eine Anmeldesitzung erstellt und ein Token zugewiesen, das nur die grundlegendsten Berechtigungen enthält. Auf diese Weise kann die neue Anmeldesitzung keine Änderungen vornehmen, die sich auf das gesamte System auswirken würden. Wenn Sie sich als Benutzer in der Gruppe Administratoren anmelden, werden zwei separate Token zugewiesen. Das erste Token enthält alle Berechtigungen, die normalerweise einem Administrator gewährt werden, und das zweite Token ist ein eingeschränktes Token, ähnlich dem, das ein Standardbenutzer erhalten würde. Benutzeranwendungen, einschließlich der Windows-Shell, werden dann mit dem eingeschränkten Token gestartet, was zu einer Umgebung mit reduzierten Berechtigungen führt, selbst unter einem Administratorkonto. Wenn eine Anwendung höhere Berechtigungen anfordert oder auf "Als Administrator ausführen" geklickt wird, fordert die Benutzerkontensteuerung zur Bestätigung auf.

Soweit ich weiß, bedeutet der letzte Satz, dass entweder das UAC-Dialogfeld angezeigt wird, bevor die App geladen wird, damit es mit dem uneingeschränkten Token gestartet wird, oder dass es mit Standardbenutzerberechtigungen gestartet wird und für einige Benutzer erhöhte Berechtigungen benötigt arbeiten, muss es die Zustimmung des Benutzers einholen und dann einen neuen Prozess auslösen, der dann mit erhöhten Rechten ausgeführt wird . Das beim Start eines Prozesses zugewiesene Token bestimmt dessen Rechte. Dieses Token kann später nicht mehr geändert werden. Wenn also weitere Rechte erforderlich sind, muss ein neuer Prozess erstellt werden.

Auf diese Weise ist die Benutzerkontensteuerung nicht mit sudo identisch .


4
Eigentlich ist es dasselbe wie sudo. Wenn Sie "sudo su" ausführen, werden Ihrer aktuellen Shell keine Root-Berechtigungen hinzugefügt. Sie startet eine neue Shell in einem separaten Prozess. Wenn Sie diese Shell verlassen, kehren Sie zur ersten zurück.
Wyzard

1
Der Unterschied zwischen Windows und Unix besteht darin, dass Unix-Programmierer gewohnt sind, Dinge in Unterprozessen zu erledigen. Daher ist es normal, einen privilegierten Unterprozess für den bestimmten Teil der Aufgabe zu starten, der die Berechtigungen benötigt. In Windows ist es üblicher, alles in einem einzigen Prozess zu erledigen, und die Aufteilung des Jobs in unterschiedliche privilegierte und nicht privilegierte Teile (die in getrennten Prozessen ausgeführt werden) sieht viel zu sehr nach harter Arbeit aus. (Natürlich ist es in vielen Fällen besser, herauszufinden, dass Sie nicht sofort das erforderliche Privileg haben, als auf halbem Weg durch den Job!)
Harry Johnston

19

Unter Windows wird die UAC-Eingabeaufforderung ausgelöst, wenn Sie versuchen, eine ausführbare Datei auszuführen, für die eine Erhöhung in einem in die Datei eingebetteten Manifest erforderlich ist, und wenn Sie noch keine erhöhte Version ausführen . Das Verhalten ähnelt eher setuid als su, da es sich um die Datei handelt und nicht um den Befehl, der dem Betriebssystem mitteilt, dass die ausführbare Datei mit unterschiedlichen Anmeldeinformationen ausgeführt werden soll.


4

Es ist, weil sie schlicht und einfach verschieden sind. UAC könnte wie umgesetzt wurden sudo, aber es war nicht.

Sie können sich das als Analogie zum Netzwerkschutz vorstellen.

sudoist wie wenn ein Programm einen Netzwerkzugriff anfordert und Ihre Firewall Sie auffordert, diesen zu gewähren oder nicht. Sie können "Ja" sagen, und das Programm öffnet den Socket, oder Sie können "Nein" sagen, und es beschwert sich über mangelnde Verbindung und unternimmt alles, was es ohne Netzwerkzugriff tun kann (einige schlecht gestaltete Programme stürzen tatsächlich ab). Beispielsweise:

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

Die Benutzerkontensteuerung ähnelt eher der Warnung, die Sie erhalten, wenn Sie versuchen, eine Datei zu öffnen, die auf ein NTFS-Volume heruntergeladen wurde. Windows warnt Sie vor möglichen Fehlern und fragt Sie, ob Sie es (überhaupt) ausführen möchten oder nicht. Es ist eine Alles-oder-Nichts-Operation; Sie können nicht wählen, nur einem Teil des Programms und nicht anderen zu vertrauen. Beispielsweise:

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

Sie müssen sich daran erinnern, dass Windows im Gegensatz zu Linux, das sich eher an fortgeschrittene Benutzer und Anwendungen richtet, benutzerfreundlich für eine möglichst große Anzahl von Benutzern konzipiert wurde. Daher ist die Vereinfachung der Sicherheit von größter Bedeutung. Darüber hinaus ist es aufgrund seiner großen Angriffsfläche ein häufiges Ziel für Malware. Daher ist es sinnvoller, einem Programm entweder vollständig zu vertrauen oder überhaupt nicht.


4

Ich kenne die Linux-Architektur nicht genau, also verzeihen Sie mir, wenn ich einen Fehler mache, aber ich verstehe, dass Linux und Windows in dieser Hinsicht überhaupt nicht so unterschiedlich sind ...

Ein Beispiel ... Ein Kopierskript, das eine Kopie einer normalen Datei an einen nicht geschützten Speicherort und eine Datei, die versucht, an einen geschützten Speicherort zu kopieren, erstellt und anschließend erneut kopiert.

Meines Wissens nach wird unter Linux eine Anwendung einfach ausgeführt und versucht, eine Aktion auszuführen. Wenn sie nicht über die Berechtigung zum Ausführen dieser Aktion verfügt, schlägt diese Aktion fehl, wird aber fortgesetzt. Im obigen Beispiel wird beim Ausführen des Kopierskripts unter Linux als regulärer Benutzer die reguläre Datei kopiert, ein Berechtigungsproblem erteilt und die zweite Datei kopiert. Wenn das Skript mit sudo ausgeführt wird, werden alle drei Kopien erstellt.

Windows ist in dieser Hinsicht genauso: Wenn Sie das Skript als nicht administrativer Benutzer ausführen, wird nur eines kopiert, die Berechtigung wird für das zweite erteilt und das nächste kopiert. Mit der Benutzerkontensteuerung werden alle drei ausgeführt.

Der Unterschied besteht darin, dass für viele Windows-Anwendungen lediglich eine Konfiguration festgelegt wurde, sodass sie standardmäßig nach einer UAC-Erhöhung fragen und beendet werden bzw. fehlschlagen, wenn sie diese nicht haben. Dies wird jedoch immer weniger.


1
... und ich muss sagen, dass nach dem erneuten Lesen meiner Antwort und Ihrer Frage - ich bin nicht zu 100% sicher, was Sie fragen ... Ich hoffe, das hilft, aber nicht zu sicher: /
William Hilsum
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.