你需要知道的SELinux入门学习
SELinux背景概述
SELinux:是由美国NSA(国安局)和一些公司(RedHat、Tresys等)设计的一个针对Linux的安全加强系统。
NSA最初设计的安全模型叫FLASK,全称为Flux Advanced Security Kernel(由Uta大学和美国国防部开发,后来由NSA将其开源),当时这套模型针对DTOS系统。后来,NSA觉得Linux更具发展和普及前景,所以就在Linux系统上重新实现了FLASK,称之为SELinux。
2000年,SELinux项目以GPL协议的形式开源,当RedHat在其Linux发行版本中包括了SELinux之后,SELinux才逐步变得流行起来。
现在,SELinux已经被许多组织广泛使用,几乎所有的Linux内核2.6以上版本,都集成了SELinux功能。
但是,SELinux主要是红帽Red Hat在Linux以及它的衍生发行版上的一个工具,而Ubuntu 和 SUSE(以及它们的衍生发行版)使用的是 AppArmor,SELinux和AppArmor 确是有显著不同的,这个我们可以日后再慢慢讨论。
了解了这些背景知识,现在让我们来正式入门吧!
SELinux概念
我们都知道,传统Linux系统中,默认权限是对文件/目录所有者、所属组、还有其他人的rwx权限进行管控,这种访问控制系统称为DAC,而在SELinux中则是使用MAC,那这二者到底有什么区别呢?我们有必要详细的了解一下这两个访问控制系统各自的特点。
DAC:(Discretionary Access Control)自主访问控制---SELinux出现之前的Linux安全模型
核心思想:这种权限管理机制的主体是用户,进程理论上所拥有的权限与执行它的用户的权限相同。比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情。
MAC:(Mandatory Access Control)--- 强制访问控制
核心思想:任何进程想在Linux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限,这种权限管理机制的主体是进程。
一个用户想要访问一个文件,需要同时满足:权限符合rwx权限;用户的进程符合SELinux规定。
MAC又细分为了两种方式,一种叫多类别安全(MCS)模式,另一种叫多级安全(MLS)模式。
多级别安全(MLS, Multilevel security):用于处理具有不兼容分类的信息,对进程(域)实施强制控制,允许具有不同安全权限和需要访问的用户对数据进行访问,同时阻止他们访问其他未授权的信息。
多类别安全(MCS, Multi categories security):针对具有同样访问权限的进程进行更深层次的权限区分,使其相互独立。
PS:Linux中的超级root不意味着在SELinux中也是超级root,SELinux的超级root只由安全策略的指定者来决定。
下面对一些思维导图没涵盖的内容做补充说明:
被主体访问的资源,可以是文件、目录、端口、设备等等。
政策和规则(Policy & Rule)--- 指导规范
政策决定了哪些进程需要管制、要怎么管制。
一套政策里面有多个规则,部分规则可以按照需求启用或禁用-----布尔型规则。
在安装新的应用程序时,应用程序可通过添加新的模块来添加规则,用户也可以手动地增减规则。
安全上下文(Security Context, SContext)--- SELinux的核心
安全上下文也可以简单地分成:「进程SContext」和「文件SContext」。
一个「进程SContext」一般对应多个「文件SContext」。
只有两者的SContext对应上了,进程才能访问文件,它们的对应关系由政策中的规则决定。
文件SContext由文件创建的位置和创建文件的进程所决定,系统一般会有默认值,用户也可以重设
ps:单纯的移动文件操作并不会改变文件的SContext。
安全上下文的结构及含义:
SContext使用 : 分隔为4个字段,其实共有5个字段,只是最后一个“类别”字段是可选的,分别用 : 隔开。例如:system_u:object_r:admin_home_t:s0
对应关系如下:
system_u:object_r:httpd_sys_content_t:s0:[级别]
#身份字段:角色:类型:灵敏度:[级别]
坑:进程的域和文件的类型不匹配,所以必须要掌握如何修改类型字段
SELinux的工作模式(可以在/etc/selinux/config中设定)
SELinux有三种工作模式,分别是:
1. enforcing:强制模式,违反SELinux规则的行为将被阻止并记录到日志中
2. permissive:宽容模式,违反SELinux规则的行为只会记录到日志中(调试用)
3. disabled:SELinux关闭状态
需要注意的地方:
1. 如果想从disabled切换到enforcing/permissive的话,需要重启系统,反之过来也一样。
2. enforcing/permissive模式可以通过setenforce1|0命令快速切换。
3. 如果系统已经在disabled下运行了一段时间,在打开SELinux之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建SContext。
4. SELinux日志的记录需要借助auditd.service这个服务,请不要禁用它。
SELinux工作流程
这里引用下别人文章里面的一张图片(安全文本指的就是SContext):
关于Selinux的作用
SELinux的存在并不是为了要修补Linux系统的缺陷,而是通过最大限度地减小系统中服务进程可访问的资源,对Linux的漏洞进行监控,便于及时采取措施。
举个栗子:
Linux产生DNS系统的缓存溢出攻击之后,并没有修复,而是接入Selinux进行强制接入控制,针对黑客进行第二次攻击的时间进行监控。
SELinux基本命令行
查看SELinux的模式
查看SELinux的政策(Policy)
通过配置文件调整SELinux的参数
查看SELinux状态
关闭SELinux:
a)临时关闭(不用重启机器):
setenforce 0 //设置selinux成为permissive宽容模式
setenforce 1 //设置selinux成为enforcing强制模式
b)修改配置文件需要重启机器:
修改/etc/selinux/config文件
将selinux=enforcing改为selinux=disabled
重启机器即可
坑:setenforce无法在Disabled的模式底下进行模式的切换
启动SELinux:
#vi /boot/grub/menu.lst
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-92.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet selinux=0
initrd /initrd-2.6.18-92.el5.img
如果要启动SELinux, kernel后面不能出现selinux=0属性
坑:一般使用时,要关闭服务器的SELinux功能,常用下面两种方法
1)临时关闭
#setenforce 0
#getenforce
2)永久关闭
#cat /etc/sysconfig/selinux
SELINUX=disabled
#reboot
SELinux安全上下文查看方法
SELinux安全上下文的修改和设置
(chcon和restorecon命令)
布尔类型规则操作部分
查询系统中的布尔型规则及其状态
getsebool –a //筛选的时候可以后接grep
开关一个布尔型规则
setsebool [-P] <规则名称> <on|off>
//-P 重启仍然生效
SELinux默认安全上下文的查询和修改
(semanage命令)
添加某类进程允许访问的端口
我们这次关于SELinux的学习就先聊到这里,之后的学习我们一起共勉吧,加油!
更多精彩阅读
END
长按关注 最新动态