CISP学习指南:访问控制

访问控制是信息安全的核心机制,通过限制对资源的访问来保护信息资产的机密性、完整性和可用性。

一、访问控制概述

1.1 访问控制的定义与作用

💡CIA三要素

访问控制保护信息资产的机密性、完整性和可用性。详细内容请参考:CISP学习指南:信息安全CIA三要素 访问控制是信息安全的核心机制,通过限制对资源的访问来保护信息资产。

📝访问控制的作用

访问控制系统在信息系统中发挥着至关重要的作用,主要包括: ✅ 拒绝非法用户的非授权访问请求

  • 防止未经授权的用户访问系统
  • 阻止非法入侵
  • 保护系统资源 ✅ 在用户对系统资源提供最大限度共享的基础上,对用户的访问权进行管理
  • 平衡共享与安全
  • 根据需要授予权限
  • 实现资源的有效利用 ✅ 防止对信息的非授权篡改和滥用
  • 保护数据完整性
  • 防止权限滥用
  • 确保操作合规性 ❌ 错误理解:对经过身份鉴别后的合法用户提供所有服务
  • 这是对访问控制作用的错误理解
  • 即使是合法用户,也应根据权限提供服务
  • 不能因为身份合法就提供所有访问权限 访问控制实例:教务系统 以学校教务系统为例:
