首页 > 代码库 > SElinux

SElinux

SElinux



1.介绍:

  • SELinux: Secure Enhanced Linux,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的Linux的一个强制访问控制的安全模块。2000年以GNU GPL发布,Linux内核2.6版本后集成在内核中

  • DAC:Discretionary Access Control自由访问控制

  • MAC:Mandatory Access Control 强制访问控制

        DAC环境下进程是无束缚的

        MAC环境下策略的规则决定控制的严格程度

        MAC环境下进程可以被限制的

        策略被用来定义被限制的进程能够使用那些资源(文件和端口)

        默认情况下,没有被明确允许的行为将被拒绝

2.SELinux有四种工作类型:

  • strict: 每个进程都受到selinux的控制;

  • targeted: 用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程;rhel4只保护13个服务,rhel5保护88个服务;

  • minimum:centos7,修改过的targeted,只对选择的网络服务;

  • mls:提供MLS(多级安全)机制的安全性;

   注意:minimum和mls稳定性不足,未加以应用

3.SElinux的安全上下文

  • 传统Linux,一切皆文件,由用户,组,权限控制访问

  • 在SELinux中,一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。

  • 所有文件和端口资源和进程都具备安全标签:安全上下文”(security context)

  • 安全上下文有五个元素组成:

          user:role:type:sensitivity:category

          user_u:object_r:tmp_t:s0:c0

          实际上下文:存放在文件系统中,ls –Z;ps–Z

  • 期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中semanagefcontext–l


4.五个安全因素:

SElinux 为每个文件提供了安全标签,也为进程提供了安全标签;

  • User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程;

  • Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r

  • Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务共用:public_content_t

  • Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级,s0最低,Target策略默认使用s0

  • Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret, 一个对象可以有多个categroy,c0-c1023共1024个分类,Target 策略不使用cateaory

5.SElinux的安全策略:

那种域能访问哪种或者哪些种类型的文件

  • 对象(object):所有可以读取的对象,包括文件、目录和进程,端口等

  • 主体:进程称为主体(subject)

  • SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。Domain标签能够执行的操作由安全策略里定义。

  • 当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC (访问矢量缓存Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问

  • 安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是充许或拒绝


6.设置SElinux

  • SELinux是否启用;

  • 给文件重新打安全标签;

  • 给端口设置安全标签;

  • 设定某些操作的布尔型开关;

  • SELinux的日志管理;

7.SElinux的状态

  • enforcing: 强制,每个受限的进程都必然受限;

  • permissive: 允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志;

  • disabled: 禁用

8.相关命令和配置文件

  • 相关命令

         getenforce: 获取selinux当前状态

         sestatus:查看selinux状态

         setenforce0|1

              0: 设置为 permissive

              1: 设置为 enforcing

              此设定:重启系统后无效

  • 配置文件

             /boot/grub/grub.conf,使用selinux=0禁用SELinux

          /etc/sysconfig/selinux

          /etc/selinux/config

          SELINUX={disabled|enforcing|permissive}

             修改配置文件之后一定要重新启动,才能生效

  • 给文件重新打标签

         chcon

              chcon[OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...

            chcon[OPTION]... --reference=RFILE FILE...

            -R:递归打标;

  • 还原文件的默认标签:

          restorecon 

                 restorecon[-R] /path/to/somewhere

[root@centos7 ~]# getenforce  # 查看状态
Disabled
[root@centos7 ~]# cat /etc/selinux/config  # 配置文件

# 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=disabled  # 修改配置文件之后一定要重新启动
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

9.SElinux布尔型规则

  • 布尔型规则

        getsebool

        setsebool

  • 查看bool值命令:

        getsebool[-a] [boolean]

        semanageboolean–l

        semanageboolean-l –C 查看修改过的布尔值

  • 设置bool值命令:

        setsebool[-P] booleanvalue

        setsebool[-P] Boolean=value



总结:

  SElinux是RedHat/CentOS系统特有的安全机制。因为这种机制的限制太多,配置也特别繁琐,所以没有人真正应用它。安装完系统,我们一般吧selinux关闭,以免引起不必要的麻烦。


SElinux