SElinux是美国国家安全局(NSA)对于强制访问控制的实现,是linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发的一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在它的任务中所需要的文件。SElinux默认安装在Fedora和RedHat Enterprise Linux上,也可以作为其他发行版上容易安装的包得到。

      DAC,自主访问控制,任何程序对其资源享有完全的控制权,每个用户或进程可以随意修改自己的文件的权限,将其他权限授予给其他人而具有任意的访问权限、所有/组+权限标记通常称为自主访问控制。

      MAC,强制访问控制,一个进程能否访问某个资源,取决于运行这个进程的用户权限已经访问的资源的属主属组等属性。

Selinux有两种工作级别:

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

      Targeted:仅有限个进程收到selinux控制,只监控容易被***的进程;

Sandbox:subject operationobject

Subject:(主)process…:进程

Object:(宾)directory…:进程,文件,

  文件:open,read,write,close,chown,chmod

Subject:domain

Object:type

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

  user:role:type

  user:selinux的user

  role:角色

  type:类型

通过ls –Z可以查看文件的标签:

 wKioL1m479CQK1msAABkhRz7MyQ506.png-wh_50

同样可以查看进程的selinux属性:

 wKioL1m4792B6YXJAACdMeTN65M869.png-wh_50

      selinux规则库:

           规则:哪种域能访问哪种或哪些种类型的文件;

配置selinux:

      Selinux是否启用;

      给文件重新打标;

      设定某些布型特性;

Selinux的状态:

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

      permissive:启用,每个受限的进程违规操作不会被禁止,而被记录在审计日志中;

      disabled:关闭;

相关命令:

      getenforece:获取selinux的当前状态;

      setenforce   0|1

           0:设置为permissive

           1:设置为enforcing

      wKiom1m48BDgOdsBAACH-bUfc-U466.png-wh_50

      此设定重启系统无效,并且在selinux不处于disabled状态才能设定;

      wKiom1m48BmAm30OAAAWMTzklBc847.png-wh_50

      配置文件:/etc/sysconfig/selinux,/etc/selinux/config

                 SELINUX=[disabled][enforcing][permissive]

      wKiom1m48CDTQr-0AAA7zcHEit8265.png-wh_50

给文件重新打标:

chcon命令:

      chcon - change file SELinux securitycontext

chcon [OPTION]... CONTEXTFILE...

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

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

                 -R:递归打标; 

                 --reference=FILE:以FILE的标签为参照类型

                 -t TYPE:修改指定类型

                 -u:修改指定user

                 -r:修改指定role

       wKiom1m48CrTaSlsAACGA_acgbs194.png-wh_50

恢复默认标

restorecon[-R] /path/to/somewhere

      wKioL1m48AijaZ3sAAB7o7K0jAs388.png-wh_50

布尔型规则:

      getsebool命令:

           getsebool [-a] [boolean]

      wKiom1m48Dyx2at9AAByfj5jsng657.png-wh_50

      setsebool

           setsebool [ -PV] boolean value |bool1=val1 bool2=val2 ...

      wKiom1m48EbSCoRzAAAkJC5Kjmw700.png-wh_50