访问控制

2024-07-05

前言

访问控制其实和linux中遇到的文件系统权限,apparmor是息息相关的 自我宣传一下.jpg 😄
这个章节讲述的是linux中访问控制策略实施的原型
各位如果感兴趣,还可以看看本人的其他章节~
linux 文件/目录 权限管理
AppArmor 访问控制
当然不看也可以~

1. authorization VS authentication

authorization(授权)表达的是你能够做什么
authentication(认证)表达的是你是谁

2. Modeling Access Control

首先需要对访问控制进行建模

Subjects S
Things in the system that can act
即执行者

Objects O
Assets or objects in the system (acted upon)
资产/物体,可以被执行

Rights R
What can the subject do to the object?
即S可以对O做的事情,即权限

在一个简单的Unix Model中,系统中各个物体映射到访问控制模型的结果如下:

Subjects are processes(进程,可以说是域,即属主,属主域,其他)
p, q

Files are objects(文件)
f, g

Rights (read, write, execute, append, own)
r, w, x, a, o 

2.1 Access Control Matrix

访问控制矩阵,subjects作为行,subjects+objects作为列,Rights表示subject可以对subject/object做的动作

2.2 Access Control Matrix 实施策略

访问控制矩阵的每一列都会存储在objects(文件)里,这一列被称作ACLs(Access Control Lists)
具体到linux系统中,即ls -l 显示出的权限

另一方面,访问控制矩阵的每一行都会存储在subjects
具体到linux系统中,即getcap /usr/bin/ping可以查看的内容

ACLcapabilities的区别

1、 ACL要求认证(即你是谁),CAP不需要,所以CAP不能被仿造且传播时必须要被良好控制

2、CAP提供了最细粒度的权限控制,特别是被创建来执行特定任务的短期进程...但是实际上不可能记录进程对每个文件的权限,所以linux中CAP主要限制的是内核的资源

3、ACL对文件更好用,CAP对进程更好用
撤销也是如此~

3. POSIX的ACL

12bits来表示各个文件的ACL

--- SUID SGID Sticky-bit
--- r    w    x     owner
--- r    w    x     file's group
--- r    w    x     other

可以通过cat /etc/passwd查看用户基本信息
查询到的信息一般如下所示

root:x:0:0:root:/root:/bin/bash

:表示分隔符
1. root : 表示用户名
2. x    :表示密码,x是占位符,如果x在就说明密码被存在另外一个文件里,一般是/etc/shadow
3. 0    :用户id,即uid
4. 0    :组id,即gid
5. root :用户描述字段,告诉你这个用户是干啥的
6. /root:用户的主要目录在哪里
7. /bin/bash:用户登录时使用的shell程序

现在查看一下/etc/shadow中的内容

root:!:19531:0:99999:7:::

1. root : 表示用户名
2. !    : 加密后的密码,如果是!或* ,说明无法用这个账户登录
3. 19531: 上次密码更改的日期,这是自1970年1月1日以来的天数,表示上次密码更改的日期。可以使用这个数字计算具体的日期。19531 表示 2023年7月16日。
4. 0    : 密码最小使用天数,0表示没有限制
5. 99999: 密码最大使用天数,99999基本表示永不过期了~
6. 7    : 密码警告期,密码到期前7天发出警告,提示用户改天数
7.      : 密码不活动期,用户密码过期后账号被锁定前的非活动天数。空字段表示没有定义
8.      : 账号到期日期,自1970年1月一日以来的天数,没有内容表示账号永不过期
9.      : 保留字段

4. 访问控制的类型

Discretionary Access Control:自主访问控制
即object的拥有者可以决定谁能访问这个object

Mandatory Access Control: 强制访问控制
系统决定谁能访问objcet

Originator Controlled Access Control: 基于原创者的访问控制
object的创始人决定其他人对该object的权限
目前还没有有效的实现,因为目前的访问控制都是针对实体,而它是针对实体中的信息

Role Based Access Control (RBAC):基于角色的访问控制
用户的权限由其角色控制,并且每个主体在任何时刻只能有一个角色

Attribute Based Access Control (ABAC):基于属性的访问控制
用户会有一些属性(id,年龄,身份,etc),而访问控制策略就是各种属性的复杂布尔表达式

在自主访问控制和强制访问控制都存在的系统中,一般先进行强制访问控制,然后再进行自主访问控制

4.1 Mandatory Access Control讲解

现实中MAC会如何实现呢?
军事机密等级,从上到下分别是top secret、secret、confidential、unclassfied 在MAC中,也有类似的等级,接下来说定义:

L(S) = ls is the security clearance of subject S

L(O) = lO is the security classification of object O

For all security classifications li,i=0, …, k-1, li < li+1 

总之,每个`subject和object都有一个等级`。比较规则如下:

Simple-Security Condition (preliminary version)
S can read O if lO ≤ lS 

*-Property (preliminary version)
S can write O if lS ≤ lO

如果s的等级比o大,就可以读o的内容,这个很好理解
如果s的等级比o小,就可以写o的内容,这里主要是因为:
如果s的等级比o大就可以写o的内容的话,s可以把o的内容读出,然后写入其他低等级的文件中,导致信息向下泄露

但是这种机制太粗粒度了,又有了新的分类:

The security level (L, C) dominates the security level (L’, C’) if L’ ≤ L and C’ ⊆C

实践起来就是:
S can read O iff S dom O
即 LO ≤ LS and CO ⊆ CS

*-Property
S can write to O iff O dom S
即 LS ≤ LO and CS ⊆ CO

这就是著名的Bell-LaPadula Model(贝尔-拉帕杜拉模型)