在Windows 7上,我有一个命令行程序因文件写入权限错误而失败,并且每次运行来自“未知发布者”的命令行程序时都会弹出恼人的UAC对话框。
但是,如果我通过右键单击并选择“以管理员身份运行”来启动我的控制台,那么即使UAC对话框仍然存在,安装也能正常运行。
我的用户已经是“管理员”群组的成员,那么“以管理员身份运行”究竟做了什么才能使我的安装工作?
我的具体问题正是:“以管理员身份运行”是做什么的?迄今为止的答案都没有解决这个问题。 (例如,它是以“管理员”用户身份运行新进程吗?还是以当前用户身份运行进程,但是具有提升的权限?如果是,具有哪些权限?这与我从我获得的权限有什么不同?用户在“管理员”组中?
(具体来说,我使用的是来自SourceForge的'控制台',而不是常规的CMD窗口,但我认为这不重要。这就是安装Python'distribute'包时运行'来自python.org的新安装的Python3 MSI上的python distribute_setup.py'。它是64位Windows上的32位Python。参见 Installing Python and distribute on Windows 7 gives "Writing failed ... permission denied" )
答案 0 :(得分:99)
登录Windows时会创建访问令牌。这可以识别您,您所属的群组以及您的权限。请注意,用户是否是管理员取决于用户是否是Administrators组的成员。
如果没有UAC,当您运行程序时,它会获取访问令牌的副本,这将控制程序可以访问的内容。
使用UAC,当您运行程序时,它会获得受限制的访问令牌。这是原始访问令牌,其中“管理员”已从组列表中删除(以及一些其他更改)。即使您的用户是Administrators组的成员,该程序也无法使用管理员权限。
当您选择“以管理员身份运行”并且您的用户是管理员时,将使用原始的无限制访问令牌启动该程序。如果您的用户不是管理员,系统会提示您输入管理员帐户,该程序将在该帐户下运行。
答案 1 :(得分:9)
所以...更多的挖掘,结果。似乎虽然我运行了一个正常的流程和一个“作为管理员”,但我关闭了UAC。将UAC变为中等让我看到了不同的结果。基本上,这一切都归结为完整性级别,即5。
例如,浏览器在低级别(1)运行,而服务(系统用户)在系统级别(4)运行。在 Windows Integrity Mechanism Design 中,一切都得到了很好的解释。启用UAC时,将创建中等级别的进程(添加SID S-1-16-8192 AKA 0x2000),而当“以管理员身份运行”时,将创建高级别进程(SID S-1-16-12288 aka 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是BUILTIN \ Administrators。此外,特权较少,最重要的是要注意:
管理员:
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
答案 2 :(得分:1)
<强>更新强>
“以管理员身份运行”只是一个命令,使程序能够继续执行需要管理员权限的某些操作,而不显示UAC警报。
即使您的用户是管理员组的成员,某些像您这样的应用程序也需要管理员权限才能继续运行,因为如果应用程序执行某些特殊操作(例如编辑系统文件或其他操作),则认为该应用程序不安全。这就是Windows需要管理员权限才能执行应用程序的原因,它会通过UAC警报通知您。并非所有应用程序都需要运行Amnistrator帐户,而某些应用程序(如您的应用程序)需要具有管理员权限。
如果您使用“以管理员身份运行”命令执行应用程序,则通过系统确认通知系统您的应用程序是安全的并且需要管理员权限。
如果您想避免这种情况,只需在控制面板上禁用UAC即可。
如果您想更进一步,请阅读Microsoft论坛上的问题Difference between "Run as Administrator" and Windows 7 Administrators Group或this超级用户问题。
答案 3 :(得分:1)
诸如“提升权限”,“限制访问令牌”,“管理员权限”之类的东西......无论如何,管理员权限到底是什么?是无稽之谈。
以下是通常从属于Administrators组的用户运行的进程的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
如您所见,唯一的区别是令牌ID:
Token ID: d166b ParentToken ID: 0
Modified ID: (0, d052f)
vs
Token ID: ce282 ParentToken ID: 0
Modified ID: (0, cddbd)
很抱歉,我还不能为此添加太多亮点,但我还在挖掘。
答案 4 :(得分:0)
Windows 7要求您有意要求某些特权,以便恶意程序不会对您造成不良影响。如果您下载的免费计算器需要以管理员身份运行,您就会知道出现了什么。有一些OS命令可以提升应用程序的权限(它将请求用户确认)。
可以在以下网址找到一个好的描述:
答案 5 :(得分:0)
Run as * Anything命令可以使您免于注销并以您使用runas命令的用户身份登录。
程序要求提升此权限的原因始于Black Comb和Panther文件夹。除非通过Admin提示符,否则在Windows中有0个访问内核的权限,然后它只是与O / S内核的虚拟关系。
Hoorah!
答案 6 :(得分:0)
更清楚......具有内核模式访问权限的软件程序可以完全访问所有计算机的数据及其硬件。
自Windows Vista以来,Microsoft已经阻止任何和所有I / O进程再次直接访问内核(ring 0)。我们得到的最接近的是一个创建为虚拟内核访问分区的文件夹,但从技术上讲,它不能访问内核本身;内核遇到了中途。
这是因为软件本身决定使用哪个令牌,因此如果它要求管理员访问令牌,而不是像在Windows XP上那样允许与内核通信,则会提示您允许访问内核,每个时间。更改UAC可能会减少提示,但内核不会提示。
即使以管理员身份登录,您也会以标准用户身份运行进程,直到系统提示您提升权限。我相信以管理员身份登录后您无法输入凭据。但它也写入管理员用户文件夹结构。
内核访问类似于Linux中的root访问权限。当您提升权限时,您将自己与C:\的根隔离开来,并且包含在其中的任何可爱的环境变量。
如果你还记得BSOD,当它认为糟糕的I / O到达内核时,这就是操作系统关闭。
答案 7 :(得分:0)
好的,让我们重新迭代......
实际问题(并且是一个很好的问题)
“'作为管理员运行'做什么,管理员组的成员不是吗?”
(答案)1。它允许您在用户会话下调用管理员权限。
注意:这个问题是错误的;一个是命令,另一个是应用策略的组对象。
打开命令提示符并键入runas /?
。
这将列出runas
命令行可以使用的所有开关。
对于管理员组,这是基于GPEDIT或SECPOL以及域管理员是否存在或网络是否存在。
通常这些内容会对管理员组不受影响的计算机施加限制。
问题应该是
runas管理员以用户身份运行的是什么?
OR
管理员组执行的操作与自定义用户组无关?
你正在混合苹果和橘子。