内容来源:《Linux内核安全模块深入剖析》———李志
Linux内核安全模块
安全模型:BLP模型——解决私密行——禁止上读,禁止下写
BIBA模型——解决完整性——禁止上写,禁止下读
分时复用时代:角色的访问控制
PC时代:类型增强(TE)——控制进程
信任的度量:完整性校验值、数字签名
第一部分 自主访问控制
自主:使用计算机的人决定访问策略-------->应用
访问控制:标记——主、客体 策略——允许主体对客体i做什么
优缺点:优:设计简单 缺:安全性相对较差
一.主体标记与进程凭证
(include/linux/sched.h)
1.1uid和gid
uid——标记运行进程的用户——real_cred
gid——标记用户组——cred
1.uid和gid
英文名称——中文名称——作用
(r)uid——资源统计和资源分配
euid——有效id——内核做特权判断、IPC通信和密钥
suid——特权有关,暂存euid的值
fuid——文件系统id——文件系统访问相关的访问控制中判断操作许可
gid类似uid
补充组id——访问控制权限检查
group id——与特权无关
二.客体标记与文件属性
2.1文件属性
文件:包含文件的内容(数据),元数据
元数据
内容:存取访问方式、创建日期、所在设备、属主和属组以及允许位等。
存储位置:文件系统的inode中
2.2系统调用
文件——内核修改——调用相关函数(chown/stat)
三.操作与操作许可
1.基本操作:
读、写
额外操作:
1.文件:执行——本质:进程替换自身的内存——将文件内内容置入进程的代码空间和数据空间
2.目录:读——列出目录的内容 写——自目录中增/删 文件/子目录
3.管道——pipefs文件系统上的匿名文件 命名管道/设备——特殊类型的文件,执行无意义
4.IPC——不是作为特殊文件实现的,故只有读写操作。
5.socket——无定义操作许可。
6.key(密钥)——可类比文件 key——文件 keyring——目录
操作:1.读 2.写 3.搜索 4.链接 5.查看 6.设置属性(setattr)
2.允许位
同主,同组,其他组的读、写、执行
1.文件——9bit IPC——6bit 密钥——18bit
3.设置位
1.文件
增加3个允许位:setuid setgid sticky id
setuid:
当一个文件setuid=1——进程的euid、fsuid修改为文件属主id——进程读取内容+文件属性部分数据
setuid:
类似setuid,不同:进程的euid、fsuid修改为文件的属组id。与特权无关。
sticky id
Linux系统中无作用
2.目录
setuid:无任何作用
setuid:在此目录下创建的文件和子目录的属组自动初始化为目录的属组
sticky id:在其下的文件/子目录只能被该文件/子目录的属主删除
四.访问控制列表
1.作用范围
只作用文件和目录。
2.实现方式:
扩展属性被实现为一个数组,数组项又分为属性名和属性值。
属性名:字符串 属性值——任意类型
和访问控制列表相关的扩展属性有两个 属性名分别是system.posix_acl_access和system.posix_acl_default。
结构:tag id permission-bits(3bit)
id:用户的id或组id
permission-bits:分别表示读、写、执行
3.操作许可
1.进程fsuid=文件属组————判断进程申请的操作是否在ACL_USER_OBJ项的permission-bits中,若是,返回允许,否则返回拒绝 2.进程fsuid=文件的某一项ACL_USER中规定的id——————判断进程申请的操作是否在该项的permission-bits和ACL_MASK项的permission-bits的交集中,若是,返回允许,否则返回拒绝 3.进程fsuid 或 补充组中的任何一个gid = 文件的属组或某一项ACL_GROUP中规定的id (1):无ACL_MASK项,判断进程申请的操作是否在该项的permission-bits中,若是,返回允许,否则返回拒绝