SELinux

SELinux:
  SELinux(Secure Enhanced Linux-安全增强Linux)是由NSA针对计算机基础结构安全开发的一个全新的Linux安全策略机制。SELinux允许管理员更加灵活的定义安全策略。NSA是在Linux社区的帮助下开发,2000年以GNU GPL发布,Linux内核2.6版本后集成在内核中;

DAC:Discretionary Access Control自由访问控制
  Linux上传统的访问控制标准是自主访问控制DAC;在这种形式下,一个软件或守护进程以User ID(UID)或Set owner User ID(SUID)的身份运行,并且拥有该用户的目标(文件、套接字、以及其它进程)权限。这使得恶意代码很容易运行在特定权限之下,从而取得访问关键的子系统的权限。

MAC:Mandatory Access Control 强制访问控制
  MAC环境下进程可以被限制;MAC环境下策略被用来定义被限制的进程能够使用那些资源(文件、套接字、以及其它进程);策略的规则决定控制的严格程度;默认情况下,没有被明确允许的行为将被拒绝

SELinux四种工作类型:
  strict:每个进程都受到SELinux的控制
  targeted: 用来保护常见的网络服务,仅有限进程受到SELinux控制(默认类型),只监控容易被攻击的进程;RHEL4只保护13个服务,RHEL5保护88个服务
  minimum:Centos7,修改过的targeted,用户自己选择的网络服务受到SELinux控制
  mls:提供MLS(多级安全)机制的安全性
  注意:minimum和mls稳定性不足,未加以应用

SElinux的安全上下文:
  所有的安全机制都是对两样东西做出限制:进程和系统资源(文件,网络套接字,系统调用等)SELinux针对这两种类型定义了两个基本概念:域(domain)和上下文(context)
  域用来对进程限制
  上下文用来对系统资源进行限制
  传统Linux一切皆文件,由用户、组、权限控制访问;在SELinux中一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。所有文件、套接字、进程都具备安全标签:"安全上下文"(security context);安全上下文有五个元素组成:
  user:role:type:sensitivity:sensitivity:category
  用户:角色:类型:MLS:MCS

  实际上下文:存放在文件系统中,
  ls -Z  查看文件的安全上下文
  ps -Z  查看进程的安全上下文
  期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中
  semanage fcontext -l

五个安全因素:
  SElinux 为每个文件提供了安全标签,也为进程提供了安全标签
  User:指示登录系统的用户类型,如root、user_u、system_u多数本地进程都属于自由(unconfined)进程;
  Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r
  Type:指定数据类型,规则中定义何种进程类型访问何种文件;Targeted策略基于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

SElinux的安全策略:
  哪种域能访问哪种或者哪些种类型的文件
  主体(subject):进程称为主体(域用来对进程限制)
  对象(object):所有可以读取的对象,包括文件、进程、网络套接字等(上下文用来对系统资源进行限制)

  SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。Domain标签能够执行的操作由安全策略里定义。
  当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC (访问矢量缓存Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问
  安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是充许或拒绝

设置SElinux:
  设置SELinux是否启用
  给文件重新打安全标签
  给端口设置安全标签
  设定某些操作的布尔型开关
  SELinux的日志管理

SElinux的状态,命令及配置文件
  SElinux状态设置
  enforcing:违反策略的行动都被禁止,并作为内核信息记录
  permissive:违反策略的行动都不被禁止,但是会产生告警信息记录日志
  disabled:禁用,关闭SELinux功能

  相关命令和配置文件
  getenforce 获取SELinux当前状态
  sestatus  查SELinux状态
  setenforce 0|1 设置SELinux状态(此设定重启系统后无效)
    0:设置为 permissive
    1:设置为 enforcing

  配置文件
  /boot/grub/grub.conf  在grub文件中指定selinux=0禁用SELinux功能
  /etc/selinux/config <— /etc/sysconfig/selinux  (软链接)
  修改配置文件
  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

  SElinux布尔型规则
  查看bool值命令:
  getsebool[-a] [boolean]
  semanage boolean -l
  semanage boolean -l -C 查看修改过的布尔值

  设置bool值命令:
  setsebool[-P] boolean=value
  -P 永久设置重启也会生效

原文地址:https://www.cnblogs.com/Link-Luck/p/9859322.html