SELinux(Security Enhanced Linux)是美国国家安全局2000年发布的一种高级MAC(Mandatory Access Control,强制访问控制)机制,用来预防恶意入侵。SELinux在DAC(Discretionary Access Control,自主访问控制)的基础上实现了强制访问控制,比如读、写和执行权限。

SElinux有三种模式,分别是Enforcing, permissive, disabled。

1. Enforcing,强制模式。该模式下会基于policy规则拒绝某些访问。

2. Permissive宽容模式。

3. Disabled,该模式下会关闭SELinux。

修改模式的默认配置文件为/etc/selinux/config。

改变SELinux模式

setenforce 1 设置SELinux 成为enforcing模式

setenforce 0 设置SELinux 成为permissive模式

运行$ getenforce可以看到当前运行模式:

$ getenforce

运行下面的命令切换到Permissive 模式

$ setenforce 0

运行下面命令从permissive模式切换到enforcing模式

$ setenforce 1

如果想要关闭SELinux,可以通过配置文件修改。

$ vi /etc/selinux/config
SELINUX=disabled

配置Selinux

每个文件或进程用SELinux上下文环境上下文环境中含有SELinux用户、角色、类型等额外的信息。如果第一次开启SELinux,需要配置上下文环境和标签。配置修复label和上下文环境的过程叫做relabeling。在relabeling时,首先要切换到permissive模式。

$ vi /etc/selinux/config
SELINUX=permissive

模式切换到permissive时,会在目录/directory下创建一个隐藏的名为autorelabel的文件。

$ touch /.autorelabel

重启机器

$ init 6

注:选择用permissive模式而不是enforcing模式的原因是,enforcing模式下进行relabeling可能会造成系统奔溃。

Relabeling完成且系统重启后,可以更改到enforcing模式,并运行

$ setenforce 1

这样就成功地配置并开启SELinux了。

监控日志

为了确保SELinux的正常运行,需要对日志进行监控。SELinux的日志文件保存在/var/log/audit/audit.log,日志文件中有很多条记录,但是检查错误信息时不需要阅读全部日志,有一个简单的工具是audit2why,运行下面的命令

$ audit2why < /var/log/audit/audit.log

输出文件就是错误信息。如果没有错误,那么就不会有输出。

设定Selinux策略

SELinux策略是指导SELinux安全引擎的规则集。策略定义了特殊上下文环境下的规则集,下面是改变策略来允许对拒绝的服务的访问。

1. Booleans

Booleans允许运行时对策略进行改变而不需要写策略。这允许在不重新加载或者编译SELinux策略的同时,实现变化。

例1:

如果想要通过FTP分享用户home目录的读写权限,我们已经分享了该目录,但是尝试访问时看不到该目录。这是因为SELinux策略阻止了FTP守护进程在用户Home目录进行读写。我们需要对SELinux策略进行改变,这样FTP就可以访问home目录了。我们利用Booleans来完成这个功能。

$ semanage boolean –l

该命令会生成一系列可用的Booleans和对应的实时状态和描述。可以通过grep命令找出关于ftp的结果:

$ semanage boolean –l | grep ftp
ftp_home_dir        -> off      允许ftp在用户目录下进行读写状态

则是off的状态,我们用setsebool来开启

$ setsebool ftp_home_dir on

现在ftp守护进程就可以访问用户的Home目录了。

getsebool -a也可以获取可用的Booleans列表,但是不会显示Boolean的描述。

2. Labelling &Context

这是在服务器上实施SElinux策略的最常用方法。每个文件、文件夹、进程、端口都被SELinux context标记。

对于文件和文件夹,标签是以文件系统的扩展属性存储的,可以通过下面的命令进行查看

$ ls –Z /etc/httpd

对于进程和端口,kernel负责管理标签,同样地,可以通过下面的命令查看对应的标签:

$ ps –auxZ | grephttpd (for process)
$ netstat –anpZ | grephttpd (for port)

例2:

我们有一个web服务器,文件目录是/home/dan/html而不是默认的/var/www/html,这样SELinux就会认为违反了策略,这样就不能访问web页面。这是因为还没有设定与html文件相关的安全上下文环境。可以用下面的命令来检查html文件的默认安全上下文环境;

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

上面就是我们得到的html文件的安全上下文环境httpd_sys_content_t。同时需要设定当前目录 安全上下文环境为–rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/。

另一个检查文件或者目录的安全上下文环境的命令为:

$ semanage fcontext -l | grep ‘/var/www’

当我们找到正确的安全上下文环境时,semanage命令同样可以用来改变安全上下文环境。可以用下面的semanage命令来改变/home/dan/html的安全上下文环境:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

一旦semange操作改变了安全上下文环境,restorecon就会加载文件和目录的默认上下文环境。Web服务器就可以从/home/dan/html文件夹读取文件,同时,文件的安全上下文环境就变成http_sys_content_t了。

3. 创建本地策略

