简单点说,SELinux就是用来加强系统安全性的。它给一些特定程序(这些程序也在不断增加)做了一个沙箱,它将文件打上了一个安全标签,这些标签属于不同的类,也只能执行特定的操作,也就是规定了某个应用程序设定了你可以访问那些文件或目录。

这里比较重要的知识点有:

  • selinux的工作原理
  • 工作模式和工作类型(selinux启用,布尔规则)
  • 安全上下文(上下文修改,安全标签,端口标签)
  • 日志管理

查看SELinux当前状态:

一、工作原理

二、工作模式(运行状态)

Enforcing、Permissive、Disabled

1、获取当前SELinux运行状态

getenforce

可能返回结果有三种:Enforcing、Permissive 和 Disabled。

Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止可疑行为,Enforcing 代表记录警告且阻止可疑行为。

2、改变 SELinux 运行状态

setenforce [ 1 | 0 ]

切换disabled状态或者从disabled状态切换至别的状态都需要重启且只能修改配置文件。而enforceing(1)和Permissive(0)两种状态间切换不需要重启,重启时会为整个文件系统重新创建安全标签(touch /.autorelabel && reboot)。

/boot/grub/grub.conf下修改状态优先级比/etc/selinux/config高

若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件 /etc/sysconfig/selinux或/etc/selinux/config实现。

工作类型(或策略):

默认targeted类型,用来保护常见的网络服务,仅有限进程收到selinux控制,只监控容易被入侵的进程,centos5保护88个服务。

布尔规则:

SELinux根据不同的工作类型对这些规则打开或关闭(on|off<布尔值1|0>),然后通过规则的开启与关闭具体地限制不同进程对文件的读取。

getsebool -a 或者 sestatus -b      # 查看当前工作类型下各个规则的开启与否

setsebool -P 规则名称 [0|1]    # 修改当前工作类型下指定规则的开启关闭,-P表示同时修改文件使永久生效

三、安全上下文

安全上下文存在于进程与文件中,context随进程一起存入内存中,文件的context存放在其对应的inode中,因此进程在访问文件时,要先读取inode,再判断是否能够访问该文件。

ls -Z   file # 显示文件的安全上下文
ps -eZ   # 显示所有进程的安全上下文

semanage来自policycoreutils-python包,centos 6上默认没安装.

系统中的每个文件都会有context,使用ls -Z查询出来的context就是当前context,系统把每个文件的默认context记录下来并保存,这样系统记录下来的就是期望context。semanage命令可以管理每个文件的期望context,也叫期望标签。

安全上下文(当前context):

semanage fcontext -l                     # 查看所有的期望SELinux标签
semanage fcontext -l                     # 查看所有的期望SELinux标签
semanage fcontext -a -t type 目标目录     # 添加期望SELinux标签
semanage fcontext -m -t type 目标目录     # 修改期望SELinux标签
semanage fcontext -d -t type 目标目录     # 删除期望SELinux标签

修改规范:

semanage fcontext -a -t type 目录(/.*)?

安全标签(期望context):标签错误将导致启动异常,文件不可用等故障。

给文件重新打安全标签: 

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

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

 -R:递归打标; 

恢复目录或文件默认的安全上下文: 

 restorecon [-R] /path/to/somewhere

端口标签:

虽然听起来是修改端口号的,但是到底还是修改安全上下文的,我们用semanage工具,命令为semanage port

查询某个服务的context type字段

  语法:semanage port -l |grep 服务名

添加某个端口为指定服务的访问端口

   语法:semanage port -a -t type -p 协议 端口号(不要与常用端口重复)

例如添加ssh服务的端口号,默认为22

四、SELinux日志管理

yum install setroublesshoot*(重启生效)
    将错误的信息写入/var/log/message
grep setroubleshoot/var/log/messages
sealert-l UUID
    查看安全事件日志说明
sealert-a /var/log/audit/audit.log
    扫描并分析日志

Linux之强大的selinux的更多相关文章

  1. [转]linux中强大的screen命令

    [转]linux中强大的screen命令 http://pythonorg.diandian.com/post/2012-01-05/40027464147 今天用SCREEN用点生了,有几个功能不知 ...

  2. SpringCloud的应用发布(四)vmvare+linux,防火墙和selinux

    一.vmvare网络配置为nat模式 二.vmvare的网络设置为桥接bridge模式 1.linux 网卡的ip获取方式dhcp 三.关闭linux的防火墙和selinux 1.临时关闭防火墙 sy ...

  3. [转帖]「日常小记」linux中强大且常用命令:find、grep

    「日常小记」linux中强大且常用命令:find.grep https://zhuanlan.zhihu.com/p/74379265 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍 ...

  4. Linux下开启关闭SeLinux

    SELinux (Security-Enhanced Linux) in Fedora is an implementation of mandatory access control in the ...

  5. 【日常小记】linux中强大且常用命令:find、grep【转】

    转自:http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍fin ...

  6. linux 程序管理与SElinux

    此文涉及的命令:&.jobs.fg.bg.kill.nohup.ps.top.pstree.free.uname.uptime.netstat.dmesg.vmstat.fuser.lsof. ...

  7. Linux 中强大且常用命令:find、grep

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下:    find命令        f ...

  8. 【转载】Linux中强大且常用命令:find、grep

    转载自:http://www.linuxeden.com/html/softuse/20130804/142065.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find. ...

  9. linux中强大且常用命令:find、grep

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们. 本文结构如下: find命令 find命令的一般形 ...

随机推荐

  1. BC - Zball in Tina Town (质数 + 找规律)

    Zball in Tina Town  Accepts: 541  Submissions: 2463  Time Limit: 3000/1500 MS (Java/Others)  Memory ...

  2. MyBatis 中#{}与${}绑定参数的区别

    MyBatis 中#{}与${}绑定参数的区别: #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #{id},如果传入的值是111,那么解析成sql时的值为o ...

  3. C/C++ 答疑解问

    1. sizeof(string)的大小 string属于类,类的大小就是类中成员变量(非静态)加上指向虚函数表的指针以及指向虚基类表的指针加起来的和.因为string是一个模板类,受具体的实现来决定 ...

  4. cocos2d的armature绑定到其它armature骨骼上的bug

    在cocos2dx中,rmature的骨骼上能够绑定另外的armature,在我的项目中使用了该功能来完毕骑乘功能,可是在使用过程发现了例如以下的bug,特写在这里做一下记录. </span&g ...

  5. localStorage 读&&写

    localStorage.setItem('edit',nowedit);  写 var nowedit1= localStorage.getItem('editdel');读

  6. K8S之利用Label控制Pod位置

    首先介绍下什么是Label? Label是Kubernetes系列中一个核心概念.是一组绑定到K8s资源对象上的key/value对.同一个对象的labels属性的key必须唯一.label可以附加到 ...

  7. js返回上一层

    Javascript 返回上一页 1. Javascript 返回上一页 history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). wind ...

  8. JavaScript Date 日期操作

    在前端工程师的道路上,可能有时候需要与时间来打交道,下面我们来看一下日常对日期的操作,今天我们介绍的是Day.js插件 Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Mom ...

  9. PHP富文本编辑器 之Kindeditor的使用 一

    一.下载编辑器源码 KindEditor 4.1.10 (2013-11-23) [1143KB] 下载页面: http://kindeditor.net/down.php 二.部署编辑器 将下载文件 ...

  10. ACM_寻找第N小序列

    寻找第N小序列 Time Limit: 2000/1000ms (Java/Others) Problem Description: Now our hero finds the door to th ...