Linux安全中阶教程之SElinux(适合有一定水平的管理员)


一: 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
表示允许; 表示强制
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
公共内容类型的文件。如:FTPNFS等服务器文件
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
重新启动系统即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值