如果上面的访问不能生效,而且audit.log中出现错误消息。当这种情况出现的话,我们需要创建本地策略来解决那些错误信息。同时,可以用上面提到的audit2why查看错误信息。当获取错误后,就可以创建本地策略(Local policy)来解决这些错误。比如,我们获取了httpd或smbd错误,我们可以用grep查找错误信息,并创建安全策略。

$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy (for apache)
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy (for samba)

下面的http_policy和smb_policy是本地策略的名字。现在我们必须加载那些创建的本地策略到当前SELinux策略中,可以用semodule命令完成这个功能。

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

这样本地策略就加载了,audit.log中也就不会有错误信息了。

SELinux初学者指南的更多相关文章

  1. Java多线程初学者指南系列教程

    转自:http://developer.51cto.com/art/200911/162925.htm 51cto 本系列来自NokiaGuy的“真的有外星人吗”博客,系列名称为<Java多线程 ...

  2. NHibernate初学者指南系列文章导航

    NHibernate初学者指南系列文章导航   前面的话 经过三个多周的时间,终于将这个系列完成了,谢谢大家的关注和支持,有很多不足之处还望大家包涵. 本系列参考的书籍为NHibernate 3 Be ...

  3. 【系列】Java多线程初学者指南(1):线程简介

    原文地址:http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/03/archive/2009/03/19/26075 ...

  4. 【翻译】nginx初学者指南

    nginx初学者指南 本文翻译自nginx官方网站:http://nginx.org/en/docs/beginners_guide.html#control 该指南会对nginx做一个简要的介绍,同 ...

  5. FreeBSD上编写x86 Shellcode初学者指南

    FreeBSD上编写x86 Shellcode初学者指南 来源 https://www.4hou.com/binary/14375.html 介绍 本教程的目的是帮助你熟悉如何在FreeBSD操作系统 ...

  6. 《SQL初学者指南》——第1章 关系型数据库和SQL

    第1章 关系型数据库和SQL SQL初学者指南在本章中,我们将介绍一些背景知识,以便于你能够很快地上手,能在后续的章节中编写SQL语句.本章有两个主题.首先是对本书所涉及到的数据库做一个概述,并且介绍 ...

  7. Python编程初学者指南|百度网盘免费下载|Python新手入门资料

    Python编程初学者指南|百度网盘免费下载 提取码:9ozx 目录  · · · · · · 第1章 启程:Game Over程序1.1 剖析Game Over程序1.2 Python简介1.2.1 ...

  8. 《Python编程初学者指南》高清PDF版|百度网盘免费下载|Python基础

    <Python编程初学者指南>|百度网盘免费下载| 提取码:03b1 内容简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python可以用于很多的领域,从科学计 ...

  9. Python编程初学者指南PDF高清电子书免费下载|百度云盘

    百度云盘:Python编程初学者指南PDF高清电子书免费下载 提取码:bftd 内容简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python可以用于很多的领域,从科学计算 ...

随机推荐

  1. 使用UILabel实现滚动字幕移动效果

    使用UILabel实现滚动字幕移动效果 这个链接中的代码也实现了这种效果 https://github.com/cbpowell/MarqueeLabel 最终效果如下: 原理如下: 1. 获取文本 ...

  2. hbase shell基础和常用命令详解

    HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...

  3. ubuntu13.04更新源

    最近163的源出问题了,又要换一次源. 报错如下: 查更新源的命令查了好多次,这次还是记下来吧,估计以后还会用到很多次. 常规来说,是要先备份的,不过感觉备份也没什么用,所以就直接跳过吧.. 1  打 ...

  4. 英语零散笔记Note整理

    无意之间整理电脑发现还存放着以前自己看视频做的一些笔记,关于新概念英语的笔记,觉得不错,放于博客,以供学习. English Note1 定语从句 将不重要的动作放在定语从句中,重要的放在主干中. 倒 ...

  5. December 29th 2016 Week 53rd Thursday

    The true nobility is in being superior to your previous self. 真正的高贵在于超越过去的自己. It is really difficult ...

  6. ONOS的安装

    ONOS的简介 ONOS(Open Network Operating System)开放网络操作系统,由 ON.Lab 使用 Java 及 Apache 实现发布的首款开源的SDN网络操作系统. O ...

  7. [TOP10]最受欢迎的10个Metasploit模块和插件

    很多人都想知道最受欢迎的10个Metasploit模块和插件是什么(TOP10),事实上这是一个很难回答的问题,因为什么才叫"Top"?我想每个人都有每个人的看法.于是我们通过调查 ...

  8. 小白学CMD下运行MySQL

    将mysql目录下bin目录中的mysql.exe放到C:\WINDOWS下,可以执行以下命令 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) ...

  9. python选课系统

    程序名称: 选课系统 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海 ...

  10. 指令集 与 cpu

    http://cache.baiducontent.com/c?m=9d78d513d9d437ab4f9d9e697c15c0116e4381132ba7a1020ca08448e2732d4050 ...