Якщо я відмовляю в запиті 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 не зовсім такий, як судо .


4
Власне, це те саме, що і судо. Запуск "sudo su" не додає привілеїв root до вашої поточної оболонки, вона запускає нову оболонку в окремому процесі. Якщо ви вийдете з цієї оболонки, ви повернетесь до першої.
Уайдард

1
Різниця між Windows і Unix полягає в тому, що програмісти Unix звикли робити роботи в підпроцесах, тому цілком природно запускати більш привілейований підпроцес для певної частини завдання, яка потребує привілеїв. У Windows звичніше робити все за один процес, і поділ роботи на окремі пільгові та непривілейовані частини (працює в окремих процесах) виглядає занадто схожим на важку роботу. (Звичайно, у багатьох випадках краще з’ясувати, що у вас немає необхідної пільги одразу, а не на півдорозі через роботу!)
Гаррі Джонстон,

19

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


4

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

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

Я розумію, що в Linux програма просто запускається і намагається зробити дію - якщо вона не має дозволу на цю дію - вона не зможе виконати цю дію, але продовжить. У наведеному вище прикладі - коли запускається сценарій копіювання в Linux як звичайний користувач, він скопіює звичайний файл, видасть дозвіл і скопіює другий файл - якщо працювати з sudo, він зробить усі три копії.

У цьому плані Windows точно такий же: запуск сценарію, як не адміністративний користувач, просто скопіює один, дозвіл видасть другий та скопіює наступний. З UAC він запустить усі три.

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


1
... і, я повинен сказати, що після перечитування моєї відповіді та вашого запитання - я не на 100% впевнений, що ви запитуєте ... Сподіваюся, це допоможе, але, не надто впевнений: /
Вільям Гілсум,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.