1、Selinux
SELinux(Security-Enhanced Linux,安全增强型Linux)是美国国家安全局(NAS)对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问哪些在他的任务中所需的文件。SELinux在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的控制概念。
在SELinux中定义了许多类型(TYPE),每一个进程、文件、设备等都必须标识他所属的类型进程只能读取相同类型的文件,如果没有相关类型,并且SELinux不允许读取的时候,则无法读取文件。SELinux除了约束进程读取文件的能力之外,还限制进程对设备、网络联机、通信端口、跨进程通信的读取能力,并提供更细致的读取控制。
在SELinux中没有root这个概念,安全策略是由管理员来定义的,任何软件都无法取代它。这意味着那些潜在的恶意软件所能造成的损害可以被控制在最小。一般情况下只有非常注重数据安全的企业级用户才会使用SELinux。
2、原理简介
当一个subject(如: 一个应用)试图访问一个object(如:一个文件),Kernel中的策略执行服务器将检查AVC (Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached)。如果基于AVC中的数据不能做出决定,则请求安全服务器,安全服务器在一个矩阵中查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问,拒绝消息细节位于/var/log/messages中。
3、基本概念
策略:
SELinux策略是用来定义SELinux的读取规则,比如哪一个安全上下文的进程允许或禁止读取哪一个对象。Linux会把每一个Linux策略类型的资料存储在/etc/selinux策略类型名目录中。
安全上下文:
安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都一样,我们不必苛刻地去区分或避免使用术语域,通常,我们认为【域】、【域类型】、【主体类型】和【进程类型】都是同义的,即都是安全上下文中的“TYPE”。
所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用下面的格式指定或显示安全上下文:
USER:ROLE:TYPE[LEVEL[:CATEGORY]]
安全上下文中的用户和角色标识符除了对强制有一点约束之外对类型强制访问控制策略没什么影响,对于进程,用户和角色标识符显得更有意义,因为它们是用于控制类型和用户标识符的联合体,这样就会与Linux用户账号关联起来;然而,对于客体,用户和角色标识符几乎很少使用,为了规范管理,客体的角色常常是object_r,客体的用户常常是创建客体的进程的用户标识符,它们在访问控制上没什么作用。
4、Selinux相关操作
1)selinux状态查看与配置
[root@VM_0_11_centos ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@VM_0_11_centos ~]#
SELINUX=disabled
#此项定义selinux状态。
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。
#permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
#disabled—禁用selinux。
[root@VM_0_11_centos ~]# ll /etc/selinux/
total 20
-rw-r--r--. 1 root root 541 Dec 11 08:43 config
drwx------. 2 root root 4096 Dec 8 08:31 final
-rw-r--r--. 1 root root 2321 Oct 30 2018 semanage.conf
drwxr-xr-x. 7 root root 4096 Dec 8 08:31 targeted
drwxr-xr-x. 2 root root 4096 Oct 30 2018 tmp
[root@VM_0_11_centos ~]#
SELINUXTYPE=targeted
#此项定义selinux使用哪个策略模块保护系统。
targeted:保护常见的网络服务,是SELinux的默认值
minimum:SELinux最低基本策略
mls:提供符合MLS机制的安全性
2)查询selinux状态
[root@VM_0_11_centos ~]# sestatus
SELinux status: disabled
[root@VM_0_11_centos ~]# getenforce
Disabled
[root@VM_0_11_centos ~]#
3)设置selinux状态,0关闭,1打开
使用setenforce可以临时在enforcing模式与permissive模式之间切换,切换会被立刻应用于当前系统,计算机重启后无效,永久修改模式需要修改配置文件。
[root@VM_0_11_centos ~]# setenforce 0
setenforce: SELinux is disabled
4)查看安全上下文(-Z参数)
[root@VM_0_11_centos selinux]# ll -Z
-rw-r--r--. root root system_u:object_r:unlabeled_t:s0 config
drwx------. root root system_u:object_r:selinux_config_t:s0 final
-rw-r--r--. root root system_u:object_r:selinux_config_t:s0 semanage.conf
drwxr-xr-x. root root system_u:object_r:selinux_config_t:s0 targeted
drwxr-xr-x. root root system_u:object_r:selinux_config_t:s0 tmp
[root@VM_0_11_centos selinux]#
[root@VM_0_11_centos selinux]# ps -Z
[root@VM_0_11_centos selinux]# id -Z
id: --context (-Z) works only on an SELinux-enabled kernel
[root@VM_0_11_centos selinux]#
5)修改安全上下文
chcon命令
6)查看策略
#策略与目录同名
[root@VM_0_11_centos selinux]# ll /etc/selinux/
total 20
-rw-r--r--. 1 root root 541 Dec 11 08:43 config
drwx------. 2 root root 4096 Dec 8 08:31 final
-rw-r--r--. 1 root root 2321 Oct 30 2018 semanage.conf
drwxr-xr-x. 7 root root 4096 Dec 8 08:31 targeted
drwxr-xr-x. 2 root root 4096 Oct 30 2018 tmp
[root@VM_0_11_centos selinux]#
使用什么策略就安装对应的策略包
[root@VM_0_11_centos selinux]# yum -y install selinux-policy-minimum
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
多了一个minimum目录
[root@VM_0_11_centos selinux]# ll /etc/selinux/
total 24
-rw-r--r--. 1 root root 541 Dec 11 08:43 config
drwx------. 2 root root 4096 Feb 21 20:07 final
drwxr-xr-x 7 root root 4096 Feb 21 20:07 minimum
-rw-r--r--. 1 root root 2321 Oct 30 2018 semanage.conf
drwxr-xr-x. 7 root root 4096 Dec 8 08:31 targeted
drwxr-xr-x. 2 root root 4096 Oct 30 2018 tmp
[root@VM_0_11_centos selinux]#
7)相关日志信息
不管SELinux策略是允许还是拒绝资源的访问请求行为,都会记录日志,也就是AVC(Access Vector Cache)。所有SELinux拒绝的消息都会被记录进日志,根据系统中安装运行的服务进程不同,拒绝日志消息会被记录到不同的文件中。
日志文件 进程
/var/log/audit/audit.log auditd服务开启
/var/log/messages auditd服务关闭,rsyslogd服务开启
/var/log/audit/audit.log,/var/log/messages安装setroubleshoot相关软件包autitd与rsyslogd同时开启