17

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

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

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

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

sudo su
./run_app

Скорее, чем:

./do_work1
sudo su
./du_work2

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

4 ответа4

19

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

12

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

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

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

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

4

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .