Что именно делает «Запуск от имени администратора»?

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

Однако, если я запускаю свою консоль, щелкнув правой кнопкой мыши и выбрав «Запуск от имени администратора», установка работает нормально, даже если диалоги UAC все еще присутствуют.

Мой пользователь уже является членом группы «администраторы», так что же именно делает «запуск от имени администратора», чтобы моя установка работала?

Мой конкретный вопрос заключается именно в следующем: что делает «запуск от имени администратора»? Ни один из ответов до сих пор не касается этого. (например, запускает ли он новый процесс как пользователь «Администратор»? Или он запускает процесс как текущий пользователь, но с повышенными привилегиями? Если да, то какие привилегии? Чем это отличается от привилегий, которые я получаю от своего пользователь находится в группе «Администраторы»?

(В частности, я использую «Консоль» из SourceForge, а не обычное окно CMD, но Я не думаю, что это важно. Все это происходит при установке пакета «распространения» Python путем запуска «python Distribute_setup.py» на недавно установленном Python3 MSI с python.org. Это 32-разрядный Python в 64-разрядной Windows. См. раздел Установка и распространение Python в Windows 7 дает Ошибка записи... разрешение отклонено)


person Jonathan Hartley    schedule 24.01.2012    source источник
comment
Вам нужно выполнить поиск в Интернете по UAC и прочитать об этой довольно старой технологии.   -  person David Heffernan    schedule 24.01.2012
comment
Я не понимаю, почему вы говорите, что Дэвид — мой вопрос не о UAC, а о «запуске от имени администратора». Я провел много поисковых запросов в Интернете, потратив большую часть дня на то, чтобы понять это, но пока не нашел ответов.   -  person Jonathan Hartley    schedule 24.01.2012
comment
Ваш вопрос определенно касается UAC. Запуск от имени администратора запускает процесс с токеном администратора, а не токеном с ограниченным доступом. Выполните поиск в Интернете и прочитайте о различных типах токенов.   -  person David Heffernan    schedule 24.01.2012
comment
Хорошо, спасибо. Неудивительно, что мои поиски не увенчались успехом. :-)   -  person Jonathan Hartley    schedule 24.01.2012
comment
В этой статье хорошо объясняется: Научите свои приложения правильно играть с помощью контроля учетных записей пользователей Windows Vista — msdn.microsoft.com/en-us/magazine/cc163486.aspx   -  person JamieSee    schedule 03.02.2012


Ответы (8)


Когда вы входите в систему, Windows создает токен доступа. Это идентифицирует вас, группы, членом которых вы являетесь, и ваши привилегии. И обратите внимание, что является ли пользователь администратором или нет, определяется тем, является ли пользователь членом группы администраторов.

Без UAC, когда вы запускаете программу, она получает копию маркера доступа, и это определяет, к чему программа может получить доступ.

С UAC, когда вы запускаете программу, она получает токен ограниченного доступа. Это исходный токен доступа с удаленными из списка групп «Администраторами» (и некоторыми другими изменениями). Даже если ваш пользователь является членом группы администраторов, программа не может использовать права администратора.

Когда вы выбираете «Запуск от имени администратора», а ваш пользователь является администратором, программа запускается с исходным токеном неограниченного доступа. Если ваш пользователь не является администратором, вам будет предложено ввести учетную запись администратора, и программа запустится под этой учетной записью.

person arx    schedule 24.01.2012
comment
Когда я отключаю UAC, он не отключается полностью. Добавление этого в реестр и перезапуск, похоже, решает. Не уверен, почему? reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system /v EnableLUA /t REG_DWORD /d 0 /f - person Alex Kwitny; 17.05.2016
comment
Как это соотносится с командой runas? Это позволяет вам работать в качестве фактического администратора, а на моем компьютере он запрашивает пароль администратора, а у меня нет пароля администратора. - person CMCDragonkai; 23.12.2016

Итак... дальше копаем, с результатом. Кажется, хотя я запускал один процесс в обычном режиме и один «как администратор», у меня был выключен UAC. Включение UAC на средний уровень позволило мне увидеть другие результаты. В основном все сводится к уровням целостности, которых 5.

Браузеры, например, работают на низком уровне (1), а службы (системный пользователь) работают на системном уровне (4). Все очень хорошо объяснено в Проектирование механизма обеспечения целостности Windows. Когда UAC включен, процессы создаются на среднем уровне (добавляется SID S-1-16-8192, также известный как 0x2000), а при запуске от имени администратора процесс создается на высоком уровне (SID S-1-16-12288, также известный как 0x3000).

Таким образом, правильный ACCESS_TOKEN для обычного пользователя (средний уровень целостности):

0:000:x86> !token
Thread is not impersonating. Using process token...
TS Session ID: 0x1
User: S-1-5-21-1542574918-171588570-488469355-1000
Groups:
 00 S-1-5-21-1542574918-171588570-488469355-513
    Attributes - Mandatory Default Enabled
 01 S-1-1-0
    Attributes - Mandatory Default Enabled
 02 S-1-5-32-544
    Attributes - DenyOnly
 03 S-1-5-32-545
    Attributes - Mandatory Default Enabled
 04 S-1-5-4
    Attributes - Mandatory Default Enabled
 05 S-1-2-1
    Attributes - Mandatory Default Enabled
 06 S-1-5-11
    Attributes - Mandatory Default Enabled
 07 S-1-5-15
    Attributes - Mandatory Default Enabled
 08 S-1-5-5-0-1908477
    Attributes - Mandatory Default Enabled LogonId
 09 S-1-2-0
    Attributes - Mandatory Default Enabled
 10 S-1-5-64-10
    Attributes - Mandatory Default Enabled
 11 S-1-16-8192
    Attributes - GroupIntegrity GroupIntegrityEnabled
Primary Group:   LocadDumpSid failed to dump Sid at addr 000000000266b458, 0xC0000078; try own SID dump.
s-1-0x515000000
Privs:
 00 0x000000013 SeShutdownPrivilege               Attributes -
 01 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default
 02 0x000000019 SeUndockPrivilege                 Attributes -
 03 0x000000021 SeIncreaseWorkingSetPrivilege     Attributes -
 04 0x000000022 SeTimeZonePrivilege               Attributes -
Auth ID: 0:1d1f65
Impersonation Level: Anonymous
TokenType: Primary
Is restricted token: no.

Теперь отличия следующие:

S-1-5-32-544
Attributes - Mandatory Default Enabled Owner

для "Как администратор", в то время как

S-1-5-32-544
Attributes - DenyOnly

для неадмин.

Обратите внимание, что S-1-5-32-544 — ВСТРОЕНО\Администраторы. Также стало меньше привилегий, и самое главное, на что стоит обратить внимание:

администратор:

S-1-16-12288
Attributes - GroupIntegrity GroupIntegrityEnabled

в то время как для неадминистратора:

S-1-16-8192
Attributes - GroupIntegrity GroupIntegrityEnabled

Надеюсь, это поможет.

Дополнительная литература: http://www.blackfishsoftware.com/blog/don/creating_processes_sessions_integrity_levels

person Andrei    schedule 19.03.2013
comment
несколько голосов за добавление подробностей и ссылок на фон. - person Jonathan Hartley; 20.03.2013
comment
Андрей: Хорошая информация, но в следующий раз просто отредактируйте свой существующий ответ, чтобы добавить дополнительную информацию, а не создавать новый ответ. - person Lawrence Dol; 25.04.2013
comment
Последняя ссылка битая (404). - person Peter Mortensen; 31.07.2015
comment
Чудесный Process Explorer показывает всю эту информацию на вкладке Security окна Properties некоторого процесса. - person Liviu; 21.06.2019

ОБНОВЛЕНИЕ

«Запуск от имени администратора» — это просто команда, позволяющая программе продолжать некоторые операции, требующие прав администратора, без отображения предупреждений UAC.

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

Если вы запускаете приложение с помощью команды «запуск от имени администратора», вы уведомляете систему о том, что ваше приложение безопасно, и делаете что-то, что требует прав администратора, с вашим подтверждением.

Если вы хотите избежать этого, просто отключите UAC на панели управления.

Если вы хотите пойти дальше, прочитайте вопрос Разница между "Запуск от имени администратора" и группой администраторов Windows 7 на форуме Microsoft или этот вопрос суперпользователя.

person Alberto Solano    schedule 24.01.2012
comment
Привет. Спасибо за ответ, но я все еще очень смущен. Вы говорите, что «запуск от имени администратора» запускает процесс от имени другого пользователя? Пользователь «Администратор»? Это любопытно для меня, потому что выполнение whoami cygwin с такого терминала по-прежнему показывает мое исходное имя пользователя, а не администратора, и файлы, созданные с этого терминала, принадлежат мне, а не администратору. Вы также говорите, что у пользователя «Администратор» есть другие привилегии, которых нет у членов группы «администраторы»? - person Jonathan Hartley; 24.01.2012
comment
Отключение UAC позволяет избавиться от надоедливых диалогов, но это не решает мою основную проблему, заключающуюся в том, что программы установки из командной строки не работают из-за отсутствия привилегий. - person Jonathan Hartley; 24.01.2012
comment
@JonathanHartley Отключение UAC — плохая идея. Вы хотите видеть эти подсказки. - person David Heffernan; 24.01.2012
comment
@JonathanHartley Извините, я не очень хорошо объяснил. Я отредактировал ответ. Команда «запуск от имени администратора» необходима только для приложений, которым требуются права администратора, например запись в определенный каталог или выполнение каких-либо действий с системными файлами и т. д. Это необходимо также потому, что не всем приложениям требуется учетная запись Amnistrator для запуска. Если вы запускаете приложение с помощью команды «запуск от имени администратора», вы уведомляете систему о том, что ваше приложение безопасно и выполняет операцию, требующую прав администратора. - person Alberto Solano; 24.01.2012
comment
@DavidHeffernan признал и согласился, я согласился отключить UAC только в принципе, чтобы избавиться от диалогов, но на практике не стал бы этого делать. - person Jonathan Hartley; 25.01.2012
comment
@AlbertoSolano Привет. Спасибо за попытку, я ценю усилия, но в вашем ответе или комментарии по-прежнему ничего не описывает, что делает «запуск от имени администратора», чего не делает членство в «администраторах». Я понимаю, что для некоторых действий требуются привилегии администратора, и что «запуск от имени администратора» дает вам эти привилегии, но я не понимал (до прочтения ответа arx), почему у меня еще не было этих привилегий, учитывая, что мой пользователь уже является администратор. Спасибо. - person Jonathan Hartley; 25.01.2012

Такие вещи, как «повышает привилегии», «токен ограниченного доступа», «привилегия администратора»… что, черт возьми, такое привилегия администратора? нонсенс.

Вот ACCESS_TOKEN для процесса, который обычно запускается от пользователя, принадлежащего к группе администраторов.

0: kd> !process 0 1 test.exe
PROCESS 87065030  SessionId: 1  Cid: 0d60    Peb: 7ffdf000  ParentCid: 0618
    DirBase: 2f22e1e0  ObjectTable: a0c8a088  HandleCount:   6.
    Image: test.exe
    VadRoot 8720ef50 Vads 18 Clone 0 Private 83. Modified 0. Locked 0.
    DeviceMap 8936e560
    Token                             935c98e0
0: kd> !token -n 935c98e0
_TOKEN 935c98e0
TS Session ID: 0x1
User: S-1-5-21-2452432034-249115698-1235866470-1000 (no name mapped)
User Groups: 
 00 S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped)
    Attributes - Mandatory Default Enabled 
 01 S-1-1-0 (Well Known Group: localhost\Everyone)
    Attributes - Mandatory Default Enabled 
 02 S-1-5-32-544 (Alias: BUILTIN\Administrators)
    Attributes - Mandatory Default Enabled Owner 
 03 S-1-5-32-545 (Alias: BUILTIN\Users)
    Attributes - Mandatory Default Enabled 
 04 S-1-5-4 (Well Known Group: NT AUTHORITY\INTERACTIVE)
    Attributes - Mandatory Default Enabled 
 05 S-1-2-1 (Well Known Group: localhost\CONSOLE LOGON)
    Attributes - Mandatory Default Enabled 
 06 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)
    Attributes - Mandatory Default Enabled 
 07 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization)
    Attributes - Mandatory Default Enabled 
 08 S-1-5-5-0-85516 (no name mapped)
    Attributes - Mandatory Default Enabled LogonId 
 09 S-1-2-0 (Well Known Group: localhost\LOCAL)
    Attributes - Mandatory Default Enabled 
 10 S-1-5-64-10 (Well Known Group: NT AUTHORITY\NTLM Authentication)
    Attributes - Mandatory Default Enabled 
 11 S-1-16-12288 (Label: Mandatory Label\High Mandatory Level)
    Attributes - GroupIntegrity GroupIntegrityEnabled 
Primary Group: S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped)
Privs: 
 05 0x000000005 SeIncreaseQuotaPrivilege          Attributes - 
 08 0x000000008 SeSecurityPrivilege               Attributes - 
 09 0x000000009 SeTakeOwnershipPrivilege          Attributes - 
 10 0x00000000a SeLoadDriverPrivilege             Attributes - 
 11 0x00000000b SeSystemProfilePrivilege          Attributes - 
 12 0x00000000c SeSystemtimePrivilege             Attributes - 
 13 0x00000000d SeProfileSingleProcessPrivilege   Attributes - 
 14 0x00000000e SeIncreaseBasePriorityPrivilege   Attributes - 
 15 0x00000000f SeCreatePagefilePrivilege         Attributes - 
 17 0x000000011 SeBackupPrivilege                 Attributes - 
 18 0x000000012 SeRestorePrivilege                Attributes - 
 19 0x000000013 SeShutdownPrivilege               Attributes - 
 20 0x000000014 SeDebugPrivilege                  Attributes - 
 22 0x000000016 SeSystemEnvironmentPrivilege      Attributes - 
 23 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default 
 24 0x000000018 SeRemoteShutdownPrivilege         Attributes - 
 25 0x000000019 SeUndockPrivilege                 Attributes - 
 28 0x00000001c SeManageVolumePrivilege           Attributes - 
 29 0x00000001d SeImpersonatePrivilege            Attributes - Enabled Default 
 30 0x00000001e SeCreateGlobalPrivilege           Attributes - Enabled Default 
 33 0x000000021 SeIncreaseWorkingSetPrivilege     Attributes - 
 34 0x000000022 SeTimeZonePrivilege               Attributes - 
 35 0x000000023 SeCreateSymbolicLinkPrivilege     Attributes - 
Authentication ID:         (0,14e4c)
Impersonation Level:       Anonymous
TokenType:                 Primary
Source: User32             TokenFlags: 0x2000 ( Token in use )
Token ID: d166b            ParentToken ID: 0
Modified ID:               (0, d052f)
RestrictedSidCount: 0      RestrictedSids: 00000000
OriginatingLogonSession: 3e7

... а вот ACCESS_TOKEN для процесса, который обычно запускается одним и тем же пользователем с «Запуск от имени администратора».

TS Session ID: 0x1
User: S-1-5-21-2452432034-249115698-1235866470-1000 (no name mapped)
User Groups: 
 00 S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped)
    Attributes - Mandatory Default Enabled 
 01 S-1-1-0 (Well Known Group: localhost\Everyone)
    Attributes - Mandatory Default Enabled 
 02 S-1-5-32-544 (Alias: BUILTIN\Administrators)
    Attributes - Mandatory Default Enabled Owner 
 03 S-1-5-32-545 (Alias: BUILTIN\Users)
    Attributes - Mandatory Default Enabled 
 04 S-1-5-4 (Well Known Group: NT AUTHORITY\INTERACTIVE)
    Attributes - Mandatory Default Enabled 
 05 S-1-2-1 (Well Known Group: localhost\CONSOLE LOGON)
    Attributes - Mandatory Default Enabled 
 06 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)
    Attributes - Mandatory Default Enabled 
 07 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization)
    Attributes - Mandatory Default Enabled 
 08 S-1-5-5-0-85516 (no name mapped)
    Attributes - Mandatory Default Enabled LogonId 
 09 S-1-2-0 (Well Known Group: localhost\LOCAL)
    Attributes - Mandatory Default Enabled 
 10 S-1-5-64-10 (Well Known Group: NT AUTHORITY\NTLM Authentication)
    Attributes - Mandatory Default Enabled 
 11 S-1-16-12288 (Label: Mandatory Label\High Mandatory Level)
    Attributes - GroupIntegrity GroupIntegrityEnabled 
Primary Group: S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped)
Privs: 
 05 0x000000005 SeIncreaseQuotaPrivilege          Attributes - 
 08 0x000000008 SeSecurityPrivilege               Attributes - 
 09 0x000000009 SeTakeOwnershipPrivilege          Attributes - 
 10 0x00000000a SeLoadDriverPrivilege             Attributes - 
 11 0x00000000b SeSystemProfilePrivilege          Attributes - 
 12 0x00000000c SeSystemtimePrivilege             Attributes - 
 13 0x00000000d SeProfileSingleProcessPrivilege   Attributes - 
 14 0x00000000e SeIncreaseBasePriorityPrivilege   Attributes - 
 15 0x00000000f SeCreatePagefilePrivilege         Attributes - 
 17 0x000000011 SeBackupPrivilege                 Attributes - 
 18 0x000000012 SeRestorePrivilege                Attributes - 
 19 0x000000013 SeShutdownPrivilege               Attributes - 
 20 0x000000014 SeDebugPrivilege                  Attributes - 
 22 0x000000016 SeSystemEnvironmentPrivilege      Attributes - 
 23 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default 
 24 0x000000018 SeRemoteShutdownPrivilege         Attributes - 
 25 0x000000019 SeUndockPrivilege                 Attributes - 
 28 0x00000001c SeManageVolumePrivilege           Attributes - 
 29 0x00000001d SeImpersonatePrivilege            Attributes - Enabled Default 
 30 0x00000001e SeCreateGlobalPrivilege           Attributes - Enabled Default 
 33 0x000000021 SeIncreaseWorkingSetPrivilege     Attributes - 
 34 0x000000022 SeTimeZonePrivilege               Attributes - 
 35 0x000000023 SeCreateSymbolicLinkPrivilege     Attributes - 
