build模权限系统

你将如何build模一个系统来处理在应用程序中执行特定操作的权限?

安全模型是一个很大的(开放的)研究领域。 有大量的模型可供select,从简单的:

  • Lampson的访问控制matrix列出系统中的每个域对象和每个主体,以及允许主体在该对象上执行的操作。 这是非常详细的,如果实际上以这种方式实施,非常记忆密集。

  • 访问控制列表是对Lampsonmatrix的一种简化:认为它类似于稀疏matrix实现,该实现列出了对象,主体和允许的操作,并且不对Lampsonmatrix中的所有“空”条目进行编码。 访问控制列表可以包括'组'作为一个方便,列表可以通过对象或通过委托人(有时,通过程序,如AppArmor或TOMOYO或LIDS )存储。

  • 能力系统基于具有对象的引用或指针的想法; 一个进程可以访问一组初始的function,并且只有通过从系统上的其他对象接收它们才能获得更多的function。 这听起来相当遥远,但是想起Unix文件描述符:它们是对特定打开文件的不可伪造的引用,文件描述符可以被传递给其他进程。 如果将描述符提供给另一个进程,它将有权访问该文件。 整个操作系统都是围绕这个想法写的。 (最着名的可能是KeyKOS和EROS,但我相信这是一个有争议的问题:)

…更复杂的,有安全标签分配给对象和委托人:

  • 安全环 ,例如在Multics和x86 CPU中实现,并提供安全陷阱或门以允许进程在环之间转换; 每个戒指都有一组不同的特权和对象。

  • Denning的Lattice是一个允许校长以非常分层的方式与哪个安全标签进行交互的模型。

  • Bell-LaPadula类似于Denning的Lattice,并提供规则来防止泄露的绝密数据到未分类的级别,通用的扩展提供进一步的划分和分类,以更好地提供军事风格的“需要知道”的支持。

  • Biba模型与Bell-LaPadula类似,但是“转过头来” – Bell-LaPadula专注于保密性,但对完整性没有任何要求,Biba专注于完整性,但对保密没有任何作用。 (Bell-LaPadula阻止某人阅读“所有间谍名单”,但却乐于允许任何人写入任何内容,Biba会高兴地允许任何人阅读“所有间谍名单”,但几乎禁止所有人写入。)

  • types强制 (及其兄弟,域types强制)在主体和对象上提供标签,并指定允许的对象 – 动词 – 主体(类)表。 这是熟悉的SELinux和SMACK。

..然后有一些纳入时间的stream逝:

  • 华尔街是在商业环境中发展起来的,在一个给定的市场上为竞争对手提供服务的组织内的员工分离:例如,一旦约翰逊开始在埃克森美孚账户上工作,他就不能访问BP账户。 如果约翰逊先是开始从事BP业务,他将被拒绝接触埃克森美孚的数据。

  • LOMAC和高水印是两种dynamic方法:当进程逐步访问时,LOMAC修改进程的权限 – 更高级别的数据,并禁止写入更低级别(进程迁移到“最高安全性”),高级水印修改标签数据作为更高级别的进程访问它(数据迁移到“最高安全性”)。

  • 克拉克 – 威尔逊模型是非常开放的; 它们包括不variables和规则以确保每个状态转换不会违反不variables。 (这可以像复式会计一样简单,也可以像HIPPA一样复杂。)考虑数据库事务和约束。

马特·毕晓普的“计算机安全:艺术与科学”绝对值得一读,如果你想更深入的发表模型。

我更喜欢RBAC 。 虽然,你可以发现它非常类似于ACL ,但它们在语义上有所不同 。