主题,用户和主体之间的含义和区别是什么?


173

在安全框架的上下文中,主题用户主体这几个词通常会出现,我无法找到一个清晰的定义以及它们之间的区别。

那么,这些术语的确切含义是什么?为什么需要对主体主体进行这些区分?

Answers:


277

这些是按照属,种和个体是分级的方式进行分级的。

  • 主题 -在安全上下文中,主题是请求访问对象的任何实体。这些是通用术语,用于表示请求访问的事物和针对其进行请求的事物。当您登录到应用程序时,您就是主题,而该应用程序就是对象。当有人敲门时,访问者是请求访问权限的对象,而您的家是请求访问权限的对象。
  • 主体 - 由帐户,角色或其他唯一标识符表示的主题子集。当我们达到实现细节的级别时,主体是我们在访问控制列表中使用的唯一键。它们可能代表人类用户,自动化,应用程序,连接等。
  • 用户 - 主体的一个子集,通常是指操作员。区别随着时间的流逝而变得模糊,因为单词“ user”或“ user ID”通常与“ account”互换。然而,当你需要进行广泛的一类的东西,是区分校长和这些是互动的运营商在非确定性的方式驾驶交易的子集,“用户”是正确的字。

主语/宾语继承自与语法相同的术语。句子中的主语是演员,物是被表演的东西。从这个意义上讲,自发明计算机以来就一直在使用。在安全上下文中,主题是可以发出请求的任何内容。如上所述,这不必限于IT安全性,因此是非常广泛的分类。有趣的是,主题暗示对象。没有物体,就没有主体。

校长是学科要解决的问题。出示信用卡时,您是主题,而帐号是本金。在其他情况下,您的用户ID或国家签发的身份证明是您的主体。但是,校长可以与不是人的许多类型的学科相关联。当应用程序请求系统级功能时,委托人可以是已签名的可执行代码模块的签名者,但即使在那种情况下,驱动请求的用户仍然是主题。

用户比主题或主体更具体,因为它通常指的是交互式操作员。这就是为什么我们有一个图形用户界面而不是图形主体界面的原因。用户是可以解析为主体主题的实例。单个用户可以解析为任何数量的委托人,但是任何委托人都可以解析为单个用户(假设人们遵守不共享ID的要求)。在上面的例子中,可执行代码模块的签名者是绝对用户,但它一个有效的主体。尝试加载模块的交互式操作员是用户。

如评论中所述,即使权威人士也不同意这些条款。在准备此响应时,我搜索了NIST,SANS,IEEE,MITER和一些“准权威”资源,例如安全性考试指南。我发现没有一个至少是准权威的资料涵盖了这三个术语,并且在用法上都存在很大差异。这是我对条款内容应该被使用,但是从实际情况来看,当你凝视着一本手册在半夜,定义往往是任何厂商或作家说,他们是。希望尽管这里的答复能够提供足够的见识,以便使用这些术语来解决问题并解析任何安全文档。


3
将事物分解为主题,主体,用户有什么好处,它的额外复杂性从这额外的复杂性中我们可以获得什么好处?
AMS

19
选择正确的特异性水平的能力。我们能够区分目标与队列或主题,这与我们获得的好处相同。在分类法中不同级别的特异性之间进行选择的能力可以实现精确的表达,从而更好地将作者的意图传达给读者。进行编程时,我们有一种奢望/诅咒,即CP​​U仅会以一种方式解释我们的指令,因此我们不得不使用它的精度。但是在人类语言中,我们需要细微差别和精确度才能有效地传达含义。
T.Rob

1
T.Rob,太棒了,但是您能否澄清“用户-主体的子集”?如果John是主题,而“ account#123”是他的主体,则用户是谁?有两个约翰的吗?由于属>物种>个人越来越具体,约翰(用户)应该比约翰(主题)更具体。还是我错过了什么?
2014年

1
考虑两个主体,其中#123是John,而#124是指服务帐户。我们可能想在密码策略,登录功能等方面对待这些不同。“用户”类型的主体受密码复杂性和有效期策略的约束,而“服务帐户”类型的主体甚至可能没有密码。当我们开始对主体类型进行分类时,我们会创建子集。有帮助吗?还是我只是搅动了更多的泥浆?
T.Rob

是的,有帮助。因此,具体而言,是否需要对以下内容进行更正?您可能希望将其复制并粘贴到Notepad ++之类的编辑器中,并在每个John之前放置一个换行符(因此不允许在注释中使用换行符): John (human) SUBJECT > username_1 PRINCIPAL > password_1 USER John (human) SUBJECT > username_1 PRINCIPAL > password_2 USER John (human) SUBJECT > username_1 PRINCIPAL > smartcard_1 USER John (human) SUBJECT > username_1 PRINCIPAL > cellphone_1 USER
mellow-yellow


19

我认为该术语取自JAAS

当应用程序使用JAAS身份验证来验证用户(或其他实体,例如服务)时,将创建一个Subject。主题的目的是代表经过身份验证的用户。一个Subject由一组Principal组成,其中每个Principal代表该用户的身份。例如,一个主题可以有一个名字校长(“ Susan Smith”)和一个社会安全号码校长(“ 987-65-4321”),从而将该主题与其他主题区分开。


2
我以前看过这个定义,它的定义过于密集,您能否详细说明一下,尤其是用户与主体有何不同,为什么使用术语主题而不仅仅是用户。如果这些术语的含义超出了JAAS的含义,那么我非常想熟悉该含义,如果这些术语是JAAS的发明,那么我想创建该术语的Sun工程师会为这些概念的含义选择较差的名称。我已经问了很多程序员这个问题,但还没有得到明确的答案,每个人似乎对这些术语都有不同的理解。
AMS