graph TB A["教务系统"] B["教师"] C["学生"] D["教务管理员"] A --> B A --> C A --> D B --> B1["可以:录入成绩"] B --> B2["不可以:修改课程信息"] C --> C1["可以:查看自己的分数"] C --> C2["不可以:查看他人分数"] C --> C3["不可以:修改成绩"] D --> D1["可以:修改课程信息"] D --> D2["可以:管理选课信息"] D --> D3["不可以:直接修改成绩"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00

访问控制在教务系统中的作用:

用户类型身份鉴别授权访问访问控制作用
教师✅ 合法录入成绩✅ 允许授权操作
教师✅ 合法修改课程❌ 拒绝非授权操作
学生✅ 合法查看自己分数✅ 允许授权访问
学生✅ 合法查看他人分数❌ 拒绝非授权访问
学生✅ 合法修改成绩❌ 防止非授权篡改
教务管理员✅ 合法管理课程信息✅ 允许授权管理
非法用户❌ 非法任何访问❌ 拒绝所有访问
关键理解:
  1. 身份鉴别 ≠ 全部权限
    • 身份鉴别只是确认“你是谁”
    • 访问控制决定“你能做什么”
    • 合法用户也需要权限管理
  2. 最小权限原则
    • 用户只能访问完成工作所需的资源
    • 不因为是合法用户就给予所有权限
    • 每个用户的权限根据角色确定
  3. 共享与安全的平衡
    • 允许合理的资源共享
    • 但必须在安全的框架内
    • 通过访问控制实现平衡

1.2 主体和客体

访问控制模型将实体划分为主体和客体两类,通过对主体身份的识别来限制其对客体的访问权限。

📝主体、客体和访问权限的核心概念

关键理解:主体的特征

  • 对文件进行操作的用户是一种主体
  • 主体是主动发起访问的实体
  • 用户对文件进行操作是主动行为 ✅ 主体与客体的交互
  • 主体可以接受客体的信息和数据(读取)
  • 主体也可能改变客体相关的信息(修改)
  • 具体操作取决于访问权限 ✅ 访问权限的定义
  • 访问权限是指主体对客体所允许的操作
  • 如:读、写、执行、删除等
  • 是访问控制的核心概念 主体和客体的定义:
graph LR A["主体<br/>Subject"] B["访问权限<br/>Permission"] C["客体<br/>Object"] A -->|"1. 请求访问"| B B -->|"2. 检查权限"| B B -->|"3. 允许/拒绝"| C A --> A1["用户"] A --> A2["进程"] A --> A3["程序"] C --> C1["文件"] C --> C2["目录"] C --> C3["数据库"] B --> B1["读"] B --> B2["写"] B --> B3["执行"] style A fill:#e3f2fd,stroke:#1976d2 style B fill:#fff3e0,stroke:#f57c00 style C fill:#e8f5e9,stroke:#388e3c

主体、客体和访问权限的关系:

概念定义示例特点
主体主动发起访问的实体用户、进程、程序主动性
客体被访问的资源文件、目录、数据库被动性
访问权限主体对客体允许的操作读、写、执行操作类型
常见的主体类型:
主体类型:
├── 用户(User)
│   ├── 人类用户
│   ├── 系统用户
│   └── 服务账户
├── 进程(Process)
│   ├── 用户进程
│   └── 系统进程
├── 程序(Program)
│   ├── 应用程序
│   └── 系统程序
└── 设备(Device)
    ├── 网络设备
    └── 外设

常见的客体类型:

客体类型:
├── 文件(File)
│   ├── 普通文件
│   ├── 配置文件
│   └── 日志文件
├── 目录(Directory)
│   ├── 文件夹
│   └── 目录树
├── 数据库(Database)
│   ├── 表
│   ├── 视图
│   └── 存储过程
├── 网络资源(Network Resource)
│   ├── 网络共享
│   └── 网络服务
└── 设备(Device)
    ├── 打印机
    └── 存储设备

访问权限的类型:

资源类型常见权限说明
文件读(Read)读取文件内容
文件写(Write)修改文件内容
文件执行(Execute)执行文件
文件删除(Delete)删除文件
目录读(Read)查看目录内容
目录写(Write)在目录中创建/删除文件
目录执行(Execute)进入目录
目录列表(List)列出目录内容
数据库SELECT查询数据
数据库INSERT插入数据
数据库UPDATE更新数据
数据库DELETE删除数据
⚠️权限与控制结果的区别

访问权限是主体对客体允许执行的操作类型,如读、写、执行、列表等。 访问控制结果是系统根据权限做出的决策,包括允许访问或拒绝访问。 ⚠️ 常见混淆: “拒绝访问”不是一种访问权限,而是访问控制的结果。当主体缺少相应权限时,系统会拒绝访问。 📋 目录的访问权限包括:

  • 读(Read):查看目录内容
  • 写(Write):在目录中创建/删除文件
  • 执行(Execute):进入目录
  • 列表(List):列出目录内容 访问权限 vs 访问控制结果:
graph TB A["主体请求访问"] B["检查访问权限"] C["有权限?"] D["允许访问"] E["拒绝访问"] A --> B B --> C C -->|"Yes"| D C -->|"No"| E B --> B1["读权限"] B --> B2["写权限"] B --> B3["执行权限"] D --> D1["访问控制结果"] E --> E1["访问控制结果"] style B fill:#e3f2fd,stroke:#1976d2 style D fill:#c8e6c9,stroke:#2e7d32 style E fill:#ffcdd2,stroke:#c62828

Unix/Linux目录权限示例:

# 目录权限
# drwxr-xr-x
# d: 目录
# rwx: 所有者权限(读、写、执行)
# r-x: 组权限(读、执行)
# r-x: 其他用户权限(读、执行)
# 目录权限含义:
# r (read): 可以列出目录内容
# w (write): 可以在目录中创建、删除文件
# x (execute): 可以进入目录
# 没有权限的结果:拒绝访问
# 但“拒绝访问”不是一种权限

1.3 访问控制的目标

访问控制的三大目标是保护信息的机密性、完整性和可用性(CIA三要素)。

二、安全模型分类

2.1 机密性模型

保护分级信息机密性的模型: 保护分级信息机密性的模型包括:Bell-LaPadula模型信息流模型

graph TB A["机密性模型"] B["Bell-LaPadula<br/>模型"] C["信息流模型"] A --> B A --> C B --> B1["军事和政府"] B --> B2["多级安全"] B --> B3["上读下写规则"] C --> C1["信息流向控制"] C --> C2["防止信息泄露"] C --> C3["格模型基础"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d
📝机密性模型的选择

为什么选择这两个模型:Bell-LaPadula模型

  • 专门设计用于保护机密性
  • 基于多级安全策略
  • 防止信息向下流动 ✅ 信息流模型
  • 控制信息流向
  • 防止信息泄露
  • 支持机密性保护 ❌ 不是机密性模型:
  • Biba模型 - 保护完整性
  • Clark-Wilson模型 - 保护完整性
  • Chinese Wall模型 - 多边安全

2.2 完整性模型

保护数据完整性的模型: 完整性模型包括:Biba模型Clark-Wilson模型

graph TB A["完整性模型"] B["Biba模型"] C["Clark-Wilson<br/>模型"] A --> B A --> C B --> B1["下读上写"] B --> B2["防止污染"] B --> B3["完整性级别"] C --> C1["商业环境"] C --> C2["良构事务"] C --> C3["职责分离"] style B fill:#fff3e0,stroke:#f57c00 style C fill:#f3e5f5,stroke:#7b1fa2
📝完整性模型对比

两种完整性模型的区别: Biba模型:

  • 🔒 基于完整性级别
  • 📊 下读上写规则
  • 🛡️ 防止低完整性数据污染高完整性数据 Clark-Wilson模型:
  • 💼 面向商业环境
  • ✅ 良构事务(Well-Formed Transactions)
  • 👥 职责分离(Separation of Duties)
  • 🔐 访问三元组(用户-程序-数据) 完整性模型对比: | 模型 | 适用场景 | 核心机制 | 特点 | |------|---------|---------|------| | Biba | 军事、政府 | 完整性级别、下读上写 | 简单、形式化 | | Clark-Wilson | 商业、金融 | 良构事务、职责分离 | 实用、灵活 |

2.3 多边安全模型

多边安全模型: 多边安全模型包括:Chinese Wall模型BMA模型

graph TB A["多边安全模型"] B["Chinese Wall<br/>模型"] C["BMA模型"] A --> B A --> C B --> B1["金融机构"] B --> B2["利益冲突防范"] B --> B3["动态访问控制"] C --> C1["医疗资料"] C --> C2["隐私保护"] C --> C3["患者数据安全"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#c8e6c9,stroke:#2e7d32
📝多边安全模型的应用

Chinese Wall模型(金融机构):

  • 🏦 防止利益冲突
  • 🔒 动态访问控制
  • 📊 信息隔离墙
  • 💼 适用于投资银行、咨询公司 BMA模型(医疗资料):
  • 🏥 保护患者隐私
  • 📋 医疗数据安全
  • 🔐 访问权限管理
  • ⚕️ 符合医疗法规 多边安全模型应用对比: | 模型 | 主要应用 | 保护对象 | 核心机制 | |------|---------|---------|---------| | Chinese Wall | 金融机构 | 商业机密、利益冲突 | 动态访问控制、信息隔离 | | BMA | 医疗机构 | 患者隐私、医疗数据 | 角色权限、数据分类 |

三、Bell-LaPadula模型(BLP)

3.1 BLP模型规则

BLP模型基于两种规则保障数据的机密性和敏感度:

graph TB A["BLP模型规则"] B["简单安全特性<br/>Simple Security"] C["*特性<br/>Star Property"] A --> B A --> C B --> B1["No Read Up"] B --> B2["上读规则"] B --> B3["主体不可读安全级别<br/>高于它的数据"] C --> C1["No Write Down"] C --> C2["下写规则"] C --> C3["主体不可写安全级别<br/>低于它的数据"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#fff3e0,stroke:#f57c00
📝BLP模型的核心规则

两条规则: 📖 上读(No Read Up)

  • 主体不可读安全级别高于它的数据
  • 防止低级别用户读取高级别信息
  • 保护机密信息不被泄露 ✍️ 下写(No Write Down)
  • 主体不可写安全级别低于它的数据
  • 防止高级别信息流向低级别
  • 防止机密信息降级 BLP模型示例:
安全级别(从低到高):
公开 < 内部 < 机密 < 绝密
用户级别:机密
✅ 可以读取:公开、内部、机密(向下读)
❌ 不能读取:绝密(不能上读)
✅ 可以写入:机密、绝密(向上写)
❌ 不能写入:公开、内部(不能下写)

3.2 BLP模型的应用

BLP模型适用场景:

场景说明示例
军事系统多级安全分类绝密、机密、秘密、公开
政府机构文件分级管理内部文件、公开文件
企业商业秘密保护核心机密、一般机密

四、Biba模型

4.1 Biba模型规则

Biba模型基于两种规则保障数据的完整性:

graph TB A["Biba模型规则"] B["简单完整性特性"] C["*完整性特性"] A --> B A --> C B --> B1["No Read Down"] B --> B2["下读规则"] B --> B3["主体不可读安全级别<br/>低于它的数据"] C --> C1["No Write Up"] C --> C2["上写规则"] C --> C3["主体不可写安全级别<br/>高于它的数据"] style B fill:#e8f5e9,stroke:#388e3d style C fill:#fff3e0,stroke:#f57c00
📝Biba模型的核心规则

两条规则: 📖 下读(No Read Down)

  • 主体不可读安全级别低于它的数据
  • 防止低完整性数据污染高完整性数据
  • 保护数据完整性 ✍️ 上写(No Write Up)
  • 主体不可写安全级别高于它的数据
  • 防止低完整性主体修改高完整性数据
  • 维护数据可信度 Biba模型示例:
完整性级别(从低到高):
未验证 < 已验证 < 可信 < 高度可信
用户级别:已验证
✅ 可以读取:已验证、可信、高度可信(向上读)
❌ 不能读取:未验证(不能下读)
✅ 可以写入:未验证、已验证(向下写)
❌ 不能写入:可信、高度可信(不能上写)

4.2 BLP vs Biba对比

两种模型的对比:

{ "title": { "text": "BLP模型 vs Biba模型" }, "tooltip": { "trigger": "axis" }, "legend": { "data": ["BLP(机密性)", "Biba(完整性)"] }, "radar": { "indicator": [ {"name": "读取控制", "max": 100}, {"name": "写入控制", "max": 100}, {"name": "机密性保护", "max": 100}, {"name": "完整性保护", "max": 100}, {"name": "实用性", "max": 100} ] }, "series": [{ "type": "radar", "data": [ { "value": [90, 90, 100, 30, 70], "name": "BLP(机密性)", "itemStyle": {"color": "#2196f3"} }, { "value": [90, 90, 30, 100, 80], "name": "Biba(完整性)", "itemStyle": {"color": "#4caf50"} } ] }] }
特性BLP模型Biba模型
保护目标机密性完整性
读取规则上读(No Read Up)下读(No Read Down)
写入规则下写(No Write Down)上写(No Write Up)
防止信息泄露数据污染
适用场景军事、政府商业、工业
⚠️记忆技巧

BLP vs Biba规则记忆: BLP(机密性):

  • 📖 上读 - 不能读高级别(防泄密)
  • ✍️ 下写 - 不能写低级别(防降级)
  • 口诀:上读下写 Biba(完整性):
  • 📖 下读 - 不能读低级别(防污染)
  • ✍️ 上写 - 不能写高级别(防篡改)
  • 口诀:下读上写 关系:Biba是BLP的对偶模型

五、访问控制实现机制

5.1 访问控制实现方法

在实现访问控制时,有多种不同的机制和模型可以选择。对于大量用户的信息系统,需要考虑时间和资源消耗。

📝📊 访问控制实现机制对比

两种主要实现机制:

  1. 访问控制列表(ACL,Access Control List)
    • 以客体(资源)为中心
    • 每个资源维护一个列表,记录哪些用户可以访问
    • 适合大量用户的系统
  2. 能力表(CL,Capability List)
    • 以主体(用户)为中心
    • 每个用户维护一个列表,记录可以访问哪些资源
    • 适合大量资源的系统

5.2 ACL vs CL对比

两种机制的核心区别:

graph TB subgraph ACL["访问控制列表 ACL"] A1["文件A"] A2["用户列表"] A1 --> A2 A2 --> A3["用户1: 读"] A2 --> A4["用户2: 读写"] A2 --> A5["用户3: 执行"] end subgraph CL["能力表 CL"] C1["用户1"] C2["资源列表"] C1 --> C2 C2 --> C3["文件A: 读"] C2 --> C4["文件B: 读写"] C2 --> C5["文件C: 执行"] end style ACL fill:#e3f2fd,stroke:#1976d2 style CL fill:#e8f5e9,stroke:#388e3d

详细对比:

特征访问控制列表(ACL)能力表(CL)
组织方式以客体(资源)为中心以主体(用户)为中心
存储位置与资源关联与用户关联
列表内容哪些用户可以访问此资源此用户可以访问哪些资源
适用场景用户数量大,资源数量少资源数量大,用户数量少
权限检查检查资源的ACL检查用户的CL
权限回收从资源的ACL中删除用户从用户的CL中删除资源
时间复杂度O(1) - 直接查找资源O(n) - 需遍历用户列表
空间复杂度资源数 × 平均用户数用户数 × 平均资源数

5.3 大量用户系统的最佳选择

📝大量用户系统的访问控制实现

对于存在大量用户的信息系统,从时间和资源消耗的角度,应该采用访问控制列表(ACL)为什么ACL更适合大量用户系统:

  1. 权限检查效率高
    • ⚡ 直接定位到资源
    • 📊 检查资源的ACL即可
    • ⏱️ 时间复杂度O(1)
  2. 空间开销合理
    • 💾 通常资源数量 < 用户数量
    • 📉 存储开销相对较小
    • 📊 每个资源的ACL通常不会太长
  3. 管理简便
    • 🛠️ 权限集中在资源上
    • 🔍 易于审计资源访问情况
    • 🔄 易于维护和更新 实际场景对比:
场景:企业信息系统
- 用户数量:10,000人
- 资源数量:1,000个文件/系统
使用ACL:
├── 存储:1,000个资源 × 平均100个用户 = 100,000条记录
├── 检查:直接定位资源,查找用户
└── 时间:O(1)
使用CL:
├── 存储:10,000个用户 × 平均10个资源 = 100,000条记录
├── 检查:需要遍历用户列表找到用户
└── 时间:O(n),最坏情况需要检查10,000个用户
结论:ACL更高效

5.4 访问控制实现方案对比

各种方案对比:

方案类型适用场景大量用户系统时间效率
ACL实现机制自主访问控制✅ 适合⚡ 高
CL实现机制自主访问控制❌ 不适合🐌 低
BLP模型安全模型强制访问控制(机密性)❌ 不适用-
Biba模型安全模型强制访问控制(完整性)❌ 不适用-
访问控制列表(ACL)
  • 是实现自主访问控制的机制
  • 适合大量用户的系统
  • 时间和资源消耗合理
  • 广泛应用于实际系统 能力表(CL)
  • 也是实现自主访问控制的机制
  • 不适合大量用户的系统
  • 权限检查需要遍历用户列表
  • 时间消耗高 BLP模型
  • 是安全模型,不是实现机制
  • 用于强制访问控制,不是自主访问控制
  • 主要保护机密性
  • 不适用于大量用户系统的实现 Biba模型
  • 是安全模型,不是实现机制
  • 用于强制访问控制,不是自主访问控制
  • 主要保护完整性
  • 不适用于大量用户系统的实现

5.5 实现机制 vs 安全模型

关键区别:

graph TB A["访问控制"] B["实现机制"] C["安全模型"] A --> B A --> C B --> B1["ACL:以资源为中心"] B --> B2["CL:以用户为中心"] C --> C1["BLP:机密性模型"] C --> C2["Biba:完整性模型"] B --> B3["如何实现"] C --> C3["保护什么"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d
类别实现机制安全模型
定义如何存储和检查权限定义安全策略和规则
层次实现层面理论层面
目的高效实现访问控制保证安全属性
例子ACL、CLBLP、Biba、Chinese Wall
关系可以用于实现模型需要通过机制实现
理解要点:
  • 实现机制:回答“如何实现”的问题
  • 安全模型:回答“保护什么”的问题
  • ACL和CL可以用来实现BLP或Biba模型
  • 但BLP和Biba本身不是实现机制

5.6 ACL实际应用示例

Unix/Linux文件系统的ACL:

# 查看ACL
getfacl /path/to/file
# 输出示例
# file: /path/to/file
# owner: user1
# group: group1
user::rw-
user:user2:r--
group::r--
mask::r--
other::---
# 设置ACL
setfacl -m u:user2:r /path/to/file

Windows文件系统的ACL:

文件:project.docx
ACL:
  - 用户1 (所有者): 完全控制
  - 用户2: 读取、写入
  - 用户3: 只读
  - 组A: 读取、写入
  - Everyone: 拒绝访问

数据库系统的ACL:

-- 表的ACL
GRANT SELECT, INSERT ON employees TO user1;
GRANT SELECT ON employees TO user2;
GRANT ALL PRIVILEGES ON employees TO admin;
-- 查看权限
SHOW GRANTS FOR user1;

六、Kerberos协议

6.1 Kerberos协议概述

Kerberos是一种常用的集中访问控制协议,通过可信第三方的认证服务,减轻应用服务器的负担。 Kerberos运行环境组成:

graph TB A["Kerberos运行环境"] B["密钥分发中心<br/>KDC"] C["应用服务器<br/>Application Server"] D["客户端<br/>Client"] A --> B A --> C A --> D B --> B1["认证服务器<br/>AS"] B --> B2["票据授权服务器<br/>TGS"] B1 --> B1A["验证用户身份"] B1 --> B1B["颁发TGT"] B2 --> B2A["验证TGT"] B2 --> B2B["颁发服务票据"] C --> C1["提供服务"] C --> C2["验证服务票据"] D --> D1["请求认证"] D --> D2["请求服务"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00
📝Kerberos三大组件

Kerberos运行环境由三个部分组成: 🔑 密钥分发中心(KDC)

  • 认证服务器(AS):验证用户身份
  • 票据授权服务器(TGS):颁发服务票据
  • 可信第三方 🖥️ 应用服务器
  • 提供实际服务
  • 验证服务票据
  • 授权访问资源 👤 客户端
  • 用户终端
  • 请求认证和服务
  • 使用票据访问服务

6.2 Kerberos认证流程

Kerberos协议的三个阶段:

📝Kerberos认证流程

Kerberos认证流程分为三个阶段: 阶段 1:获得票据许可票据(TGT)

  • 客户端向认证服务器(AS)请求认证
  • AS验证用户身份后返回TGT
  • TGT用于后续请求服务票据 阶段 2:获得服务许可票据(Service Ticket)
  • 客户端向票据授权服务器(TGS)出示TGT
  • TGS验证TGT后颁发服务票据
  • 服务票据用于访问特定服务 阶段 3:获得服务(Access Service)
  • 客户端向应用服务器出示服务票据
  • 服务器验证票据后提供服务
  • 建立安全会话 详细认证流程:
sequenceDiagram participant C as 客户端 participant AS as 认证服务器(AS) participant TGS as 票据授权服务器(TGS) participant S as 应用服务器 Note over C,S: 阶段1:获得票据许可票据(TGT) C->>AS: 1. 请求认证(用户名) AS->>C: 2. 返回TGT(用密钥加密) Note over C,S: 阶段2:获得服务许可票据 C->>TGS: 3. 请求服务票据(TGT+服务名) TGS->>C: 4. 返回服务票据(Service Ticket) Note over C,S: 阶段3:获得服务 C->>S: 5. 请求服务(服务票据) S->>C: 6. 提供服务 style AS fill:#e3f2fd,stroke:#1976d2 style TGS fill:#fff3e0,stroke:#f57c00 style S fill:#e8f5e9,stroke:#388e3d

三个阶段详解: 阶段1:获得票据许可票据(TGT)

步骤操作说明
1客户端→AS发送用户名,请求认证
2AS验证检查用户是否存在
3AS→客户端返回TGT(用用户密钥加密)
4客户端解密使用密码派生的密钥解密TGT
📝TGT(Ticket Granting Ticket)

票据许可票据的特点:

  • 🎫 用于向TGS请求服务票据
  • 🔐 用用户密钥加密
  • ⏰ 有时效性(通常8-10小时)
  • 🔄 可重复使用,无需每次输入密码 阶段2:获得服务许可票据 | 步骤 | 操作 | 说明 | |------|------|------| | 1 | 客户端→TGS | 发送TGT和请求的服务名 | | 2 | TGS验证 | 验证TGT的有效性 | | 3 | TGS→客户端 | 返回服务票据(用服务密钥加密) | | 4 | 客户端保存 | 保存服务票据用于访问服务 |
📝Service Ticket(服务票据)

服务票据的特点:

  • 🎫 用于访问特定服务
  • 🔐 用服务密钥加密
  • ⏰ 有时效性(通常5分钟-8小时)
  • 🎯 针对特定服务 阶段3:获得服务 | 步骤 | 操作 | 说明 | |------|------|------| | 1 | 客户端→服务器 | 发送服务票据 | | 2 | 服务器验证 | 解密并验证服务票据 | | 3 | 服务器→客户端 | 提供请求的服务 | | 4 | 建立会话 | 客户端和服务器建立安全会话 |

6.3 Kerberos的优势

Kerberos的核心优势:

{ "title": { "text": "Kerberos优势分析" }, "tooltip": { "trigger": "axis", "axisPointer": { "type": "shadow" } }, "radar": { "indicator": [ {"name": "安全性", "max": 100}, {"name": "可扩展性", "max": 100}, {"name": "单点登录", "max": 100}, {"name": "性能", "max": 100}, {"name": "易用性", "max": 100} ] }, "series": [{ "type": "radar", "data": [ { "value": [90, 85, 95, 80, 70], "name": "Kerberos", "itemStyle": {"color": "#2196f3"} } ] }] }

优势详解:

优势说明价值
集中认证统一的认证服务简化管理,提高安全性
单点登录一次认证,多次使用提升用户体验
减轻负担应用服务器无需存储密码降低安全风险
相互认证客户端和服务器双向认证防止中间人攻击
时效性票据有时间限制限制攻击窗口
可扩展支持大规模部署适合企业环境

6.4 Kerberos的关键概念

重要术语:

Kerberos关键概念:
├── KDC(Key Distribution Center)
│   ├── AS(Authentication Server)
│   │   ├── 验证用户身份
│   │   └── 颁发TGT
│   └── TGS(Ticket Granting Server)
│       ├── 验证TGT
│       └── 颁发服务票据
├── 票据类型
│   ├── TGT(Ticket Granting Ticket)
│   │   ├── 票据许可票据
│   │   ├── 用于请求服务票据
│   │   └── 有效期:8-10小时
│   └── Service Ticket
│       ├── 服务票据
│       ├── 用于访问特定服务
│       └── 有效期:5分钟-8小时
├── 主体(Principal)
│   ├── 用户主体:user@REALM
│   └── 服务主体:service/host@REALM
└── 领域(Realm)
    ├── Kerberos管理域
    ├── 通常对应DNS域
    └── 可以建立信任关系

6.5 Kerberos安全特性

安全机制:

📝Kerberos安全特性

核心安全机制: 🔐 加密保护

  • 所有票据都经过加密
  • 密码不在网络传输
  • 使用对称加密算法 ⏰ 时间戳
  • 防止重放攻击
  • 票据有时效性
  • 要求时钟同步 🔄 相互认证
  • 客户端认证服务器
  • 服务器认证客户端
  • 防止中间人攻击 🎫 票据机制
  • 无需重复输入密码
  • 限制票据使用范围
  • 支持票据撤销 安全考虑: | 安全问题 | 防护措施 | 说明 | |---------|---------|------| | 重放攻击 | 时间戳+时钟同步 | 要求5分钟内时钟误差 | | 密码猜测 | 预认证机制 | AS-REQ需要加密时间戳 | | KDC单点故障 | KDC冗余 | 部署多个KDC | | 票据窃取 | 加密+时效性 | 限制票据使用时间 | | 中间人攻击 | 相互认证 | 双向验证身份 |

6.6 Kerberos应用场景

典型应用:

应用场景说明示例
Windows域Active Directory企业Windows网络
Linux/UnixMIT Kerberos企业Unix环境
Web应用SPNEGO浏览器SSO
数据库Kerberos认证Oracle、PostgreSQL
文件共享NFS、CIFS网络文件系统
邮件系统IMAP、SMTP企业邮件服务
实际部署示例:
企业Kerberos部署:
├── KDC服务器
│   ├── 主KDC(kdc1.neo01.com)
│   └── 从KDC(kdc2.neo01.com)
├── 领域配置
│   ├── 领域名:neo01.com
│   ├── KDC地址:kdc1.neo01.com:88
│   └── 管理服务器:kdc1.neo01.com:749
├── 客户端配置
│   ├── /etc/krb5.conf
│   ├── 默认领域:neo01.com
│   └── DNS查找:启用
└── 服务配置
    ├── HTTP/web.neo01.com@neo01.com
    ├── host/server.neo01.com@neo01.com
    └── nfs/fileserver.neo01.com@neo01.com

6.7 Kerberos vs 其他认证协议

认证协议对比:

协议类型优势劣势适用场景
Kerberos票据单点登录、安全性高配置复杂、需时钟同步企业内网
LDAP目录简单、灵活密码传输、无SSO用户管理
RADIUS远程广泛支持安全性较低VPN、WiFi
OAuth 2.0授权适合Web、移动不是认证协议第三方授权
SAML联邦跨域SSO复杂企业联邦

七、访问控制实施步骤

7.1 访问控制实施流程

访问控制实施流程四要素:

graph LR A["1. 主体<br/>Subject"] B["2. 访问控制实施部件<br/>Access Control<br/>Enforcement"] C["3. 客体<br/>Object"] D["4. 访问控制决策部件<br/>Access Control<br/>Decision"] A -->|"请求访问"| B B -->|"查询权限"| D D -->|"返回决策"| B B -->|"允许/拒绝"| C style A fill:#e3f2fd,stroke:#1976d2 style B fill:#fff3e0,stroke:#f57c00 style C fill:#e8f5e9,stroke:#388e3d style D fill:#f3e5f5,stroke:#7b1fa2

7.2 四要素详解

1. 主体(Subject)

主体:
├── 定义:主动发起访问请求的实体
├── 类型:
│   ├── 用户
│   ├── 进程
│   └── 程序
├── 职责:
│   ├── 发起访问请求
│   ├── 提供身份信息
│   └── 等待访问结果
└── 示例:用户请求访问文件

2. 访问控制实施部件(Access Control Enforcement)

访问控制实施部件:
├── 定义:执行访问控制决策的部件
├── 职责:
│   ├── 接收主体的访问请求
│   ├── 向决策部件查询权限
│   ├── 执行决策结果
│   └── 允许或拒绝访问
├── 位置:主体和客体之间
└── 示例:操作系统内核、安全网关

3. 客体(Object)

客体:
├── 定义:被访问的资源
├── 类型:
│   ├── 文件
│   ├── 目录
│   ├── 数据库
│   └── 网络资源
├── 特点:
│   ├── 被动接受访问
│   ├── 需要保护
│   └── 有安全属性
└── 示例:被访问的文件

4. 访问控制决策部件(Access Control Decision)

访问控制决策部件:
├── 定义:判断是否允许访问的部件
├── 职责:
│   ├── 存储访问控制策略
│   ├── 存储权限信息
│   ├── 根据策略判断权限
│   └── 返回决策结果
├── 存储内容:
│   ├── ACL(访问控制列表)
│   ├── 权限矩阵
│   └── 安全策略
└── 示例:权限数据库、策略服务器

7.3 访问控制实施详细流程

完整的访问控制过程:

sequenceDiagram participant S as 1.主体 participant E as 2.实施部件 participant D as 4.决策部件 participant O as 3.客体 S->>E: 步骤1: 请求访问客体 E->>D: 步骤2: 查询访问权限 D->>D: 步骤3: 检查策略和权限 D->>E: 步骤4: 返回决策(允许/拒绝) alt 允许访问 E->>O: 步骤5a: 转发访问请求 O->>E: 步骤6a: 返回资源 E->>S: 步骤7a: 返回结果 else 拒绝访问 E->>S: 步骤5b: 返回拒绝信息 end style S fill:#e3f2fd,stroke:#1976d2 style E fill:#fff3e0,stroke:#f57c00 style O fill:#e8f5e9,stroke:#388e3d style D fill:#f3e5f5,stroke:#7b1fa2

7.4 实际应用示例

文件系统访问控制示例:

场景:用户请求读取文件
1. 主体:用户Alice
   - 发起请求:open("/data/report.txt", READ)
2. 访问控制实施部件:操作系统内核
   - 接收请求
   - 提取信息:用户=Alice, 文件=/data/report.txt, 操作=READ
   - 向决策部件查询
3. 客体:文件/data/report.txt
   - 等待访问
4. 访问控制决策部件:文件系统ACL
   - 查找文件ACL:
     /data/report.txt:
       - Alice: READ, WRITE
       - Bob: READ
       - Group_Finance: READ, WRITE
   - 判断:Alice有READ权限
   - 返回:允许访问
结果:实施部件允许Alice读取文件

7.5 关键理解要点

💡重要区分

实施部件 vs 决策部件: 访问控制实施部件:

  • 职责:执行决策
  • 位置:主体和客体之间
  • 功能:控制访问流程
  • 示例:防火墙、操作系统内核 访问控制决策部件:
  • 职责:判断权限
  • 位置:后端策略存储
  • 功能:存储和查询策略
  • 示例:ACL数据库、策略服务器 正确顺序记忆:
访问控制实施步骤:
1. 主体 → 发起请求
2. 访问控制实施部件 → 接收并查询
3. 客体 → 被访问的资源
4. 访问控制决策部件 → 判断权限
口诀:主实客决(主体、实施、客体、决策)

八、访问控制策略

7.1 访问控制策略类型

主要访问控制策略:

graph TB A["访问控制策略"] B["自主访问控制<br/>DAC"] C["强制访问控制<br/>MAC"] D["基于角色<br/>RBAC"] E["基于属性<br/>ABAC"] A --> B A --> C A --> D A --> E B --> B1["资源所有者控制"] B --> B2["灵活但不安全"] C --> C1["系统强制执行"] C --> C2["需要安全标签"] D --> D1["基于角色授权"] D --> D2["便于管理"] E --> E1["基于属性决策"] E --> E2["细粒度控制"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#ffebee,stroke:#c62828 style D fill:#e8f5e9,stroke:#388e3d style E fill:#fff3e0,stroke:#f57c00

7.2 强制访问控制(MAC)的特点

📝强制访问控制(MAC)的核心特征

关键理解:安全属性机制

  • 主体和客体都有固定的安全属性
  • 主体有安全许可级别,客体有安全分类级别
  • 系统根据安全属性强制执行访问控制 ✅ 强制性特征
  • 安全属性由安全管理员或操作系统确定
  • 用户不能随意篡改安全属性
  • 系统强制执行,保证安全策略的一致性 ✅ 决策机制
  • 系统通过比较主体和客体的安全属性决定访问
  • 应用安全规则(如BLP的上读下写、Biba的下读上写)
  • 系统自动执行,无需用户干预 强制访问控制(MAC)的正确理解:
graph TB A["强制访问控制 MAC"] B["主体<br/>Subject"] C["客体<br/>Object"] D["安全属性"] E["访问决策"] A --> B A --> C A --> D A --> E B --> B1["安全许可级别"] C --> C1["安全分类级别"] D --> D1["由系统管理"] D --> D2["不可随意修改"] E --> E1["系统强制执行"] E --> E2["基于安全策略"] style A fill:#ffebee,stroke:#c62828 style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00 style E fill:#f3e5f5,stroke:#7b1fa2

MAC vs DAC对比:

特性强制访问控制(MAC)自主访问控制(DAC)
控制主体系统资源所有者
安全属性固定的安全级别用户定义的权限
修改权限只能由安全管理员修改资源所有者可修改
访问决策基于安全策略自动执行基于用户授权
灵活性
安全性相对较低
适用场景军事、政府高安全环境一般商业环境
典型模型BLP、BibaACL、CL
用户控制用户不能控制用户可以控制
强制访问控制的关键特征:
强制访问控制(MAC)的特征:
├── 1. 安全属性
│   ├── 主体有安全许可级别
│   ├── 客体有安全分类级别
│   ├── 由系统或安全管理员确定
│   └── 用户不能随意修改
├── 2. 强制执行
│   ├── 系统自动执行
│   ├── 基于安全策略
│   ├── 不依赖用户意愿
│   └── 用户无法绕过
├── 3. 访问决策
│   ├── 比较主体和客体的安全属性
│   ├── 应用安全规则(如BLP、Biba)
│   ├── 系统级控制
│   └── 非用户级控制
└── 4. 应用场景
    ├── 军事系统
    ├── 政府机构
    ├── 高安全要求环境
    └── 多级安全系统
⚠️MAC与DAC的本质区别

**强制访问控制(MAC)**是系统级的访问控制机制,基于安全策略强制执行,用户无法改变访问控制决策。 **自主访问控制(DAC)**是对单个用户执行访问控制的过程控制措施,由资源所有者决定访问权限。 🔐 MAC的核心特征:

  • 系统级强制性控制
  • 基于安全属性(安全标签)
  • 由安全管理员或系统管理
  • 用户无法修改安全策略
  • 适用于高安全环境(军事、政府) 👤 DAC的核心特征:
  • 用户级自主控制
  • 资源所有者决定权限
  • 用户可以修改权限
  • 灵活但安全性较低
  • 适用于一般商业环境 MAC的实际应用示例:
军事系统的MAC实现:
安全级别(从低到高):
公开 < 内部 < 机密 < 绝密
用户A:
├── 安全许可:机密级
├── 可以访问:公开、内部、机密级文件
├── 不能访问:绝密级文件
└── 用户A无法修改自己的安全许可级别
文件X:
├── 安全分类:绝密级
├── 可被访问:只有绝密级许可的用户
├── 不能被访问:机密级及以下用户
└── 文件的安全分类由系统管理员设定
访问控制决策:
├── 用户A请求访问文件X
├── 系统比较:用户A(机密级) vs 文件X(绝密级)
├── 应用BLP规则:不能上读(No Read Up)
└── 结果:拒绝访问(系统强制执行,用户无法绕过)

5.2 强制访问控制(MAC)

需要安全标签的访问控制策略: **强制访问控制(MAC)**策略需要安全标签。

📝强制访问控制的特点

为什么MAC需要安全标签: 🏷️ 安全标签必需

  • 主体需要安全许可标签
  • 客体需要安全分类标签
  • 系统根据标签强制执行访问控制 🔒 系统强制执行
  • 用户无法改变访问控制
  • 基于安全策略自动决策
  • 防止特权滥用 📊 多级安全
  • 支持分级信息保护
  • 实现BLP或Biba模型
  • 适用于高安全环境 访问控制策略对比: | 策略类型 | 需要安全标签 | 控制方式 | 灵活性 | 安全性 | 适用场景 | |---------|------------|---------|--------|--------|----------| | 强制访问控制(MAC) | ✅ 是 | 系统强制 | ⭐⭐ 低 | ⭐⭐⭐⭐⭐ 高 | 军事、政府 | | 自主访问控制(DAC) | ❌ 否 | 用户自主 | ⭐⭐⭐⭐⭐ 高 | ⭐⭐ 低 | 一般企业 | | 基于角色(RBAC) | ❌ 否 | 角色授权 | ⭐⭐⭐⭐ 高 | ⭐⭐⭐ 中 | 企业应用 | | 基于属性(ABAC) | ❌ 否 | 属性决策 | ⭐⭐⭐⭐⭐ 高 | ⭐⭐⭐⭐ 高 | 云计算 |

八、安全模型总结

8.1 模型分类汇总

按保护目标分类:

安全模型分类:
├── 机密性模型
│   ├── Bell-LaPadula模型
│   └── 信息流模型
├── 完整性模型
│   ├── Biba模型
│   └── Clark-Wilson模型
└── 多边安全模型
    ├── Chinese Wall模型(金融)
    └── BMA模型(医疗)

8.2 模型选择指南

根据需求选择合适的模型:

需求推荐模型原因
保护分级信息机密性Bell-LaPadula + 信息流专门设计用于机密性保护
保护数据完整性Biba + Clark-Wilson防止数据污染和篡改
金融机构信息保护Chinese Wall防止利益冲突
医疗资料保护BMA保护患者隐私
需要安全标签强制访问控制(MAC)系统强制执行

九、总结

访问控制的核心要点:

  1. 机密性保护:使用Bell-LaPadula模型和信息流模型
  2. 完整性保护:使用Biba模型和Clark-Wilson模型
  3. 多边安全:Chinese Wall用于金融,BMA用于医疗
  4. BLP规则:上读下写,保护机密性
  5. Biba规则:下读上写,保护完整性
  6. 强制访问控制:需要安全标签,系统强制执行
关键要点
  • Bell-LaPadula模型和信息流模型保护机密性
  • Biba模型和Clark-Wilson模型保护完整性
  • Chinese Wall模型用于金融机构
  • BMA模型用于医疗资料保护
  • BLP模型:上读下写(No Read Up, No Write Down)
  • Biba模型:下读上写(No Read Down, No Write Up)
  • 强制访问控制(MAC)需要安全标签
  • Chinese Wall和BMA都是多边安全模型
  • 访问控制实施流程四要素:主体→实施部件→客体→决策部件
  • 实施部件执行决策,决策部件判断权限
💡实践建议
  • 根据保护目标选择合适的安全模型
  • 机密性和完整性可以同时实施
  • 多边安全模型适用于特定行业
  • 强制访问控制适用于高安全环境
  • 定期审查和更新访问控制策略