zoukankan      html  css  js  c++  java
  • SELinux初学者指南

    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中也就不会有错误信息了。

  • 相关阅读:
    Flutter实战视频-移动电商-11.首页_屏幕适配方案讲解
    Flutter实战视频-移动电商-10.首页_FlutterSwiper轮播效果制作
    Flutter实战视频-移动电商-09.首页_项目结构建立和获取数据
    Flutter实战视频-移动电商-08.Dio基础_伪造请求头获取数据
    【RQNOJ】460 诺诺的队列
    NYOJ 483 Nightmare 【广搜】+【无标记】
    冒泡,简单选择,直接插入排序(Java版)
    基于MFC与第三方类CWebPage的百度地图API开发范例
    USACO 1.2 Palindromic Squares (进制转换,回文)
    与《新走遍美国》的邂逅
  • 原文地址:https://www.cnblogs.com/wushangguo/p/9118800.html
Copyright © 2011-2022 走看看