Authentication ID:         (0,14e4c)
Impersonation Level:       Anonymous
TokenType:                 Primary
Source: User32             TokenFlags: 0x2000 ( Token in use )
Token ID: ce282            ParentToken ID: 0
Modified ID:               (0, cddbd)
RestrictedSidCount: 0      RestrictedSids: 00000000
OriginatingLogonSession: 3e7

Как видите, разница только в идентификаторе токена:

Token ID: d166b            ParentToken ID: 0
Modified ID:               (0, d052f)

vs

Token ID: ce282            ParentToken ID: 0
Modified ID:               (0, cddbd)

Извините, я пока не могу добавить много света, но я все еще копаю.

person Andrei    schedule 14.03.2013
comment
Характеристики бетона хорошие. Удачи вам в копании. - person Jonathan Hartley; 14.03.2013

Windows 7 требует, чтобы вы намеренно запрашивали определенные привилегии, чтобы вредоносная программа не могла причинить вам вред. Если бы бесплатный калькулятор, который вы скачали, нужно было запустить от имени администратора, вы бы знали, что что-то не так. Существуют команды ОС для повышения привилегий вашего приложения (которое будет запрашивать подтверждение у пользователя).

Хорошее описание можно найти по адресу:

http://msdn.microsoft.com/en-us/magazine/cc163486.aspx#S4

person vextorspace    schedule 24.01.2012
comment
Привет. Спасибо за ответ, но все предложения в нем уже хорошо понятны. Вы не ответили на фактический вопрос, что делает «запуск от имени администратора», чего не делает член группы администраторов? - person Jonathan Hartley; 24.01.2012
comment
Это повышает привилегии (при условии, что вашему пользователю разрешено). - person vextorspace; 24.01.2012
comment
Ссылка фактически не работает (она перенаправляет на ‹msdn.microsoft.com/en-us/magazine/ee310108.aspx#S4›;, MSDN Magazine Issues and Downloads). - person Peter Mortensen; 31.07.2015

Команда Run as *Anything избавляет вас от необходимости выходить из системы и входить в нее как пользователь, для которого вы используете команду runas.

Причина, по которой программы запрашивают эту повышенную привилегию, началась с Black Comb и папки Panther. В Windows нет доступа к ядру, если только через приглашение администратора, и тогда это только виртуальное отношение с ядром операционной системы.

Ура!

person user5244305    schedule 19.08.2015

Немного яснее... Программное обеспечение с доступом в режиме kernel имеет полный доступ ко всем данным компьютера и его оборудованию.

Начиная с Windows Vista, Microsoft снова запретила всем процессам ввода-вывода напрямую обращаться к ядру (кольцо 0). Самое близкое, что мы получаем, это папка, созданная как виртуальный раздел доступа к ядру, но технически нет доступа к самому ядру; ядро идет навстречу.

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

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

Доступ к ядру аналогичен корневому доступу в Linux. Когда вы повышаете свои разрешения, вы изолируете себя от корня C:\ и любых прекрасных переменных среды, содержащихся внутри.

Если вы помните BSOD, это было выключение ОС, когда она считала, что ошибка ввода-вывода достигла ядра.

person user5244305    schedule 19.08.2015

Ладно, повторим...

Актуальный вопрос (и отличный вопрос)

"Что делает "запуск от имени администратора", чего не делает член группы администраторов?"

(Ответ) 1. Это позволяет вам вызывать права администратора во время сеанса пользователя.

Примечание: вопрос поставлен неправильно; один — это команда, а другой — групповой объект для применения политик.

Откройте командную строку и введите runas /?.

В нем будут перечислены все переключатели, которые может использовать командная строка runas.

Что касается группы администраторов, то она основана на GPEDIT или SECPOL, а также на том, присутствует ли администратор домена или нет, или присутствует сеть, или нет.

Обычно эти вещи налагают ограничения на компьютеры, на которые не влияет группа администраторов.

Вопрос должен быть

Что делает администратор runas, который работает от имени пользователя?

OR

Что делает группа администраторов, чего не может пользовательская группа?

Вы смешиваете яблоки и апельсины.

person user5244305    schedule 20.08.2015