【问题标题】:Verifying User Credentials验证用户凭据
【发布时间】:2013-02-15 02:57:44
【问题描述】:

我有一个独特的困惑。

我正在开发一个测试用户帐户权限的类,我已经介绍了大部分基础知识。但我最关心的是针对NullSID 进行测试。

我担心的原因是:

if(user != null)
{
   role.IsInRole(WindowsBuiltInRole.Administrator);
}

显然是一个简单的实现来演示,但WindowsBuiltInRole 会严格基于单个机器还是针对域进行检查?如果用户的域账号确实是Administrator,会测试成功吗?

或者测试五个或六个域SID 令牌的更好方法是什么? 网络服务帐户等其他用户帐户是否会以相同的方式进行操作?确保令牌价值真实性的最佳方法是什么。

任何输入都会很棒。

【问题讨论】:

    标签: c# windows-security


    【解决方案1】:

    WindowsBuiltInRole 枚举与 Windows SIDs 完全对应,并且与与 Windows 内置组 关联的众所周知的 SIDS:Well-known security identifiers in Windows operating systems 完全对应,所有 SID 都以“S-1”开头-5-32-'。

    枚举值的整数值对应的是sid中的最后一个数字,所以,因为WindowsBuiltInRole.Administrator是544,所以对应的是S-1-5-32-544。因此,您使用此代码检查的内容实际上是用户是否属于管理员组:

    SID:S-1-5-32-544

    姓名:管理员

    描述:内置组。 操作系统初始安装后,唯一 该组的成员是管理员帐户。当一台电脑 加入域,域管理员组被添加到管理员 团体。当服务器成为域控制器时,企业 Admins 组也被添加到 Administrators 组中。

    【讨论】:

    • 那是一篇很棒的帖子,所以默认情况下BuiltInRole 会比较本地计算机、工作组或域,看看那些默认的Roles 属于哪个?但它在物理上使用SID Token
    • 检查是在管理员组上完成的,因此它完全取决于您运行代码的机器在该组中的内容。而已。使用的底层 Windows API 只是带有相应 SID 的 CheckTokenMembership msdn.microsoft.com/en-us/library/windows/desktop/aa376389.aspx
    • 谢谢,当我在寻找有关处理它的理想方法的答案时,我不知道我是怎么错过的。不过,你赢得了它。
    【解决方案2】:

    根据在以下位置找到的 WindowsBuiltInRole 枚举的定义:

    WindowsBuiltInRole Enumeration

    WindowsBuiltInRole.Administrator 角色确实适用于计算机和域,没有任何限制。

    WindowsBuiltInRole.PowerUser 将能够运行应用程序,但不能安装或卸载东西。

    WindowsBuiltInRole.AccountAdministrator 可以管理帐户甚至更改权限,但不能进行域范围的更改(如在分布式部署中)。

    WindowsBuiltInRole.BackupOperator 可以覆盖安全限制,仅用于备份或恢复文件。

    WindowsBuiltInRole.Replicator 支持域中的文件复制。

    这些不同的角色可能看起来很模糊,但可以推断出除了管理员之外的所有人都可以执行一些管理员任务,但不是全部。

    【讨论】:

    • 但是其他BuiltInRole 帐户呢?它们也会跨越Domain 吗?
    • 我扩展了答案,希望它令人满意。其他角色有一些类似管理员的权限,而不是全部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2016-11-10
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多