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

17

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

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

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

Так UAC работает так?

sudo su
./run_app

Скорее, чем:

./do_work1
sudo su
./du_work2

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

Говард
источник

Ответы:

12

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

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

Таким образом, UAC - это не то же самое, что sudo .

Каран
источник
4
На самом деле, это то же самое, что и sudo. Запуск sudo su не добавляет привилегии root к вашей текущей оболочке, он запускает новую оболочку в отдельном процессе. Если вы выйдете из этой оболочки, вы вернетесь к первой.
Вайзард
1
Разница между Windows и Unix заключается в том, что программисты Unix привыкли делать что-то в подпроцессах, поэтому вполне естественно запускать более привилегированный подпроцесс для конкретной части задачи, которой требуются привилегии. В Windows более привычно делать все в одном процессе, и разделение задания на отдельные привилегированные и непривилегированные части (выполняющиеся в отдельных процессах) выглядит слишком похоже на тяжелую работу. (Конечно, во многих случаях лучше выяснить, что у вас нет необходимых привилегий сразу, а не на полпути к работе!)
Harry Johnston
19

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

Николь Гамильтон
источник
4

Это потому что они разные, простые и понятные. 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 спроектирована так, чтобы быть удобной для максимально широкого круга пользователей, поэтому упрощение безопасности имеет первостепенное значение. Более того, из-за большой поверхности подверженности вредоносным программам это частая цель, поэтому имеет смысл либо полностью доверять программе, либо не доверять ей вообще.

Synetech
источник
4

Я не очень хорошо знаю архитектуру Linux, поэтому прости меня, если я ошибаюсь, но я понимаю, что Linux и Windows ничем не отличаются в этом отношении ...

Пример ... Сценарий копирования, который выполняет копирование обычного файла в незащищенное местоположение и файла, пытающегося скопировать в защищенное место, затем снова обычного копирования.

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

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

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

Уильям Хилсум
источник
1
... и я должен сказать, что после перечитывания моего ответа и вашего вопроса - я не на 100% уверен в том, что вы спрашиваете ... Надеюсь, это поможет, но не слишком уверен: /
Уильям Хилсум