跳到主要内容

什么是 LBAC?Casbin 中的基于格的访问控制

什么是 LBAC?​

**LBAC(基于格的访问控制)**是一种可以在单一框架中同时实施 机密性 和 完整性 的形式化模型。本页展示了一种 Casbin 实现方式:主体(subject)和客体(object)各自具有一个机密性级别和一个完整性级别;匹配器在两个维度上强制执行读/写规则。

模型​

[request_definition]
r = sub, subject_confidentiality, subject_integrity, obj, object_confidentiality, object_integrity, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = (r.act == "read" && r.subject_confidentiality >= r.object_confidentiality && r.subject_integrity >= r.object_integrity) || (r.act == "write" && r.subject_confidentiality <= r.object_confidentiality && r.subject_integrity <= r.object_integrity)

当主体的机密性和完整性均 ≥ 客体的对应级别时允许读取;当两者均 ≤ 客体的对应级别时允许写入。因此,机密性遵循类似 BLP 的规则,而完整性遵循类似 Biba 的规则,二者在一个匹配器中统一处理。

请求示例​

以下示例演示了此 LBAC 实现如何评估请求:

# Normal read operations (ALLOWED)
admin, 5, 5, file_topsecret, 3, 3, read # admin (conf:5, int:5) reads file_topsecret (conf:3, int:3) - ALLOWED
manager, 4, 4, file_secret, 4, 2, read # manager (conf:4, int:4) reads file_secret (conf:4, int:2) - ALLOWED
staff, 3, 3, file_internal, 2, 3, read # staff (conf:3, int:3) reads file_internal (conf:2, int:3) - ALLOWED
guest, 2, 2, file_public, 2, 2, read # guest (conf:2, int:2) reads file_public (conf:2, int:2) - ALLOWED

# Read operation violations (DENIED)
staff, 3, 3, file_secret, 4, 2, read # staff (conf:3, int:3) reads file_secret (conf:4, int:2) - DENIED (conf < obj.conf)
manager, 4, 4, file_sensitive, 3, 5, read # manager (conf:4, int:4) reads file_sensitive (conf:3, int:5) - DENIED (int < obj.int)
guest, 2, 2, file_internal, 3, 1, read # guest (conf:2, int:2) reads file_internal (conf:3, int:1) - DENIED (conf < obj.conf)
staff, 3, 3, file_protected, 1, 4, read # staff (conf:3, int:3) reads file_protected (conf:1, int:4) - DENIED (int < obj.int)

# Normal write operations (ALLOWED)
guest, 2, 2, file_public, 2, 2, write # guest (conf:2, int:2) writes file_public (conf:2, int:2) - ALLOWED
staff, 3, 3, file_internal, 5, 4, write # staff (conf:3, int:3) writes file_internal (conf:5, int:4) - ALLOWED
manager, 4, 4, file_secret, 4, 5, write # manager (conf:4, int:4) writes file_secret (conf:4, int:5) - ALLOWED
admin, 5, 5, file_archive, 5, 5, write # admin (conf:5, int:5) writes file_archive (conf:5, int:5) - ALLOWED

# Write operation violations (DENIED)
manager, 4, 4, file_internal, 3, 5, write # manager (conf:4, int:4) writes file_internal (conf:3, int:5) - DENIED (conf > obj.conf)
staff, 3, 3, file_public, 2, 2, write # staff (conf:3, int:3) writes file_public (conf:2, int:2) - DENIED (both > obj)
admin, 5, 5, file_secret, 5, 4, write # admin (conf:5, int:5) writes file_secret (conf:5, int:4) - DENIED (int > obj.int)
guest, 2, 2, file_private, 1, 3, write # guest (conf:2, int:2) writes file_private (conf:1, int:3) - DENIED (conf > obj.conf)

安全级别​

在此实现中,机密性和完整性均以整数表示,数值越高代表安全级别越高:

机密性级别​

  • 级别 1:公开/未分类
  • 级别 2:机密
  • 级别 3:秘密
  • 级别 4:绝密

完整性级别​

  • 级别 1:低完整性(例如公共数据、用户生成内容)
  • 级别 2:中等完整性(例如经过验证的数据、可信来源)
  • 级别 3:高完整性(例如系统数据、管理内容)
  • 级别 4:关键完整性(例如安全策略、系统配置)

适用场景​

此 LBAC 实现非常适合以下场景:

  • 多级安全环境
  • 既重视数据保护又重视数据准确性的应用程序

实现说明​

  • 该模型通过双重安全属性实现了强制访问控制 (MAC)
  • 系统管理员分配安全级别
  • 访问决策同时考虑机密性和完整性级别
  • 该模型防止信息泄露和数据损坏

常见问题​

LBAC 和 MAC 有什么区别? MAC 是一个类别:访问由系统分配的标签决定,而不是由资源所有者决定。LBAC 是实现 MAC 的一种方式,使用安全级别的格结构。本页面的模型将机密性和完整性级别放在同一个格结构中。

LBAC 与 RBAC 有何不同? RBAC 将权限授予人们拥有的角色;LBAC 不向角色授予任何权限。每个请求都携带主体和对象的级别,匹配器会对它们进行比较,因此无需维护针对特定用户的策略。

LBAC 可以与 RBAC 结合使用吗? 可以。保留 RBAC 的角色检查,并将级别比较添加到同一个匹配器中;访问控制模型 页面展示了 RBAC 和 ABAC 的相同理念。

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.