【发布时间】:2016-05-29 20:46:18
【问题描述】:
我有一个问题(希望)有人可以解释一下。 我正在编写一个 Powershell 脚本,它将证书导入本地机器存储,并将每个人组的读取权限分配给证书上的私钥。
现在,我确实有一个可以完成此操作的工作脚本,但我注意到我有一个名为“LogonSessionId_0_some-random-number”的帐户为私钥上的 ACL 分配了读取权限,如下图所示:
起初我以为这是我的脚本可能会这样做,但是当我手动导入证书时,我得到了相同的结果。
有没有人见过这种情况或知道为什么会这样?这个帐户到底是什么,为什么要分配权限?我试图在这个问题上寻找一些答案,但没有找到答案。
不确定是否有帮助,但这是我导入证书并分配权限的代码部分:
$sslCert = gci 证书:\LocalMachine\My | WHERE {$_.Subject -match $getCerts} $sslCertPrivKey = $sslCert.PrivateKey $privKeyCertFile = Get-Item -path "$ENV:ProgramData\Microsoft\Crypto\RSA\MachineKeys\*" | WHERE {$_.Name -eq $sslCertPrivKey.CspKeyContainerInfo.UniqueKeyContainerName} $privKeyAcl = (Get-Item -Path $privKeyCertFile.FullName).GetAccessControl("Access") $permission = "所有人","阅读","允许" $accessRule = 新对象 System.Security.AccessControl.FileSystemAccessRule $permission $privKeyAcl.AddAccessRule($accessRule) 设置 Acl $privKeyCertFile.FullName $privKeyAcl我使用的是 Windows 10 专业版。
非常感谢任何帮助/见解!
【问题讨论】:
-
您需要检查 SID 的数字形式以确定,但大概是登录会话 SID。 (S-1-5-5-X-Y。)每当您登录时,或者更一般地说,每当发生交互式身份验证时,都会生成登录会话 ID 和关联的 SID。这些通常用于为特定登录会话中的所有进程提供对显示 GUI 所需的窗口站和桌面对象的必要访问权限。 (我不知道为什么在这种情况下会授予登录会话 SID 访问权限。)
-
感谢哈里·约翰斯顿!我认为这就是正在发生的事情,我仍然不确定为什么这个帐户也被授予访问权限。我查看了我的另一台生产服务器,并注意到当我在那里导入证书时也会发生同样的事情......这是在 Win 2K8 R2 操作系统上。无论如何,我想我只需要根据需要手动编辑此帐户,或者直接保留它。
-
在这种情况下,由于您向所有人授予读取权限,因此额外的权限是多余的。你不妨忽略它。
-
“您需要检查 SID 的数字形式才能确定,” 五年后,类似的问题。但是我如何获得 SID?我已经尝试了通常的
wmic命令(例如wmic useraccount where name='LogonSessionId_0_401541' get sid),但所有实验都只导致No Instance(s) Available.之类的东西(不重要的细节:我需要那个用户的SID,因为我必须在一个大文件的ACL 中替换那个用户树)。
标签: windows powershell permissions certificate acl