Linux从入门到精通——selinux
一.关于selinux
1.简介
SELinux(Security-Enhanced Linux,中文翻译为增强型Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。
SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统。在selinux之前root拥有最大的权限先,可以随意的访问或更改任何文件和服务配置文件,如果某个文件设为777,那么任何用户都可以访问甚至删除。 这种方式称为DAC(主动访问机制),很不安全。DAC自主访问控制: 用户根据自己的文件权限来决定对文件的操作,也就是依据文件的own,group,other/r,w,x 权限进行限制。Root有最高权限无法限制。r,w,x权限划分太粗糙。无法针对不同的进程实现限制,而MAC则可以。对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian或 Centos。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他。SELinux提供了比传统的UNIX权限更好的访问控制。
2.工作方式
在SELinux中,访问控制属性叫做安全上下文,所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户(u)、角色(r)、和类型(t)标识符。但我们最关注的是第三部分
当程序访问资源时 ,主体程序必须要通过selinux策略内的规则放行后,就可以与目标资源进行安全上下文的比对,若比对失败则无法存取目标,若比对成功则可以开始存取目标,最终能否存取目标还要与文件系统的rwx权限的设定有关
3.SELinux的核心组件
SELinux核心组件执行enforcement 安全策略是的流程如下图。
- 1.一个请求/获取资源/权限的subject必须存在。
- 2.一个对象管理器,其知道对特定资源需要的权限,
- 3.Security Server根据安全规则对请求的访问做安全决策
- 4.Security Policy描述了使用SELinux的policy语言描述的规则
- 5.Access Vector Cache(AVC)通过缓存安全策略以提高系统性能。
上图从下到上是:
a)当前security server嵌入在linux kernel空间,policy则由libselinux库提供的若干函数从用户空间取得。
OM(object manager)和AVC(access vector cache)驻留在内核空间和用户空间。
b)SELinux 安全策略(上图右侧),其支持/etc/selinux目录下的配置文件。这个目录包括了SELinux主要配置文件。
c)支持模块策略,
d)Policy source是必须的,可以有三种基本方法提供。
i)作为SELinux Policy Language所写的源码。
ii)使用Reference Policy支持高级宏定义安全规则。这是当前SELinux采用的标准方法。
iii)使用CIL(common Intermediate Language)
e)为了能够编译连接规则源文件,以及加载安全服务需要许多工具(上图上半部分)
f)为了使得管理员可以管理策略,SELinux环境和标签文件系统,工具以及修改的linux 命令被使用。
g)为了确保安全事件被记录,audit 服务用于捕捉违反规则的信息。
h)SELinux支持网络服务。
有SELinux情况时的系统调用
DAC是标准linux的Discretionary Access Control。
关于内核空间和用户空间:
内核空间
OM服务于内核服务如文件,目录,套接字,进程间通信等,由嵌入SELinux子系统的Linux Security Module(LSM)的hook函数提供。内核空间的AVC用于缓存加速基于内核OM的访问速度。
用户空间
应用程序或用户空间服务的MAC控制。
二.使用selinux进行权限设定
1.查看selinux的状态
(1).sestatus查询selinux工作状态
可以看到selinux目前的状态、文件挂载点、root用户目录、当前策略组名称、工作模式等等信息
(2).selinuxenabled检查selinux是否开启,配合echo $?.传回值是0为开启,1为关闭。
$?代表上个命令的返回值,用echo显示出来,0为开启,1为关闭
(3).getenforce
permissive 警告模式
enforcing 强制模式
disabled 关闭模式
2.设置selinux的状态
(1).命令的方法更改selinux状态:
setenforce 0|1
0 permissive 警告模式:系统不会受到selinux保护,只是收到警告信息。即使违反了策略的话也可以继续操作,但是会把违反策略的内容记录下来(警告信息)
1 enforcing 强制模式:系统收到selinux保护,开启安全上下文的匹配,任何违反策略的操作都会被拦截
注:该方法会立即生效但只是临时的,重启系统之后设置将不会被保留
可以看到改完后立即生效,从强制模式改为警告模式,但是需要注意的是该方法不能关闭selinux,当selinux关闭时也无法用该方法打开selinux
(2).修改配置文件的方法更改selinux状态:
vim /etc/sysconfig/selinux
disabled 关闭模式
permissive 警告模式
enforcing 强制模式
selinux是内核级别的插件,所以修改完文件后需要重启系统,重新加载内核修改才会生效,该方法不是即时生效,但可以永久生效,而且也可以关闭selinux
(3)图形界面管理
rhel还提供了一个图形界面工具管理selniux的软件,在rhel7中命为policycoreutils-gui,在7之前的版本中可能名为system-config-securitylevel,安装后
使用命令system-config-seliux即可以图形的方式设置selinux的状态、策略等,在此只作简介,不具体介绍,可以自己尝试
如果记不住名字可以用yum搜索,参数用search 或者whatprovides都可以
图形工具的界面如上,左侧有很多选项可以更改文件安全上下文、服务布尔值、网络端口等等
3.查看安全上下文
ls -lZ ##查看文件的安全上下文
ls -dZ ##查看目录的安全上下文
ps -Z ##查看进程的安全上下文
id -Z ##查看用户的安全上下文
查看文件的布尔值root之后的一串字符就是该文件的布尔值
查看目录的布尔值
查看进程的布尔值
查看你用户的布尔值
4.SELinux的布尔值
getsebool -a ##查看所有服务的布尔值
getsebool -a | grep 服务名 ##查看制定服务的布尔值
setsebool -P 策略名 on |off ##设定某项服务的某个策略是否开启,on表示开启,off表示关闭
或者
setsebool -P 策略名 1 | 0 ##1表示开启,0表示关闭
以http服务为例,可以看到当selinux开启时,许多权限默认关闭
查看ftp服务的布尔值并开启匿名用户可写的权限
可以看到权限已经开启
5.查看日志
/var/log/audit/audit.log