一:
SElinux
(安全增强
linux
简介)
1 :使用 SElinux 可以将进程放入在特定的 SElinux 域,同时赋予系统上的资源(如文件,网络套接字,系统调用等) SElinux 上下文。装入 SElinux 的策略(通常作为系统启动过程的一部分),然后决定哪个进程域可以访问哪些资源上下文。
2 :在红帽企业版 linux 5 中,有关 SElinux 的选择有下面几种:
(1) 我是否需要启用 SElinux
(2) 一旦启用,我需要 SElinux 处于允许( permissive )还是强制( enforcing )状态。
(3) 我需要在文件上赋予什么样的 SElinux 上下文。
3 :在实际工作中,红帽企业版 linux 5 支持一种 SElinux 策略 , 叫目标策略( targeted ) . 这个策略在大多数应用之中。在目标策略之中,只有目标进程受到 SElinux 的影响。而其他进程运行在非限制模式下。目标策略只影响常用的网络应用程序。受到限制的服务在 200 个以上,有增加的趋势。 SElinux 限制的典型应用程序如下:
(1) dhcp
(2) httpd
(3) mysqld
(4) named
(5) nscd
(???)
(6) ntpd
(???)
(7) portmap
(8) postgres
(???)
(9) snmpd
(???)
(10) squid
(11) syslogd
4: 启用 SElinux
/etc/sysconfig/selinux
setenforce
getenforce
/etc/sysconfig/selinux
(1) 强制( enforcing ) : 任何违法 SElinux 的操作都被禁止。
(2) 允许( permissive ) : 任何违反 SElinux 的操作都会受到一个警告信息。但是行动可以继续。
(3) 停用( disabled ) : 不启用 SElinux 策略。
Setenforce 和 getenforce 命令
Setenforce 0/1
0 表示允许; 1 表示强制
Getenforce
查看当前 SElinux 的状态。
5 :查看 SElinux 上下文
使用命令 ps –Z 和 ls –Z
每个进程都属于个 SElinux 域;
每个文件都被赋予一个 SElinux 上下文。
相关的域和上下文可以使用 ls 和 ps 命令的命令选项 –Z 来显示
进程 SElinux 域和 SElinux 上下文,具有以下格式:
System_u : object_r : httpd_exec : s0
说明:
上面的字段以冒号作为分隔符,
第一个字段:用户
第二个字段:角色
第三个字段:类型
第四个字段:与 MLS,MCS 有关
说明:
SEliunx 目标策略只于第三个字段有关,即类型字段( TYPE ) .
二: SElinux 介绍
SElinux 是美国国家安全局为 linux 系统设计的一项开放源码项目,主要是希望将其作为系统的最后一道防线,来抵御黑客的攻击和入侵系统。
1. 常见的读取控制
1.1 DAC ( Discretionary Access Control ) ” 任意式读取控制 ” 。在 DAC 的架构下,每个对像都会记录一个拥有者的信息。只要是对象的拥有者,就可以获得该对象的完全控制权限。 DAC 允许拥有者完全权限。其他需要读取该对象时候,必须授予适当的权限。但是每个对象仅有一组拥有者的信息,如果需要更复杂的读取控制能力,必须使用 ACL 。 ACL 的全名是“访问控制列表( Access Control List )” . 是 DAC 的延伸。在 ACL 环境下,你可以不同的用户设置一组权限。如此一来,就可以对不同的用户设置不同的权限了。
1.2 MAC ( Mandatory Access Control )“强制性读取控制” . 在 MAC 架构下,会为每一个对象添置一个安全的上下文( Security Context ) . 进程和用户除了具备传统的的权限之外,还必须获得 SElinux 的授权,方能读取对象。
1.2.1 RBAC
RBAC 全称是“角色基础读取控制”( Role-based Access Control ) , 在此架构下,是以用户所属的角色进行读取权限判定的动作的。如:老板的可以读取哪些对象,经理可以读取哪些对象。等
1.2.2 MLS
MLS 全名是“多层次安全”( Mulit-Level Security ) , 在此架构下,是以对象的机密等级来决定进程对该物的读取权限的。
2 : SElinux
SElinux 是一个在内核中执行,提供 MAC 能力的子系统,以弥补传统的 DAC 架构的不足。 SElinux 子系统以“类型强制性”读取控制机制为主,并融合 RBAC , MLS 与 MCS 3 种 MAC 读取控制机制的特性。
2.1 什么是类型强制性的读取控制机制?
在 SElinux 世界里,定义了许多的类型( TYPE ) . 每一个进程,文件,设备,网络连线等,都必须标示其所属的类型。进程仅能读取相同类型的文件,如果非相关的类型,且 SEliunx 不允许读取时,则无法读取。这就是类型强制性的读取控制机制。
警告: SElinux 的类型读取控制是在传统的 DAC 权限之后进行的。换言之,就是说在取得了 DAC 权限之后,再由 SElinux 来进行类型的强制性控制了。
3 : SElinux 的术语
3.1 对象
在 SElinux 里,所有可被读取的的皆为对象。
3.2 主体
在 SElinux 里,把进程理解为主体
3.3 类型
SElinux 允许你为系统中的每一个主体或对象定义一个类型。
3.4 领域
3.5 用户
SElinux 通过用户代表一些账号的识别数据。
3.6 角色
角色用来代表某一些用户或对象的组合。
3.7 安全策略
SElinux 目前有三个安全策略: targeted,strict,mls 3 个安全策略,每一个安全策略的功能,用途和定位不同的。
3.7.1
targeted: 用来保护常见的网络服务
### 默认的 redhat enterprise linux 会自动安装。
3.7.2
strict:
用来提供符合 RBAC 机制的安全性能
3.7.3
mls:
用来提供符合 MLS 机制的安全性。
注意:本文档主要讲解安全策略 targeted.
3.8 安全上下文
SElinux 系统中的每一个进程与对象都会记录一条安全上下文。
4 : SElinux 软件包
5 :初始化 SElinux 程序
6 :切换 SElinux 状态
6.1 查看 SElinux 的状态
命令:
sestatus
[-v]
7: 停用和启用 SElinux
7.1 通过内核启动参数
如: kernel
/vmlinuz…………..
ro root=LABEL=/ rhgb quiet selinux=N(0/1)
0 表示停用
1 表示启用
7.2 通过 SElinux 配置文件
/etc/sysconfig/selinux
连接文件
/etc/selinux/config
源文件
7.3 手动启用或停用 SElinux
三:管理安全上下文
RED HAT ENTERPRISE LINUX 的每一个对象都会存储其安全上下文。并将其作为 SElinux 判断进程能否读取的依据。
1 : SElinux 的安全上下文的格式:
USER:ROLE:TYPE:[LEVEL:[CATEGORY]]
1.1
USER
用户字段
这个字段用来记录用户登录系统后所属的 SElinux 的身份的。
USER 通常以 _u 为后缀,常见的如下:
System_u
系统账号类型的使用者
User_u
真实用户类型的使用者
Root
超级用户的使用者
说明: targeted 安全策略并未支持 USER 字段
1.2
ROLE
角色字段
ROLE 通常以 _r 为后缀
说明: targeted 安全策略并未支持 ROLE 字段
1.3
TYPE 字段
TYPE 类型字段通常以 _t 为后缀的。这个字段是 SElinux 安全上下文中最常用也是最重要的字段。常见的 TYPE 字段如下:
下列表格列举了常见的 TYPE 字段
1.4
LEVEL (层次) 和 CATEGORY (分类)字段(略过)
2 :安全上下文的默认值
RED HAT LINUX 系统如何产生每一个对象的安全上下文?从进程和文件两方面加以分析:
2.1
进程默认安全上下文
子进程继承父进程的安全上下文,除外子进程修改了自己的安全上下文。
2.2
文件默认的安全上下文
2.2.1
安装 RPM 包说产生的文件
因为 RPM 包里面就记录了每一个文件的安全上下文的数据,所以在安装 RPM 包的时候, RPM 工具就会自动配置安装包里面的文件的上下文到系统目录里面。
2.2.2
手动建立的新文件
在什么目录下建立新文件,就沿用什么目录的安全上下文。
3 :查看文件和进程的安全上下文
使用命令: id –Z ( 查看账号的 ) ; ls –Z ( 查看文件的 ) ; ps –Z ( 查看进程的 ) 。
4 :修改安全上下文
修改对象(文件)的安全上下文,使用命令: chcon
命令格式:
Chcon [OPTIONS…] CONTEXT FILES…..
Chcon [OPTIONS…] –reference=PEF_FILES FILES…
说明:
CONTEXT 为要设置的安全上下文
FILES 对象(文件)
--reference
参照的对象
PEF_FILES
参照文件上下文
FILES
应用参照文件上下文为我的上下文。
OPTIONS 如下:
-f
强迫执行
-R
递归地修改对象的安全上下文
-r ROLE
修改安全上下文角色的配置
-t TYPE
修改安全上下文类型的配置
-u USER
修改安全上下文用户的配置
-v
显示冗长的信息
5 :修复安全上下文
5.1
5.1.1
先使用命令 matchpathcon 找出对象的安全上下文,然后再使用命令 chcon 命令修改对象的安全上下文。
5.1.2
使用命令 fixfiles 工具仅修复 RPM 包里的对象的安全上下文
使用工具 fixfiles 来修复 RPM 包文件的安全上下文。
命令格式: fixfiles [-R PACKAGES…] [check|restore]
参数说明:
-R PACKEAGES
指定仅修复 PACKAGES 软件包;如果没有指定这个参数,表示修复所有的软件包
Check
仅检查指定的软件包中错误的安全上下文
Restore
除了检查之外,还修复错误的安全上下文
命令使用:
Fixfiles
-R sedmail
check
### 检测 sendmail 错误的上下文
Fixfiles
-R sedmail
restore
### 修复 sendmail 错误的上下文
5.1.3
使用 restorecon 还原文件的上下文
说明:非 RPM 包的文件安全上下文修复。( 5.1.1 也可)
命令格式: restorecon [OPTIONS…] [FILES…]
6: 重新生产安全上下文
只需两步:
6.1
建立空文件 /.autorelabel
6.2
重新启动系统即可
1 :使用 SElinux 可以将进程放入在特定的 SElinux 域,同时赋予系统上的资源(如文件,网络套接字,系统调用等) SElinux 上下文。装入 SElinux 的策略(通常作为系统启动过程的一部分),然后决定哪个进程域可以访问哪些资源上下文。
2 :在红帽企业版 linux 5 中,有关 SElinux 的选择有下面几种:
(1) 我是否需要启用 SElinux
(2) 一旦启用,我需要 SElinux 处于允许( permissive )还是强制( enforcing )状态。
(3) 我需要在文件上赋予什么样的 SElinux 上下文。
3 :在实际工作中,红帽企业版 linux 5 支持一种 SElinux 策略 , 叫目标策略( targeted ) . 这个策略在大多数应用之中。在目标策略之中,只有目标进程受到 SElinux 的影响。而其他进程运行在非限制模式下。目标策略只影响常用的网络应用程序。受到限制的服务在 200 个以上,有增加的趋势。 SElinux 限制的典型应用程序如下:
(1) dhcp
(2) httpd
(3) mysqld
(4) named
(5) nscd
(???)
(6) ntpd
(???)
(7) portmap
(8) postgres
(???)
(9) snmpd
(???)
(10) squid
(11) syslogd
4: 启用 SElinux
/etc/sysconfig/selinux
setenforce
getenforce
/etc/sysconfig/selinux
(1) 强制( enforcing ) : 任何违法 SElinux 的操作都被禁止。
(2) 允许( permissive ) : 任何违反 SElinux 的操作都会受到一个警告信息。但是行动可以继续。
(3) 停用( disabled ) : 不启用 SElinux 策略。
Setenforce 和 getenforce 命令
Setenforce 0/1
0 表示允许; 1 表示强制
Getenforce
查看当前 SElinux 的状态。
5 :查看 SElinux 上下文
使用命令 ps –Z 和 ls –Z
每个进程都属于个 SElinux 域;
每个文件都被赋予一个 SElinux 上下文。
相关的域和上下文可以使用 ls 和 ps 命令的命令选项 –Z 来显示
进程 SElinux 域和 SElinux 上下文,具有以下格式:
System_u : object_r : httpd_exec : s0
说明:
上面的字段以冒号作为分隔符,
第一个字段:用户
第二个字段:角色
第三个字段:类型
第四个字段:与 MLS,MCS 有关
说明:
SEliunx 目标策略只于第三个字段有关,即类型字段( TYPE ) .
二: SElinux 介绍
SElinux 是美国国家安全局为 linux 系统设计的一项开放源码项目,主要是希望将其作为系统的最后一道防线,来抵御黑客的攻击和入侵系统。
1. 常见的读取控制
1.1 DAC ( Discretionary Access Control ) ” 任意式读取控制 ” 。在 DAC 的架构下,每个对像都会记录一个拥有者的信息。只要是对象的拥有者,就可以获得该对象的完全控制权限。 DAC 允许拥有者完全权限。其他需要读取该对象时候,必须授予适当的权限。但是每个对象仅有一组拥有者的信息,如果需要更复杂的读取控制能力,必须使用 ACL 。 ACL 的全名是“访问控制列表( Access Control List )” . 是 DAC 的延伸。在 ACL 环境下,你可以不同的用户设置一组权限。如此一来,就可以对不同的用户设置不同的权限了。
1.2 MAC ( Mandatory Access Control )“强制性读取控制” . 在 MAC 架构下,会为每一个对象添置一个安全的上下文( Security Context ) . 进程和用户除了具备传统的的权限之外,还必须获得 SElinux 的授权,方能读取对象。
1.2.1 RBAC
RBAC 全称是“角色基础读取控制”( Role-based Access Control ) , 在此架构下,是以用户所属的角色进行读取权限判定的动作的。如:老板的可以读取哪些对象,经理可以读取哪些对象。等
1.2.2 MLS
MLS 全名是“多层次安全”( Mulit-Level Security ) , 在此架构下,是以对象的机密等级来决定进程对该物的读取权限的。
2 : SElinux
SElinux 是一个在内核中执行,提供 MAC 能力的子系统,以弥补传统的 DAC 架构的不足。 SElinux 子系统以“类型强制性”读取控制机制为主,并融合 RBAC , MLS 与 MCS 3 种 MAC 读取控制机制的特性。
2.1 什么是类型强制性的读取控制机制?
在 SElinux 世界里,定义了许多的类型( TYPE ) . 每一个进程,文件,设备,网络连线等,都必须标示其所属的类型。进程仅能读取相同类型的文件,如果非相关的类型,且 SEliunx 不允许读取时,则无法读取。这就是类型强制性的读取控制机制。
警告: SElinux 的类型读取控制是在传统的 DAC 权限之后进行的。换言之,就是说在取得了 DAC 权限之后,再由 SElinux 来进行类型的强制性控制了。
3 : SElinux 的术语
3.1 对象
在 SElinux 里,所有可被读取的的皆为对象。
3.2 主体
在 SElinux 里,把进程理解为主体
3.3 类型
SElinux 允许你为系统中的每一个主体或对象定义一个类型。
3.4 领域
3.5 用户
SElinux 通过用户代表一些账号的识别数据。
3.6 角色
角色用来代表某一些用户或对象的组合。
3.7 安全策略
SElinux 目前有三个安全策略: targeted,strict,mls 3 个安全策略,每一个安全策略的功能,用途和定位不同的。
3.7.1
targeted: 用来保护常见的网络服务
### 默认的 redhat enterprise linux 会自动安装。
3.7.2
strict:
用来提供符合 RBAC 机制的安全性能
3.7.3
mls:
用来提供符合 MLS 机制的安全性。
注意:本文档主要讲解安全策略 targeted.
3.8 安全上下文
SElinux 系统中的每一个进程与对象都会记录一条安全上下文。
4 : SElinux 软件包
5 :初始化 SElinux 程序
6 :切换 SElinux 状态
6.1 查看 SElinux 的状态
命令:
sestatus
[-v]
7: 停用和启用 SElinux
7.1 通过内核启动参数
如: kernel
/vmlinuz…………..
ro root=LABEL=/ rhgb quiet selinux=N(0/1)
0 表示停用
1 表示启用
7.2 通过 SElinux 配置文件
/etc/sysconfig/selinux
连接文件
/etc/selinux/config
源文件
7.3 手动启用或停用 SElinux
三:管理安全上下文
RED HAT ENTERPRISE LINUX 的每一个对象都会存储其安全上下文。并将其作为 SElinux 判断进程能否读取的依据。
1 : SElinux 的安全上下文的格式:
USER:ROLE:TYPE:[LEVEL:[CATEGORY]]
1.1
USER
用户字段
这个字段用来记录用户登录系统后所属的 SElinux 的身份的。
USER 通常以 _u 为后缀,常见的如下:
System_u
系统账号类型的使用者
User_u
真实用户类型的使用者
Root
超级用户的使用者
说明: targeted 安全策略并未支持 USER 字段
1.2
ROLE
角色字段
ROLE 通常以 _r 为后缀
说明: targeted 安全策略并未支持 ROLE 字段
1.3
TYPE 字段
TYPE 类型字段通常以 _t 为后缀的。这个字段是 SElinux 安全上下文中最常用也是最重要的字段。常见的 TYPE 字段如下:
下列表格列举了常见的 TYPE 字段
LEVEL (层次) 和 CATEGORY (分类)字段(略过)
2 :安全上下文的默认值
RED HAT LINUX 系统如何产生每一个对象的安全上下文?从进程和文件两方面加以分析:
2.1
进程默认安全上下文
子进程继承父进程的安全上下文,除外子进程修改了自己的安全上下文。
2.2
文件默认的安全上下文
2.2.1
安装 RPM 包说产生的文件
因为 RPM 包里面就记录了每一个文件的安全上下文的数据,所以在安装 RPM 包的时候, RPM 工具就会自动配置安装包里面的文件的上下文到系统目录里面。
2.2.2
手动建立的新文件
在什么目录下建立新文件,就沿用什么目录的安全上下文。
3 :查看文件和进程的安全上下文
使用命令: id –Z ( 查看账号的 ) ; ls –Z ( 查看文件的 ) ; ps –Z ( 查看进程的 ) 。
4 :修改安全上下文
修改对象(文件)的安全上下文,使用命令: chcon
命令格式:
Chcon [OPTIONS…] CONTEXT FILES…..
Chcon [OPTIONS…] –reference=PEF_FILES FILES…
说明:
CONTEXT 为要设置的安全上下文
FILES 对象(文件)
--reference
参照的对象
PEF_FILES
参照文件上下文
FILES
应用参照文件上下文为我的上下文。
OPTIONS 如下:
-f
强迫执行
-R
递归地修改对象的安全上下文
-r ROLE
修改安全上下文角色的配置
-t TYPE
修改安全上下文类型的配置
-u USER
修改安全上下文用户的配置
-v
显示冗长的信息
5 :修复安全上下文
5.1
5.1.1
先使用命令 matchpathcon 找出对象的安全上下文,然后再使用命令 chcon 命令修改对象的安全上下文。
5.1.2
使用命令 fixfiles 工具仅修复 RPM 包里的对象的安全上下文
使用工具 fixfiles 来修复 RPM 包文件的安全上下文。
命令格式: fixfiles [-R PACKAGES…] [check|restore]
参数说明:
-R PACKEAGES
指定仅修复 PACKAGES 软件包;如果没有指定这个参数,表示修复所有的软件包
Check
仅检查指定的软件包中错误的安全上下文
Restore
除了检查之外,还修复错误的安全上下文
命令使用:
Fixfiles
-R sedmail
check
### 检测 sendmail 错误的上下文
Fixfiles
-R sedmail
restore
### 修复 sendmail 错误的上下文
5.1.3
使用 restorecon 还原文件的上下文
说明:非 RPM 包的文件安全上下文修复。( 5.1.1 也可)
命令格式: restorecon [OPTIONS…] [FILES…]
6: 重新生产安全上下文
只需两步:
6.1
建立空文件 /.autorelabel
6.2
重新启动系统即可