【发布时间】:2012-03-14 23:46:11
【问题描述】:
我正在为 Windows(XP/7) 平台编写一些 C++ 代码来检查与文件关联的权限。我想验证我正在阅读的文件不能由具有非提升权限的帐户写入。这就是我目前正在做的事情:
- 我得到了与调用 GetNamedSecurityInfo 的文件关联的 DACL
- 我用众所周知的 Sid 调用 CreateWellKnownSid,例如 WinAuthenticatedUserSid(用户组)
- 我调用 BuildTrusteeWithSid 以使用之前的 SID 构建受托人
- 我用之前创建的受托人调用 GetEffectiveRightsFromAcl 以获取有效的 acl
- 我检查 ACL 不包含写入标志集。
此代码非常适合用户组。对于可能对文件具有特定写入权限的其他组(例如所有人、访客或其他特定用户)呢?我想找到一个解决方案,我不需要枚举所有可能的 SID 并检查所有这些。是否有我可以使用的 SID,例如“除了管理员之外的任何东西”?
问候, 蚂蚁
【问题讨论】:
-
该文件可以有一个允许单个用户的 ACL。如果您依赖
GetEffectiveRightsFromAcl,这意味着您必须单独检查所有用户。另外,听起来你可以把所有的辛苦工作都交给AuthzAccessCheck()。
标签: c++ windows file-permissions