Что такое LBAC? Управление доступом на основе решетки в Casbin
Что такое LBAC?
LBAC (Lattice-Based Access Control) — формальная модель, которая может обеспечивать соблюдение как конфиденциальности, так и целостности в рамках одного подхода. Эта страница демонстрирует одну формулировку для Casbin: у субъекта и объекта есть уровень конфиденциальности и уровень целостности; матчер обеспечивает правила чтения/записи по обоим измерениям.
Модель
[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) с двумя свойствами безопасности
- Системные администраторы назначают уровни безопасности
- Решения о доступе учитывают как уровни конфиденциальности, так и уровни целостности
- Модель предотвращает утечку информации и повреждение данных
FAQ
В чём разница между LBAC и MAC? MAC — это категория: доступ определяется назначенными системой метками, а не владельцем ресурса. LBAC — один из способов реализации MAC с использованием решётки уровней безопасности. Модель на этой странице помещает уровни конфиденциальности и целостности в одну решётку.
Чем LBAC отличается от RBAC? RBAC предоставляет разрешения ролям, которые носят люди; LBAC ничего не предоставляет ролям. Каждый запрос содержит уровни субъекта и объекта, и матчер сравнивает их, поэтому нет необходимости поддерживать политику для каждого пользователя.
Можно ли комбинировать LBAC с RBAC? Да. Сохраните проверки ролей из RBAC и добавьте сравнение уровней в тот же матчер; страница access control models демонстрирует ту же идею для RBAC и ABAC.
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.