似乎校长只是识别主题的一种方法。换句话说,任何委托人理论上都可以充当用户数据库上的主键。
白金Azure

3
该词典远比JAAS早。JAAS只是有时以非标准方式重用其中的一些。引发此问题的部分问题是,这些概念是从使用术语的上下文中学习的,然后以略有不同的方式重用。当很难找到或仅仅忽略权威来源时,含义就会随着时间而漂移。当涉及到安全性时,精度是绝对要求,这种向歧义性的转变会降低我们构建和实施安全设计的能力。
T.Rob

@ T.Rob为您提供任何您可以分享的论文标题或权威参考。
AMS

不幸的是,即使权威人士也不同意。SANS完全没有定义主体或主题。ly/ hl4rUP和NIST bit.ly/fE7NJs专门将主题定义为人。同样,其他“权威”资料来源也含糊不清,考虑到在这一领域中保持清晰的重要性,这令人非常失望。IEE有一个词汇表,但是您只能通过成员身份或订阅来阅读它,因此它在与广泛受众的讨论中使用有限。我的回应部分基于Shon Harris的CISSP考试指南。
T.Rob

12

主体是请求服务的实体。它可以是用户或进程。也许这就是为什么选择名称Subject而不是user的原因。

当主题尝试访问服务时,必须首先对该主题进行身份验证。成功的身份验证以加载该主题的安全主体结束。例如,在基于角色的访问控制系统中,经过身份验证(登录)的用户通常将具有两个主体-userId和roleId。在这样的系统中,为角色和用户都指定了特权(即谁可以访问什么)。在授权期间(即检查是否应允许所请求的服务),安全系统将检查两个委托人的可访问性。

因此,从授权的角度来看,委托人是允许或禁止访问的实际实体。主题只是拥有某些主体的用户/线程/进程。


每个科目有多个原则有什么好处?
AMS

6
我可以想到两个好处:(1)考虑使用访问服务(对象)的委托人UserId(“ Alice”),Role(“ Manager”),Department(“ Sales”)的用户Alice。然后可以将服务访问控制指定为“允许角色(经理)”或“不允许部门(销售)”等,而不是指定爱丽丝是否可以访问它。由于安全管理员无需为所有服务的所有用户指定访问权限,因此这种访问控制系统更易于管理。
rahulmohan 2011年

4
(2)在企业系统中,通常必须先通过多个系统对用户进行身份验证,然后才能执行某些组合服务。这些系统中的每个系统可能都有其自己的访问控制机制,这些机制需要不同的详细信息-一个系统使用SSN,另一个系统使用userId。因此,同一主题应同时拥有两个主体才能访问这两个主题
rahulmohan

1
我感到只要用一个句子,即“一个委托人基本上就是一个小组”,就可以解决99%对该术语的混淆。
Trejkaz

1
?!...为什么说校长是团体?
拉斐尔2014年

10

正如T.Rob解释的那样,“主题”是请求访问对象的任何实体。从这一点开始,我发现了对javax.security.auth.Subject代码的注释,我发现它非常有用并且易于理解:

“主体可能具有多个身份。每个身份都表示为主体中的主体。主体只是将名称绑定到主体。例如,碰巧是人的主体爱丽丝可能有两个主体:一个主体绑定” “ Alice Bar”(驾驶执照上的名字)指向该科目,另一个将她的学生身份证上的数字“ 999-99-9999”绑定到该科目。两个负责人均指的是同一科目,即使每个名称不同。”

希望能帮助到你。


7

这是Oracle JAVA SE文档中以下说明的链接

主题,主体,身份验证和凭据要授权对资源的访问,应用程序首先需要对请求源进行身份验证。JAAS框架定义了主题主题来表示请求的来源。主题可以是任何实体,例如个人或服务。主题由javax.security.auth.Subject类表示。

认证表示验证主体身份的过程,必须以安全的方式执行;否则,作恶者可能会冒充他人来访问系统。身份验证通常涉及对象展示某种形式的证据以证明其身份。此类证据可能是仅受试者可能知道或拥有的信息(例如密码或指纹),也可能是仅受试者可能产生的信息(例如使用私钥签名的数据)。

身份验证后,将在主题中填充关联的身份或主体(类型为java.security.Principal)。一个主题可能有很多校长。例如,一个人可能有一个名字校长(“ John Doe”)和一个SSN校长(“ 123-45-6789”),这与其他主题有所区别。

除了关联的主体外,主题还可以拥有与安全性相关的属性,这些属性称为凭据。凭证可能包含用于对主体进行新服务身份验证的信息。此类凭据包括密码,Kerberos票证和公共密钥证书。凭据可能还包含使主体能够执行某些活动的数据。例如,加密密钥代表使主体能够签名或加密数据的凭据。公共和私有凭证类不是核心J2SE API的一部分。因此,任何类别都可以代表一个凭证。


尽管我同意T.Rob的回答,但来自Aram的回答(说“一个主题可能是任何实体”)在ERM中的提示:大多数数据库的实体关系模型。在该模型中,在安全性上下文中,“实体”对应于“主题”,但是根据您要建模的内容,它可以是主体(银行帐户,SSN#)或用户(约翰·史密斯),如Marinus所建议回答。维基百科: en.wikipedia.org/wiki/Entity%E2%80%93relationship_model
yellow-yellow

0

根据rahulmohan的说法,我认为,在“身份验证”为子喷射之前,在“身份验证”为主要喷射之后,从不同的角度来看,一个子喷射可能具有多个主要喷射

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.