SELinux的基础知识

SELinux(Security-Enhanced Linux)

 

一、常见的读取控制机制

 

1. DAC (Discretionary Access Control: 任意式读取控制)

 

      在DAC架构下,每一个对象都会记录一个拥有者的信息,只要是对象的拥有者,就可以获得对该对象完整控制的能力。传统的Unix系统提供的安全机制,就是操作DAC的思维。

 

      ACL(Access Control List: 访问控制列表)

      

      它是DAC的延伸。在ACL环境下,你可以为不同的用户设置一组权限。如此一来,就可以对不同的用户设置不同的权限了。

 

      在Unix系统中,每个文件(这里成为“对象”)都会存储一个权限模式(Permission Mode)的信息,每一个进程也会记录其执行者,UNIX利用这个执行者的身份,配合对象的权限模式信息,来判断进程是否可以读取对象。由于DAC与ACL都仅针对使用者与对象的关系进行读取控制,所以不论是DAC还是ACL,恐怕都无法满足现今系统对安全性的要求。

 

2. MAC (Mandatory Access Control:强制性读取控制)

 

       MAC架构下,会为每一个对象增添一个“安全脉络(Security Context)”的资讯,进程或用户除了需具备传统的权限外,还必须获得SELinux的授权,方能读取指定的对象,因而让管理者可以获得更多的读取控制能力。

       MAC还能进行更加精细的读取控制配置。

       常见的MAC的机制包括RBAC和MLS。

 

* RBAC  (Role-based Access Control: 角色基础读取控制)

 

       在RBAC架构下,是以用户所隶属的角色(Role)进行读取权限判断的动作的。

 

* MLS (Multi-Level Security: 多层次安全)

       

       在MLC架构下,是以数据内容的敏感性或机密性定义几种不同的等级。以对象的机密等级来决定进程对对象的读取能力。

 

* MCS (Multi-Category Security: 多重类型安全性)

  

       它是以MLC为基础,再加上类别(Category),可以使MLS进行更细微的读取控制。

 

二、什么是SELinux

 

      SELinux子系统以“类型强制性(Type Enhancement)”读取控制机制为主,并融合RBAC、MLS和MCS等3种MAC读取控制机制的特性。 

 

      在SELinux的世界中,定义了许多的类型(Type),每一个进程、文件、设备、网络连接等,都必须标识其所属的类型。进行仅能读取相同(或相关)类型的文件。如果非相关类型,且SELinux不允许读取时,则无法读取。这就是“类型强制性”读取控制机制。

      SELinux不允许非相同或者相关类型的对象之间进行读取。

 

      另外,SELinux是Linux内核提供其功能,所有执行于Linux内核中的应用程序都必须由SELinux管辖。

 

      SELinux与传统的DAC有什么关系?

    

      SELinux在DAC之后执行。也就是系统先判断进程在传统的权限下拥有了读取能力后,再利用SELinux判断进程是否可以读取。如果传统的权限禁止读取,则SELinux也不会发生任何作用。

 

三、SELinux的软件包

 

       SELinux由下列几项软件包组成:

 

       * 原则文件,用来提供或配置SELinux安全原则的文件。

 

       * 安全服务器,或称原则引擎,用来存储安全原则以及诠释安全脉络的意义。

      

       * 读取向量缓存,在内存中暂存从安全服务器查询所得的结果,以便加快查询的速度。

 

       * 审核记录文件,用来存储SELinux产生的信息,包括允许读取与禁止读取的事件,文件名是:/var/log/audit/audit.log。

 

       * SELinux虚拟文件系统,名为selinuxfs,用来呈现SELinux内部的信息,如果启动了SELinux,selinuxfs会自动加载到/selinux/中。

 

       * 配置工具,诸如chcon、setsebool等。

 

四、系统初始化SELinux的步骤

 

        当启动加载器(GRUB)顺利地加载Linux内核后,Linux内核会执行init服务,让init服务建立系统环境。在init服务展开正常的初始化系统的程序之前,会先创建SELinux环境(如果需要的话)。

 

STEP 1:判断Linux内核是否支持SELinux。init先挂载procfs,然后检测Linux内核是否提供selinuxfs文件系统,如果是,表示内核支持SELinux功能,如果不是,跳过创建SELinux的步骤;

 

STEP 2: 判断SELinux是否需要启动。init根据启动加载器传递给Linux内核的/etc/sysconfig/selinux中的SELINUX参数或者selinux内核启动参数,来决定是否要启动SELinux系统;

 

STEP 3: 设置SELinux的模式。init服务想将SELinux的模式定为permission mode,这种模式下,SELinux将不会强制禁止违反安全原则定义的读取操作。然后,init会根据在/etc/sysconfig/selinux的SELINUX参数,如果它定义为enforcing,则将模式切换到Enforcement Mode;

 

STEP 4: init挂载selinuxfs文件系统到/selinux/目录;

 

STEP 5: init加载SELinux的安全原则文件。init会根据/etc/sysconfig/selinux中的SELINUXTYPE=TYPE参数,决定要加载哪一个SELinux安全原则,并配合/selinux/policyvers中的定义,载入某一个版本(Version)的SELinux安全原则文件,该SELinux安全原则为:/etc/selinux/TYPE/policy/policy.VERSION;

 

STEP 6: 系统根据/etc/selinux/TYPE/contexts/中的相关文件来设置一些重要的安全脉络。包括init服务本身也获得了安全脉络(user_u:system_r:unconfined_t)。

 

至此,SELinux环境就创建好了。

 

五、启动和停用SELinux

 

