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