SElinux 学习笔记--例子实现
2015-09-09 16:22
627 查看
目前工作进度总结
测试环境介绍操作系统:Fedora 22 MATE /Fedora 21
环境搭建:
root# yum install -y policycoreutils-python policycoreutils-devel selinux-policy-devel setools hddtemp git vim ctags --nogpgcheck
参考:
PDF:https://mgrepl.fedorapeople.org/PolicyCourse/writingSELinuxpolicy_MUNI.pdf
代码:https://mgrepl.fedorapeople.org/PolicyCourse/
一小型教程,主要介绍SElinux policy language的基本编写规则
附加概念介绍
SElinux 其实最主要的控制方式是TE(Type Enforcement)控制,即基于Type对主客体之间的权限关系进行设置,而角色以及用户,更多的起到的是对不同类的Type进行分类标记的作用
DAC (Discretionary Access Control )自主访问控制机制:
Linux自身的访问控制模型
采用较为宽松的管理形式,所有者拥有一切权限,但是一旦程序本身出现问题,所有者的权限可能会被滥用,即不受信用户可能以此来破坏计算机的稳定
MAC (Mandatory Access Control)强制访问控制机制:
这种访问控制模型主要用来保护机密数据,即完全由安全策略来控制对于客体的访问,而不是由所有者来决定,因此可以不受个别程序缺陷的影响
MLS (Multilevel security)多层安全模型:
一种常见的用来实现MAC的模型,主要基于Bell-LaPadula(BLP) 模型
主要特点是禁止下读上,上写下,即低层级主体无法读取高层级客体,高层级主体无法写入低层级主体,这种模型十分严格,主要限制了数据信息的流通,主要用途是保证数据的机密性,但是大部分的应用场景不需要应用这种特别严格的控制模型
RBAC (Role-based Access Control)基于角色的访问控制机制:
基于角色关系对主体及客体进行安全策略设置
SElinux中提供的RBAC是基于对不同角色之间的type类进行安全策略的编写来实现对不同角色的权限区分的
测试代码
参考:http://www.ibm.com/developerworks/cn/linux/l-rbac-selinux/
代码主要实现基于角色的收银控制:
其主要访问逻辑判断基于register.py以及用户运行register.py时的安全上下文
判断是否是mgr_r进行不同操作
主要的权限还是在于register.py 文件本身的type权限以及运行是register.py的域控制
按照教程进行make安装,会出现如下问题:
提示某种类型无法找到:
r_file_perms 改正为read_file_perms (.if以及.te文件)
_tty_device_t 以及 _devps_t
这两种类型暂时无法解决,查阅后得知_tty_device_t主要是用于启用TTY界面即不同用户登录使用
_devps_t还暂时不知道,如果采用定义,即使用type对这两种类型定义,将出现安装后无法使用的结果,原因暂时不清楚。
安装后出现的问题:
设定用户无法登录:
原因大概是使用定义的用户所拥有的type无法启动shell,但具体缺少什么不清楚,曾尝试添加例如corecmd_exec_bin() 类的方法,仍无法使用,不清楚是因为权限不够,还是由于本条语句的使用出现问题
设定角色无法使用:
原因是角色所拥有的类型无法启用shell,报出permission denied之类的错误,使用newrole类的命令也得带了permission denied类的错误,证明确实是切换后的权限不够?(能力不够?)
参考:
[]https://mgrepl.fedorapeople.org/PolicyCourse/writingSELinuxpolicy_MUNI.pdf]
使用本例子进行测试时,参考了其生成的selinuxrun这个shell进行使用时发现或许可以使用runcon以及chcon这两个命令去实现角色装换的目标:
runcon:改变运行时的安全上下文,需要拥有切换角色或者类型的权限
chcon:改变某一文件的安全上下文,需要拥有改文件的修改权限
这两个命令的使用总是出错,在对系统本身的权限进行处理时没有什么问题,但是对于上一个例子中的角色和类型进行切换时,会遇到很多permission denied,不知道是使用不正确还是权限设置不对,总之对于整个SElinux的了解还不够深,不清楚这其中的区别还有具体的实现,例如大多数的程序都是通过initrc_t这种类型进行引导的,如何在这种引导后对进程的type进行重定义还不知道。
下一步
完全理解SElinux的安全控制方式
了解大部分的系统默认安全策略,对系统本身自带的安全策略建立起结构模型(targeted)
尝试实现一个能被使用type模型
尝试实现一个能够登录的SElinux用户(使用自建的角色以及类型控制)
相关文章推荐
- linux命令语法以及借口交互
- Linux初学者的简易脚本----计算器
- linux系统开机流程以及grub的配置
- linux 下查看网速的方法 (不需要安装任何软件)
- Linux 文件系统(二)---执行过程及结构间的关系
- Linux初学——文件属性
- [JIRA] 最新Linux安装版本jira6.3.6安装破解以及数据导入的详细步骤
- linux下weblogic12c集群的安装部署
- Centos6.5 DNS搭建
- centos6.5内网搭建DNS服务器
- 学习笔记-linux中的时间管理
- 西电 Linux系统 Ubuntu 15.04 64位 连接校园网
- linux配置网桥组
- centos 6 mysql安装配置授权
- Linux下安装MySql(版本5.5以上)
- 30-linux学习总结
- Linux输入子系统
- centos7 部署cobbler
- 嵌入式 Linux进程含义知多少
- CentOS7修改主机名