Jeśli w systemie Windows odrzucę żądanie UAC aplikacji, dlaczego nie może ona nadal działać?

17

Pochodząc z Linuksa / Uniksa, nie rozumiem, jak UAC działa w systemie Windows.

Słyszałem, że UAC działa jak sudo. Moja aplikacja Linux może wykonać inną pracę przed wywołaniem sudo.

Ale w systemie Windows wydaje się, że wszystkie aplikacje, które wymagają potwierdzenia UAC, muszą uzyskać UAC, zanim w ogóle wykonają jakąkolwiek pracę! Uruchamiam aplikację, prosi mnie o potwierdzenie UAC i odmawiam - aplikacja po prostu się nie uruchomi.

Czy UAC tak działa?

sudo su
./run_app

Zamiast:

./do_work1
sudo su
./du_work2

Dzięki za świetną odpowiedź dla wszystkich!

Howard
źródło

Odpowiedzi:

12

Podczas logowania do systemu Windows jako zwykły użytkownik tworzona jest sesja logowania i przypisywany jest token zawierający tylko najbardziej podstawowe uprawnienia. W ten sposób nowa sesja logowania nie jest w stanie wprowadzić zmian, które wpłynęłyby na cały system. Podczas logowania jako użytkownik w grupie Administratorzy przypisane są dwa oddzielne tokeny. Pierwszy token zawiera wszystkie uprawnienia zwykle przyznawane administratorowi, a drugi jest tokenem ograniczonym podobnym do tego, co otrzymałby zwykły użytkownik. Aplikacje użytkownika, w tym powłoka systemu Windows, są następnie uruchamiane z ograniczonym tokenem, co powoduje zmniejszenie środowiska przywilejów nawet na koncie administratora. Gdy aplikacja zażąda wyższych uprawnień lub kliknie „Uruchom jako administrator”, UAC poprosi o potwierdzenie, a jeśli wyrazi zgodę,

Z tego, co rozumiem, to ostatnie zdanie oznacza, że ​​albo okno dialogowe UAC jest wyświetlane przed załadowaniem aplikacji, aby było uruchamiane z nieograniczonym tokenem, lub jeśli jest uruchamiane ze standardowymi uprawnieniami użytkownika i potrzebuje podwyższonych uprawnień pomiędzy niektórymi działa, musi uzyskać zgodę użytkownika, a następnie odrodzić nowy proces, który następnie uruchamia się z podwyższonymi uprawnieniami . Token przypisany podczas uruchamiania procesu decyduje o jego prawach. Tego tokena nie można później zmienić, więc jeśli wymagane są więcej uprawnień, należy rozpocząć nowy proces.

W ten sposób UAC nie jest dokładnie taki sam jak sudo .

Karan
źródło
4
W rzeczywistości jest to to samo, co sudo. Uruchomienie „sudo su” nie dodaje uprawnień roota do bieżącej powłoki, uruchamia nową powłokę w osobnym procesie. Jeśli wyjdziesz z tej powłoki, wrócisz do pierwszej.
Wyzard
1
Różnica między Windows i Unix polega na tym, że programiści uniksowi są przyzwyczajeni do robienia rzeczy w podprocesach, więc rozsądnie jest rozpocząć bardziej uprzywilejowany podproces dla konkretnej części zadania, która potrzebuje uprawnień. W systemie Windows częściej wykonuje się wszystko w jednym procesie, a rozdzielenie zadania na odrębne części uprzywilejowane i nieuprzywilejowane (działające w osobnych procesach) wygląda zbyt ciężko. (Oczywiście w wielu przypadkach lepiej jest dowiedzieć się, że nie masz koniecznych przywilejów od razu, a nie w połowie pracy!)
Harry Johnston,
19

W systemie Windows monit UAC jest uruchamiany, gdy próbujesz uruchomić plik wykonywalny oznaczony jako wymagający podniesienia uprawnień w manifeście osadzonym w pliku i nie masz jeszcze podniesionego poziomu. Zachowanie jest bardziej podobne do setuid niż su, ponieważ jest to plik, a nie polecenie informujące system operacyjny, że plik wykonywalny ma być uruchamiany z różnymi poświadczeniami.

Nicole Hamilton
źródło
4

To dlatego, że są różne, jasne i proste. UAC mógł być wdrożony jak sudo, ale tak nie było.

Można to traktować jako analogię do ochrony sieci.

sudoprzypomina to, gdy program żąda dostępu do sieci, a zapora wyświetla monit o jego przyznanie lub nie. Możesz powiedzieć tak, a program otworzy gniazdo lub możesz powiedzieć nie i narzeka na brak połączenia i robi wszystko, co może zrobić bez dostępu do sieci (niektóre źle zaprojektowane programy faktycznie ulegają awarii). Na przykład:

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

Kontrola konta użytkownika przypomina ostrzeżenie, które pojawia się podczas próby otwarcia pliku pobranego na wolumin NTFS. Windows ostrzega przed potencjalnym złem i pyta, czy chcesz go uruchomić (w ogóle), czy nie. To operacja „wszystko albo nic”; nie możesz ufać tylko części programu, a nie innym. Na przykład:

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

Musisz pamiętać, że w przeciwieństwie do Linuksa, który jest bardziej ukierunkowany na zaawansowanych użytkowników i aplikacje, system Windows został zaprojektowany tak, aby był przyjazny dla jak największej liczby różnych użytkowników, więc uproszczenie bezpieczeństwa jest najważniejsze. Co więcej, ze względu na dużą powierzchnię narażenia, jest często celem szkodliwego oprogramowania, więc bardziej sensowne jest albo całkowicie zaufać programowi, albo wcale.

Synetech
źródło
4

Nie znam do końca architektury linux, więc wybacz mi, jeśli popełniam błąd, ale rozumiem, że Linux i Windows wcale nie różnią się pod tym względem ...

Przykład ... Skrypt kopiujący, który wykonuje kopię normalnego pliku do niezabezpieczonej lokalizacji oraz plik próbujący skopiować do chronionej lokalizacji, a następnie normalną kopię ponownie.

Rozumiem, że w Linuksie aplikacja po prostu działa i próbuje wykonać akcję - jeśli nie ma uprawnień do wykonania tej akcji - zawiedzie tę akcję, ale będzie kontynuować. W powyższym przykładzie - podczas uruchamiania skryptu kopiowania w systemie Linux jako zwykły użytkownik, skopiuje zwykły plik, wyda pozwolenie i skopiuje drugi plik - jeśli zostanie uruchomiony z sudo, zrobi wszystkie trzy kopie.

Windows pod tym względem jest dokładnie taki sam - uruchomienie skryptu jako użytkownik nieadministracyjny po prostu skopiuje jeden, wyda pozwolenie na drugi i skopiuje następny. Z UAC będzie działać wszystkie trzy.

Różnica polega na tym, że wiele aplikacji Windows ma po prostu zestaw konfiguracji, aby domyślnie prosiły o podniesienie UAC i kończą / kończą się niepowodzeniem, jeśli go nie mają ... ale to staje się o wiele mniejsze.

William Hilsum
źródło
1
... i muszę powiedzieć, że po ponownym przeczytaniu mojej odpowiedzi i twojego pytania - nie jestem w 100% pewien, o co pytasz ... Mam nadzieję, że to pomoże, ale nie jestem pewien: /
William Hilsum