1.Selinux是什么?
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
2.产生的背景:
SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。
设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?
SELinux 就是来解决这个问题的。
3.Selinux功能:
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
4.SElinux限制措施:
DAC自主访问控制:对应用户的是否对某个资源存在权限(读、写、执行);权限管理机制的主体是用户
MAC强制访问控制(两种模式):判断用户对某个资源存在权限,再判断每一类进程是否拥有对某一类资源的访问权限;
这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。
DAC自主访问控制 与 MAC强制访问控制 区别:
可以看到,在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。
MAC强制访问控制(两种模式)
类别安全(MCS)模式:(常用)
多级安全(MLS)模式:
5.Selinux的基本概念
主体(Subject)
可以完全等同于进程。
对象(Object)
被主体访问的资源。可以是文件、目录、端口、设备等。
政策和规则(Policy & Rule)
系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。
而哪些进程需要管制、要怎么管制是由政策决定的。
一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。
规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。
安全上下文的结构及含义
安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。
一个「进程安全上下文」一般对应多个「文件安全上下文」。
只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。
需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。
6.SELinux 工作模式;
可以在 /etc/selinux/config 中设定。
SELinux 有三种工作模式,分别是:
1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
3. disabled:关闭 SELinux。
如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。
enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。
需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文。
7 SELinux 工作流程(逻辑流程)
8.配置文件、日志、路径、数据存储位置
配置文件:
/etc/selinux/config
SELinux 日志:
tail -f /var/log/audit/audit.log
SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。
9、SELinux 基本操作
查询文件或目录的安全上下文
命令基本用法
ls -Z <文件或目录>
用法举例
查询 /etc/hosts 的安全上下文。
ls -Z /etc/hosts
执行结果
-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts
查询进程的安全上下文
命令基本用法
ps auxZ | grep -v grep | grep <进程名>
用法举例
查询 Nginx 相关进程的安全上下文。
ps auxZ | grep -v grep | grep nginx
执行结果
system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx
s
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process
手动修改文件或目录的安全上下文
命令基本用法
chcon <选项> <文件或目录 1> [<文件或目录 2>...]
快速切换selinux的开关状态:
临时关闭selinux (重启服务器后失效):
[root@lodboyedu-01 ~]# setenforce 0
[root@lodboyedu-01 ~]# getenforce (查看当前selinux状态)
Permissive(临时关闭)
临时开启selinux (重启服务器后失效):
[root@lodboyedu-01 ~]# setenforce 1
永久配置selinux状态:
修改 /etc/selinux/config文件
重启生效