Всякий раз, когда появляется всплывающее окно Windows UAC, чтобы предоставить права администратора программы, есть только ответ Да / Нет.
Есть ли способ ограничить возможности программы при запуске от имени администратора. Большинству программ нужны не все привилегии, а лишь немного, что не может сделать обычный пользователь.
В Linux есть несколько способов, о которых я могу думать прямо сейчас:
Возможности root: разделите привилегии root на меньшие возможности
fakeroot
: когда программа проверяет наличие root
но на самом деле это не нужно
SELinux
и аналогичные инструменты: все должно быть явно предоставлено
Другой способ спросить: Могу ли я ограничить размер ущерба, который программа может причинить, предоставляя права администратора.
Пример: Предоставьте программе право видеть одну конкретную программу в адресном пространстве, но не все из них.
Приглашение UAC - это предложение по принципу «все или ничего»: вы либо разрешаете доступ администратору программы, либо не запускаете его вообще.
Это не обязательно означает, что вы не можете достичь своих целей другими способами. Например, если вы хотите предоставить пользователю доступ к адресному пространству определенного процесса, вы можете изменить разрешения для этого процесса. То же самое с файлами и ключами реестра, хотя обычно нецелесообразно изменять разрешения для частей файловой системы и реестра, которые вам не принадлежат.
Этот вопрос о переполнении стека обсуждает способы запуска приложения, которое запрашивает доступ администратора (но на самом деле не нуждается в нем).
Теоретически вы можете предоставить индивидуальные привилегии (например, право резервного копирования) отдельным учетным записям, но, хотя ядро все еще поддерживает это, UAC нарушает это. Практически все права администратора, которые вы можете предоставить кому-то, в любом случае можно использовать для получения неограниченного доступа администратора.
Более обычный подход, если вы хотите разрешить пользователю выполнять определенные административные задачи, - это написать системную службу, выполняющую работу от имени пользователя. Обычно это включает разделение приложения на две части: одна работает как системная служба и имеет права администратора, а другая работает на рабочем столе пользователя и не работает.
Дополнение: больше не верно, что UAC нарушает предоставление индивидуальных привилегий отдельным учетным записям. Если вы введете свое собственное (не администраторское) имя пользователя и пароль в командной строке UAC, процесс с повышенными правами получит все индивидуальные привилегии, предоставленные вашей учетной записи.