Если в Windows я отклоняю запрос UAC приложения, почему оно не должно продолжать работу?

Если в Windows я отклоняю запрос UAC приложения, почему оно не должно продолжать работу?

Имея опыт работы с Linux/Unix, я не могу понять, как работает UAC в Windows.

Я слышал, что UAC работает как sudo. Мое приложение Linux может выполнять какую-то другую работу перед вызовом sudo.

Но в Windows, похоже, что все приложения, которым требуется подтверждение UAC, должны получить разрешение UAC, прежде чем выполнять какую-либо фактическую работу! Я запускаю приложение, оно запрашивает у меня подтверждение UAC, и я отказываюсь — приложение просто не запускается.

Так работает ли UAC таким образом?

sudo su
./run_app

Скорее, чем:

./do_work1
sudo su
./du_work2

Спасибо всем за отличный ответ!

решение1

При входе в Windows в качестве обычного пользователя создается сеанс входа и назначается токен, содержащий только самые основные привилегии. Таким образом, новый сеанс входа не может вносить изменения, которые могли бы повлиять на всю систему. При входе в качестве пользователя из группы «Администраторы» назначаются два отдельных токена. Первый токен содержит все привилегии, обычно предоставляемые администратору, а второй — ограниченный токен, аналогичный тому, что получил бы обычный пользователь. Затем пользовательские приложения, включая оболочку Windows, запускаются с ограниченным токеном, что приводит к среде с ограниченными привилегиями даже под учетной записью администратора. Когда приложение запрашивает более высокие привилегии или нажимается «Запуск от имени администратора», UAC запросит подтверждение и, если дано согласие, запустит процесс с использованием неограниченного токена.

Насколько я понимаю, последнее предложение означает, что либо диалоговое окно UAC отображается до загрузки приложения, чтобы оно запускалось с неограниченным маркером, либо, если оно запускается с привилегиями обычного пользователя и для какой-то работы ему требуются повышенные привилегии, ему необходимо получить согласие пользователя, а затемпорождает новый процесс, который затем запускается с повышенными правами. Токен, назначаемый при запуске процесса, определяет его права. Этот токен нельзя изменить позже, поэтому, если требуются дополнительные права, необходимо создать новый процесс.

Таким образом, UAC — это не совсем то же самое, чтосудо.

решение2

В Windows запрос UAC срабатывает при попытке запустить исполняемый файл, которыйотмечено в манифесте как требующее повышениявстроено в файл, и вы еще не работаете с повышенными правами. Поведение больше похоже на setuid, чем на su, поскольку это файл, а не команда, сообщает ОС, что исполняемый файл должен быть запущен с другими учетными данными.

решение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 от имени обычного пользователя он скопирует обычный файл, выдаст ошибку разрешения и скопирует второй файл — если запустить с sudo, он сделает все три копии.

Windows в этом отношении абсолютно то же самое - запуск скрипта от имени пользователя без прав администратора просто скопирует один, разрешит второй и скопирует следующий. С UAC он запустит все три.

Разница в том, что многие приложения Windows просто имеют настроенную конфигурацию, которая по умолчанию запрашивает повышение прав UAC и завершает работу/дает сбой, если оно не выполнено... но таких приложений становится все меньше.

Связанный контент