操作系统有两类访问控制:自主访问控制(DAC)和强制访问控制(MAC)。标准Linux安全是一种DAC,SELinux为Linux增加了一个灵活的和可配置的的MAC。

进程启动时所拥有的权限就是运行此进程的用户权限,一个进程能访问哪些文件取决于该文件的主、组和其他权限,这就是DAC

如一个用户运行了进程,运行此进程需要若干个文件,但该进程具有的权限是与该用户的权限一致,即该进程能访问此用户能够访问的所有文件。Linux自身是无法限定某个进程只能访问其运行需要的指定文件,因此MAC,就是不让进程在该用户权限下访问它不需要文件,即使进程是有权限访问的。

那么是如何实现的?
每个进程启动时,给它划定一个范围,只能访问此范围内的资源。但是每种程序运行依赖的资源或权限并不相同,并不可能为每一种程序制定范围。所以有如下两种工作级别。

SELinux工作级别
        restrict:每个进程都受selinux的控制
        targeted:仅有限的进程受到控制,通常只监控容易受到入侵的进程

SELinux工作模型

存在三种角色subject   operation   object
        subject:主体,操作的发起者
        operation:操作,主体能够执行什么样的操作取决于客体所支持的操作
        object:客体,操作的作用对象
        通常动作的发起者是进程,进程可以对诸如文件或者进程等对象执行操作,那针对文件来说可以支持的操作有读、写、打开、关闭及更改权限等,针对进程作为客体,执行的操作有杀死、创建等

每一个进程都有一个标签。操作系统中的每一个文件/目录客体object也都有一个标签。甚至连网络端口、设备,乃至潜在的主机名都被分配了标签。标签有五部分组成USER:ROLE:TYPE[LEVEL[:CATEGORY]]。user指的是SELinux的user非系统user,LEVEL和CATEGORY:定义层次和分类,只用于mls策略中。

进程通过标签划分在不同的域,文件通过标签定义为不同个类型。SElinux存在一规则库,其中定义了哪种域能够访问哪些类型内的文件。如某进程要访问一个文件,但是此进程的域与文件的类型不在同一范围内那么要如何突破限制,这时候就要修改标签。
SELinux的策略通常是编译成二进制文件以加速访问。

如何使用SELinux

(1)  /etc/sysconfig/selinux打开或关闭SELinux
               SELINUX=enforcing|permissive|disabled
               从disable状态启用,需要重启系统,让系统上的所有文件重新打上标签。permissive不禁止,但会计入日志/var/log/audit/audit.log
               getenforce/setenforce 0|1  获取或更改当前状态
        (2)查看、更改文件标签
             ps –Z :检查进程的安全上下文;
             ls -Z :检查文件、目录的安全上下文
             chcon [-u USER] [-r ROLE] [-t TYPE]
              一般目录下的文件具有“目录名_t”的类型,更改文件标签类型可以在不更改主(组)的情况下限制进程对其的访问。
              还原文件的默认标签 ,restorecon [-R] path/file
        (3)SELinux的布尔型开关
               getsebool -a: 列出SELinux的所有布尔值
               setsebool: 设置SELinux布尔值,如:setsebool -P dhcpd_disable_trans=0,-P表示重启后也能生效,直接写入规则库

参考:http://blog.csdn.net/myarrow/article/details/9856095/

SELinux入门简介的更多相关文章

  1. Linux系统入门简介<1>

    linux系统入门简介 我们为什么要学习Linux? 在介绍Linux的历史前,我想先针对大家如何对Linux的发音说一下.我发现我身边的朋友对Linux的发音大致有这么几种: "里那克斯& ...

  2. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  3. MongoDB入门简介

    MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...

  4. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  5. NodeJS入门简介

    NodeJS入门简介 二.模块 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. const http = require ...

  6. ASP.NET Core学习之一 入门简介

    一.入门简介 在学习之前,要先了解ASP.NET Core是什么?为什么?很多人学习新技术功利心很重,恨不得立马就学会了. 其实,那样做很不好,马马虎虎,联系过程中又花费非常多的时间去解决所遇到的“问 ...

  7. webservice入门简介

    为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 webservice入门简介 1.什么是webservice? webservice是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓的远 ...

  8. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  9. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...

随机推荐

  1. Activiti 框架学习

    1:工作流的概念 说明: 1)      假设:这两张图就是华谊兄弟的请假流程图 2)      图的组成部分: 人物:范冰冰 冯小刚 王中军 事件(动作):请假.批准.不批准 工作流(Workflo ...

  2. 使用spring-session共享springmvc项目的session

    一.说在前面 spring mvc项目,使用nginx,tomcat部署. 之前没做session共享,而nginx采用sticky模块进行分发. 但发现有时不能正确地指向同一台服务器,从而导致ses ...

  3. qt学习001之运行对话框

    使用QT实现Window下运行对话框 1.摆放控件 首先设置并摆放相应的对话框控件,并更改相应名称:        2.实现功能 1)在文本框中输入信息后,点击确定或回车可以运行系统中相应的程序: 点 ...

  4. C Mergeable Stack(list超好用)

    ZOJ  4016 list用法https://www.cnblogs.com/LLLAIH/p/10673068.html 一开始用普通的栈做,超内存,链表模拟栈也没写出来orz.补题发现list超 ...

  5. java使用Filter过滤器对Response返回值进行修改

    转:java使用Filter过滤器对Response返回值进行修改 练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过 ...

  6. Linux 下安装 apache

    1.检查是否已经安装过 apache (linux 中 apache 的名字是 httpd) rpm -qa  httpd 2.如果没有安装过,运行如下命令 yum install httpd -y ...

  7. Linux命令:内建命令

    本文对内建命令进行归类,便于学习和记忆. 分类 内建命令 同义词 功能相反命令 定义&声明类 alias   unalias declare typeset   local     reado ...

  8. Nginx之 try_files 指令

    location / { try_files $uri $uri/ /index.php; } 当用户请求 http://localhost/example 时,这里的 $uri 就是 /exampl ...

  9. getPageNumRange

    <script> function getPageNumRange(pagenumstr) { var pages=pagenumstr.split(";"); pag ...

  10. 【C++】C++string类总结

    一.string的初始化 首先,为了在程序中使用string类型,必须包含头文件 <string>.如下: #include <string> 注意这里不是string.h,s ...