没有合适的资源?快使用搜索试试~ 我知道了~
首页linux-selinux功能及源码分析
linux-selinux功能及源码分析
5星 · 超过95%的资源 需积分: 33 91 下载量 157 浏览量
更新于2023-03-16
评论 3
收藏 2.36MB PDF 举报
该书详细介绍了linux中关于selinux部分功能的实现流程和关键代码分析
资源详情
资源评论
资源推荐
声明
你可以自由地随意修改本文档的任何文字及图表,
但是如果你在自己的文档中以任何形式直接引用了本文档的任何原有文字或图表并希望发布你的文档,
那么你也得保证让所有得到你的文档的人继续享有你曾经享有过的权利。
SELinux 学习笔记
Harry Ciao
harrytaurus2002@yahoo.com.cn
一个人对家庭、公司、社会的价值在于奉献
感谢这几年有机会能够比较系统地接触 SELinux
希望此文能够对 SELinux 在中国的推广和应用起到微薄的促进作用
感恩,感谢,祝愿每个人的心中都充满阳光和快乐
最后更新:2012-2-2
目录
引子...........................................................................9
1. 操作系统中访问控制模型的演化................................................9
1.1 访问控制模型的概念(Reference Monitor)...............................9
1.2 DAC(Discretionary Access Control)的致命伤...........................9
1.3 MAC(Mandatory Access Control)的起源................................10
1.4 SELinux 的 TE(Type Enforcement)模型.................................10
2. SELinux 的概念.............................................................12
2.1 SELinux 的“物质基础”-安全上下文(Security Context)................12
2.2 LSM(Linux Security Module).........................................13
2.3 Type Enforcement 的概念...............................................14
2.4 Domain Transition 的概念..............................................14
2.5 Role 的作用...........................................................15
2.6 Domain Transition 和 role 规则举例.....................................16
2.7 MLS 对 SC 的扩展.......................................................17
3. SELinux 的语法.............................................................18
3.1 Object Class and Permissions.........................................18
3.2 Type, alias and Attribute............................................19
3.3 Access Vector Rules..................................................20
3.4 Type Transition Rule.................................................21
3.4.1 type_transition 规则介绍.......................................21
3.4.2 type_transition 规则的新特性...................................23
3.5 神奇的 type_change 规则...............................................24
3.5.1 type_change 规则的作用.........................................24
3.5.2 Relabel terminal 所需的权限....................................24
3.5.3 type_transition 和 type_change 规则的比较.......................25
3.6 RBAC.................................................................25
3.6.1 基于角色的访问控制............................................25
3.6.2 RBAC 机制的其他规则(Revisited)...............................27
3.6.3 RBAC 语法举例..................................................28
3.7 Constraints and MLS constraints......................................30
3.7.1 SELinux 的 constrain 语法.......................................30
3.7.2 MLS 的 mlsconstrain 语法........................................31
3.8 Boolean, Tunable and Optional Policy(Revisited)....................32
3.9 Range Transition.....................................................35
3.10 Role Transition.....................................................36
3.11 使用 setools 工具包分析 policy.X......................................36
3.11.1 seinfo 的使用.................................................36
3.11.2 sesearch 的使用...............................................39
3.11.3 在 Host 上使用 apol 具分析 policy.X.............................40
3.12 在 Host 上使用 Checkpolicy 访问用户态 Security Server..................41
4. Reference Policy...........................................................44
4.1 Reference Policy 代码树的主要结构.....................................44
4.2 Policy Package 的源代码文件...........................................46
5. SELinux 的用户态设施.......................................................48
5.1 /etc/selinux/config..................................................48
5.2 /etc/selinux/$SELINUXTYPE/...........................................48
5.2.1 /etc/selinux/$SELINUXTYPE/seusers.............................48
5.2.2 /etc/selinux/$SELINUXTYPE/contexts/...........................49
5.2.3 /etc/selinux/$SELINUXTYPE/contexts/initrc_context 文件,run_init 程序
和系统启动脚本......................................................51
5.3 Policy Store.........................................................53
5.4 selinuxfs 目录树......................................................54
5.5 /proc/pid/attr/目录树................................................56
6. SELinux 的安装.............................................................58
6.1 Ubuntu 上 SELinux 的安装...............................................58
6.1.1 initramfs.....................................................58
6.1.2 Targeted Policy...............................................58
6.2 某发行版上 SELinux 的启动过程(Revisited)............................59
6.2.1 selinuxfs 的挂载...............................................59
6.2.2 判断内核是否使能了 SELinux.....................................59
6.2.3 init 程序......................................................60
6.2.4 系统启动脚本..................................................61
7. 为应用程序开发新的 pp......................................................62
7.1 Object 的标签由谁决定?(Revisited)..................................62
7.1.1 使用 fs_use_xxx 语法定义的文件系统..............................62
7.1.1.1 使用 xattr 保存 SC 的文件系统.............................62
7.1.1.2 基于 Transition SID 的文件系统...........................64
7.1.1.3 基于创建者 SID 的文件系统................................65
7.1.2 Generalized Security Context Labeling.........................65
7.1.4 Mount-Point Labeling..........................................66
7.1.5 Initial SID...................................................68
7.1.5.1 Initial SID 和 Initial SC 的定义.........................68
7.1.5.2 Initial SID 和 Initial SC 的写出和解析...................70
7.1.5.3 Initial SID 和 Initial SC 的使用.........................71
7.1.6 进程创建的内核数据结构的标签..................................72
7.2 何时需要为应用程序开发 pp?...........................................72
7.3 设计 pp 的一般过程....................................................75
7.4 为 vlock 程序编写 vlock.pp.............................................76
7.4.1 第一阶段:定义基本的.te, .fc 和.if 文件 ........................76
7.4.2 第二阶段:根据 AVC Denied Msg 补充相应的规则 ...................80
7.4.3 第三阶段:使用 dontaudit 规则屏蔽与冗余操作相关的错误信息.......81
7.4.4 其他注意事项..................................................83
7.5 为 samhain 程序编写 samhain.pp.........................................85
7.5.1 第一阶段:定义基本的.te, .fc 和.if 文件 ........................85
7.5.2 第二阶段:根据 AVC Denied Msg 补充相应的规则 ...................90
7.5.3 第三阶段:使用 dontaudit 规则屏蔽与冗余操作相关的错误信息.......92
7.5.4 图解:使用 samhain 时的 Domain Transition 过程...................93
7.6 使用 SLIDE 来开发 pp,分析 SELinux 源代码...............................93
7.7 编写 pp 时的注意事项..................................................94
8. SELinux 问题分析步骤总结...................................................96
8.1 排除 DAC 权限的问题...................................................96
8.2 检查用户当前所扮演的角色.............................................96
8.3 分析 AVC Denied Message:Target 的标签正确吗?........................96
8.4 在系统启动过程中适时地修复错误的文件标签.............................97
8.5 应用程序的实际行为要和其 pp 的假设相一致..............................98
8.6 明确相应 domain 所缺少的权限..........................................98
8.7 其他注意事项.........................................................99
8.7.1 在 Permissive 模式下调试........................................99
8.7.2 取消所有的 dontaudit 规则.......................................99
8.7.3 当心 MLS Constraints..........................................100
8.7.4 检查 SELinux-aware 应用程序的配置和编译选项....................101
8.7.5 积极地和社区交互.............................................101
8.7.6 使用 strace 直接定位失败的系统调用(重要!)...................102
8.8 SELinux 问题分析过程和方法举例(Revisited)..........................102
8.8.1 实例一:用户无法在 console 上正常登录 - 使用 strace 定位失败操作 102
8.8.2 实例二:sysadm_r 无法正确使用 useradd 命令.....................108
9. SELinux 开发笔记..........................................................114
9.1 使能对/dev/console 的支持............................................114
9.1.1 提出问题:20101213 及之前的 refpolicy 缺乏对 console 的支持.....115
9.1.2 分析问题.....................................................115
9.1.3 解决问题.....................................................116
9.1.4 测试结果.....................................................117
9.1.5 使用 strace 观察 console 被重新打标签的细节(new)..............117
9.2 Socket Labeling 开发.................................................118
9.2.1 提出问题:socket 默认继承其创建者的 SID 的副作用...............118
9.2.2 分析问题.....................................................119
9.2.3 解决问题.....................................................119
9.2.4 测试结果.....................................................123
9.3 给 role_transition 规则添加 class 的支持..............................124
9.3.1 提出问题 - 当前 role_transition 规则只对 process 类有效.........124
9.3.2 分析问题.....................................................124
9.3.3 解决问题.....................................................125
9.3.4 测试结果.....................................................131
9.3.5 其他说明.....................................................135
9.3.6 经验总结.....................................................135
9.4 增加 role attribute 的支持(new)....................................136
9.4.1 提出问题之一:role-dominance 规则的局限性.....................136
9.4.2 提出问题之二:期望的 role attribute 使用模型...................140
9.4.3 分析问题 ....................................................142
9.4.4 解决问题.....................................................145
9.4.5 测试结果.....................................................163
9.4.6 一个有意思的编译问题.........................................168
9.4.7 有关 role-types 规则语法的讨论.................................171
9.5 区分 tunable 和 boolean(new)........................................172
9.5.1 提出问题 - 无用的 tunable 分支被写入 policy.X..................172
9.5.2 分析问题.....................................................173
9.5.3 解决问题.....................................................174
9.5.4 测试结果.....................................................187
9.5.5 其他经验总结.................................................188
9.N 在策略中指定 newcontext 的缺省设置方法(todo).......................192
9.N.1 提出问题 - newcontext 的设置策略被硬编码到机制中..............192
10. SELinux 内核驱动分析小记.................................................194
10.1 LSM 核心数据结构及相应回调函数......................................194
10.2 SELinux 核心数据结构................................................194
10.2.1 SELinux 对内核数据结构的扩展.................................194
10.2.1.1 进程的安全属性........................................195
10.2.1.2 文件和打开文件描述符的安全属性........................195
10.2.1.3 socket 的安全属性.....................................196
10.2.1.4 文件系统超级块的安全属性..............................196
10.2.2 AVC 数据结构.................................................197
10.2.3 内核 policydb 中保存 TE 规则的数据结构.........................199
10.2.4 内核 policydb 中保存 RBAC 规则的数据结构.......................200
10.2.5 SELinux 规则在内核中的检查点总结(new)......................201
10.3 情景分析:打开文件时的相关函数调用链...............................201
10.4 通过 SELinuxfs 访问内核 Security Server..............................208
10.4.1 /selinux/load 和 load_policy 命令 - 装载冰解析 policy.X 二进制文件209
10.4.2 /selinux/relabel 及 compute_relabel 命令 - 查询 type_change 规则211
10.4.3 /selinux/create 及 compute_create 命令 - 查询 type_transition 规则211
10.4.4 /selinux/member 及 compute_member 命令 - 查询 type_member 规则. 212
10.4.5 /selinux/access 文件和 compute_av 命令 - 查询 allow 规则.......213
10.4.6 /selinux/user 文件和 compute_user 命令 - 查询用户登录后可能的 SC213
10.4.7 /selinux/initial_contexts/ - 查询 Initial SID 对应的安全上下文214
10.4.8 /selinux/class/ - 查询内核 class_datum 数据结构(todo).......215
10.5 情景分析:Domain transition 的实现..................................215
10.5.1 selinux_setprocattr 函数 - /proc/pid/attr/*文件驱动..........216
10.5.2 do_execve 的行为和相关 SELinux 内核驱动.......................218
10.6 情景分析:文件系统的挂载和新文件的创建.............................221
10.6.1 文件系统的挂载过程(new)...................................221
10.6.2 确定新创建文件的标签........................................236
10.7 Context 数据结构和 u32 sid 之间的映射................................241
10.7.1 sidtab_node 的定义和 sidtab 的组织结构........................241
10.7.2 sidtab_insert 函数 - sidtab_node 的插入.......................242
10.7.3 sidtab_context_to_sid 函数 - 返回或分配 sid...................243
10.7.4 security_transition_sid 函数 - 计算新 subject/object 的 sid....244
10.7.5 创建 context 并注册到 sidtab 以获得 sid 的时机..................249
10.7.6 security_context_to_sid 函数 - 返回 SC 字符串对应的 sid........250
10.7.7 sidtab_search_core 函数 - sidtab_node 的查找..................251
10.7.8 security_sid_to_context_core 函数 - 返回 sid 所对应的 SC 字符串 252
10.8 Class Mapping......................................................254
10.8.1 Class Mapping 的作用.........................................254
10.8.2 Class Mapping 的创建.........................................254
10.8.3 Class Mapping 的使用 - class/perm 内核态和用户态索引的转换....257
10.8.4 增加 class 或者权限的方法.....................................258
10.9 和文件操作相关的回调函数...........................................259
10.9.1 selinux_file_mprotect 回调函数...............................259
10.10 和 AF_UNIX socket 相关的回调函数(todo).............................263
10.11 和程序执行相关的操作(todo)......................................264
10.11.1 selinux_bprm_secureexec 函数 - 扩展 AT_SECURE 机制...........264
10.11.1.1 C 库 AT_SECURE 机制介绍...............................264
10.11.1.2 C 库 AT_SECURE 机制演示...............................267
10.11.1.3 SELinux 对 AT_SECURE 机制的扩展(Revisited)..........269
11. 用户态应用程序对 SELinux 的支持...........................................272
11.1 libselinux 相关文件分析.............................................272
11.1.1 selinux_config.c 文件........................................272
11.1.2 getfilecon.c 文件............................................272
11.1.3 procattr.c 文件..............................................272
11.1.4 compute_relabel.c 文件(访问/selinux/relabel)...............273
11.2 newrole 源代码分析..................................................274
11.2.0 newrole 命令的使用模型.......................................274
剩余433页未读,继续阅读
zlbzlb815
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论7