跳转至

第 2 章:Unix 的自主访问控制

访问控制

访问控制(Access Control)是由一个引用监视器(reference monitor)进行所有资源访问请求来实现的。

引用监视器

当用户进程想要访问什么资源的时候,它们需要把请求发给引用监视器。引用监视器会根据一些政策来决定要不要把资源给出去。

访问控制六原则

  • 在提供足够的安全性的时候,应该先把可用性拉高
  • 不要用机制代替政策。
  • 拥有良定义的安全目标。
  • 拥有处理异常的能力。
  • 给“足够好的”最少权限,而不是死磕“严格的”最少权限。
  • 在给外面的接口中使用人们熟悉的内容。

访问矩阵模型

主体\客体 ... F ... G ...
...
U r,w,own r
...
V r,w,own
...

可以发现空间复杂度很离谱。

角色、主体和客体 Principals, Subjects and Objects

一个用户可以拥有很多个角色(比如通过账号密码登录来获得一个),角色可以根据它的权限执行一些主体(进程等)。在各个主体之下可以访问、执行一些客体(文件、文件夹或者一段内存数据等)。

注意主体有时候也可以当一些主体的客体,比如 kill、suspend 等操作就会拿进程开刀。

UNIX 的这三个

在 UNIX 里面,基本所有客体都以文件的形式存在。文件夹也算文件的一种。

  • 每个用户都有一个唯一的 UID,不过可以属于多个组。UID 为 0 代表是 admin。
  • 进程作为主体,进行对文件(客体)的访问。
  • 客体有各种属性:它的拥有者、所属组,然后 3 组 rwx 位,以及 suid、sgid 和 sticky。

rwx 三位分别代表了 read、write 和 execve 这三个系统调用。

客体的拥有者只能被 superuser 更改。

文件夹的 rwx

  • R 位表示有权限查看文件夹中的文件及子文件夹。
  • W 位可以让某人在这个文件夹里面增加或删除文件。删除文件不看这个文件的权限!
  • X 位可以让某人“进入”这个文件夹:可以 cd 到这儿,也可以通过文件名查找索引。

suid、sgid 和 sticky

suid 就是 set user id 的意思。

suid sgid sticky
不能执行的文件 仙布管
可执行文件 执行文件时更改 euid 执行文件时更改 egid
文件夹 里面的新文件会继承所属组 只有文件夹的所有者才能删除文件

suid = 1 时,可以在执行的时候改变 euid:以创建者的uid运行,有创建者的权限。

正常的文件会继承所有者的的 uid 和 gid;sgid = 1的文件会继承目录的 gid。

当 sticky 为 1 时,只有创建者才能删除它,别人即使有目录的写和执行权限也不能删除。

UNIX 的 User ID 模型

每个进程有三个 User ID 和三个 Group ID。

  • real user ID:ruid,进程的所有者。
  • effective user ID:euid,进程在多数权限判断时所使用的身份。
  • saved user ID:suid。

类似的也有三个这样的 Group ID。

更改 euid

有一种进程可以移除当前程序的权限。如果是永久移除,就把有权限的 uid 从 ruid、euid 和 suid 里面都移除;如果要暂时移除,就把有权限的 uid 从 euid 里面移除,放到 suid 里面,恢复权限的时候再从 suid 里面恢复 euid。