全部博文(191)
分类: LINUX
2009-05-19 06:13:46
一: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字段
项目 |
说明 |
Unconfiged_ |
未设置类别 |
Default_t |
默认类别 |
Mnt_t |
代表挂载点的类型,/mnt/中的文件属于这个类别 |
Boot_t |
作为开机文件的类型,/boot/中文件属于这个类别 |
Bin_t |
作为二进制执行文件,/bin中多数属于这个类别 |
Sbin_t |
作为系统管理类型的文件,/sbin中属于这个类别 |
Device_t |
代表设备文件. /dev 下属于这个类别 |
Lib_t |
连接库类型 /lib 下属于这个类别 |
Var_t |
…… |
Usr_t |
……… |
Etc_t |
…….. |
Tty_device_t |
代表终端机或控制台设备 |
Su_exec_t |
具备SU功能的执行文件 |
Java_exec_t |
JAVA相关的执行文件 |
Public_content_t |
公共内容类型的文件。如:FTP,NFS等服务器文件 |
Shadow_t |
代表存储密码文件的类型 |
Httpd_t |
作为HTTP文件的相关类别 |
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 重新启动系统即可