方法1: 通过内核启动参数

 

       通过这种方法,可以在启动加载器时直接修改参数:

                 

                   boot: linux selinux=N

 

       N = 0:停用SELinux; N != 0:启用SELinux。

 

       每次启动都要修改参数,太麻烦了。也可以通过修改文件/boot/grub/grub.conf来实现。

                 

                  ... ....

                  kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet selinux=N

                  ... ...

 

方法2: 通过SELinux配置文件

 

        SELinux的配置文件是:/etc/sysconfig/selinux。

 

        # 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=enforcing

        # SELINUXTYPE= can take one of these two values:
        #       targeted - Targeted processes are protected,
        #       mls - Multi Level Security protection.
        SELINUXTYPE=targeted  

 

 启动了selinux后,可以通过命令sestatus来查看selinux的状态。

 

      [root@airhouse flagonxia]# sestatus
      SELinux status:                 enabled
      SELinuxfs mount:              /selinux
      Current mode:                   enforcing
      Mode from config file:        enforcing
      Policy version:                   22
      Policy from config file:        targeted       

 

selinux的模式可以通过getenforce查看。

 

      [root@airhouse flagonxia]# getenforce
      Enforcing

 

从上面命令的执行结果来看,模式是enforcing。我们可以将模式改变为permissive。

 

      [root@airhouse flagonxia]# setenforce 0
      [root@airhouse flagonxia]# getenforce
      Permissive

 

六、管理安全脉络

 

6.1 安全脉络的格式

 

      USER:ROLE:TYPE:[:LEVEL[:CATEGORY]]

 

USER --> system_u, user_u, root

 

ROLE --> user_r, staff_r, secadm_r, object_r

 

TYPE --> unconfined_t, default_t, mint_t, etc_t, device_t, shadow_t, usr_t, lib_t, java_exec_t ......

 

LEVEL --> s0~s15

 

CATEGORY --> c0~c1023

 

6.2 查看对象的安全脉络

 

* ls -Z: 查看文件的安全脉络

* ps -Z: 查看进程的安全脉络

* id -Z: 查看张海的安全脉络

 

例子:

[root@airhouse flagonxia]# ls -Z /etc/passwd
-rw-r--r--  root root system_u:object_r:etc_t:s0       /etc/passwd

 

6.3 修改安全脉络

 

   chcon [OPTIONS...] CONTEXT FILES

   chcon [OPTIONS...] -reference=REF_FILES FILES

 

例子:

   [root@airhouse temp]# ls -Z testfile
   -rw-r--r--  root root system_u:object_r:user_home_t:s0 testfile
   [root@airhouse temp]# chcon -u root -t etc_t testfile
   [root@airhouse temp]# ls -Z
   -rw-r--r--  root root root:object_r:etc_t:s0           testfile

 

6.4 修复安全脉络

 

6.4.1 找出默认安全脉络

 

    matchpathcon [OPTIONS...] FILES

 

OPTIONS:

    -n: 不显示文件路径名称,仅显示安全脉络

    -V:顺便检查安全脉络有没有定义

 

例子:

    [root@airhouse temp]# ls /etc/passwd /var/www/nosuchfile
    ls: cannot access /var/www/nosuchfile: No such file or directory
    /etc/passwd
    [root@airhouse temp]# matchpathcon /etc/passwd /var/www/nosuchfile
    /etc/passwd     system_u:object_r:etc_t:s0
    /var/www/nosuchfile     system_u:object_r:httpd_sys_content_t:s0

 

6.4.2 使用fixfiles修复安全脉络

 

    fixfiles [-R PACKAGES...] [check | restore]

 

    -R PACKAGES:指定仅修复PACKAGES软件包,如果没有这个参数,则修复所有软件包

    check:检查指定软件包中错误的安全脉络

    restore:除了检查之外,还修复错误的安全脉络

 

注意一点,fixfiles这个命令的局限在,仅能修复RPM包提供的文件的安全脉络。

 

6.4.3 使用restorecon还原安全脉络

 

     restorecon [OPTIONS...] [FILES...]

 

例子:

step1】 查看文件testfile默认的安全脉络

     [root@airhouse temp]# matchpathcon /home/flagonxia/temp/testfile
     /home/flagonxia/temp/testfile   system_u:object_r:user_home_t:s0

step2】 查看文件testfile实际的安全脉络

     [root@airhouse temp]# ls -Z
     -rw-r--r--  root root root:object_r:etc_t:s0           testfile

step3】 还原testfile的安全脉络
     [root@airhouse temp]# restorecon /home/flagonxia/temp/testfile

step4】 查看结果,testfile还原成默认的安全脉络
     [root@airhouse temp]# ls -Z testfile
     -rw-r--r--  root root system_u:object_r:user_home_t:s0 testfile

 

6.5 重新产生安全脉络

 

     想selinux重新产生重要文件的安全脉络,需要完成下面步骤:

     1)  产生一个空的/.autorelabel文件

     2)  重新启动Linux系统

 

7 管理SELINUX的安全原则

 

      SELINUX的安全脉络的作用是划分和组织对象,给对象赋予各种特定的属性,包括USER、ROLE、TYPE、LEVEL和CATEGORY等。而安全原则的作用是定义SELINUX的读取控制的规则,以及细节的配置数据。就是不同类型的对象能否被特定的主体读取的规则。

 

      SELINUX的安全原则有3类:

      * targeted             最常用

      * strict

      * mls

 

      安全原则targeted存放在/etc/selinux/targeted/目录中。

 

      [root@airhouse temp]# cd /etc/selinux/targeted
      [root@airhouse targeted]# ls
      contexts  modules  policy  setrans.conf  seusers

 

      [root@airhouse targeted]# cd policy
      [root@airhouse policy]# ls
      policy.23

 

      policy.23是该安全原则数据库文件,23是版本号。

 

8 SELINUX布尔值

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值