浅析 SELinux

为什么有的时候我们非要把SELinux=disabled设置成这样

  1. 什么是SELinux?(访问控制体系,实现系统安全性达到军方级别)

    百度解释:是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。

  2. 怎么用呢?

    [[email protected] ~]# cat /etc/redhat-release
    CentOS release 6.6 (Final)
    [[email protected] ~]# uname -a
    Linux hack1 2.6.32-504.12.2.el6.i686 #1 SMP Wed Mar 11 19:05:53 UTC 2015 i686 i686 i386 GNU/Linux
    [[email protected] ~]# 这是我的系统

    [[email protected] selinux]# ls
    config  restorecond.conf  restorecond_user.conf  semanage.conf  targeted
    [[email protected] selinux]# pwd
    /etc/selinux
    [[email protected] selinux]# cat config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    #     targeted - Targeted processes are protected,
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    [[email protected] selinux]#

    现在解释目录在/etc/selinux下,配置文件config

    SELINUX可以有三个参数

    enforcing级别:Linux下selinux所设置的安全策略都会被启用.所有与selinux安全策略有关的服务或者程序都会被策略阻止.

    permissive级别:Linux下selinux所设置的安全策略都会被启动,但是所有与selinux安全策略有关的服务或者程序不会被策略组织,但是会收到警告.

    disabled级别:关闭selinux,相当于系统没有安装selinux一样.

  3. 怎么实现策略呢?

    通过二进制和content(安全上下文(context secure),含义就是:一个进程到底能访问哪些文件取决于发起进程的用户的权限和访问的文件的权限设定),至于怎么通过二进制和content可以看下面的这个链接http://www.myhack58.com/Article/48/66/2012/36288.htm

  4. 常用的命令

    [[email protected] selinux]# getsebool -a #查看系统中所有“开关形式”的规则
    abrt_anon_write --> off
    abrt_handle_event --> off
    allow_console_login --> on
    allow_cvs_read_shadow --> off

    。。。。。。

    [[email protected] selinux]# getenforce #查看selinux 的status
    Enforcing

    [[email protected] selinux]#setenforce 0/1        #设置selinux的status(临时生效)

    ls -Z                  #查看文件的标签

    [[email protected] selinux]# ls -Z 可以看出不同的标签
    -rw-r--r--. root root system_u:object_r:selinux_config_t:s0 config
    -rw-r--r--. root root system_u:object_r:selinux_config_t:s0 restorecond.conf
    -rw-r--r--. root root system_u:object_r:selinux_config_t:s0 restorecond_user.conf
    [[email protected] selinux]# ls -Z /root
    -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
    -rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
    -rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog
    [[email protected] selinux]# ls -Z /home/lxf/
    -rw-rw-r--. lxf lxf unconfined_u:object_r:user_home_t:s0 c.log
    [[email protected] selinux]#

    ps auxZ             #查看进程的标签(用户:角色:类型)

    ps auxZ | grep httpd #查看httpd的标签
    ls -dZ /var/www/html #查看此目录的标签(链接里边的案例就是通过copy不同地方的文件,不能实现同样的访问,原因就来源于selinux
                               #上面进程和目录被selinux定义的类型相同,所以能被访问

    chcon  -t             #改文件类型
                -R             #该目录类型(递归修改)
               --reference
     chcon -R --reference=/var/www/html /www #参照/www更改/var/www/html文件类型
     chcon -t default_t /www/index.html   #更改文件类型为default_t

     restorecon -R         #恢复目录的文件原有默认属性
                      -F         #强制恢复
                      -v         #显示信息

    restorecon -R -v -F /www              #强制恢复/www目录的默认属性

    semanage  fcontext                    #更改文件安全上下文(永久性更改)
    getsebool -a | grep httpd  #查看httpd服务能用的“开关”

  5. 如何开启/关闭这些规则:
     setsebool httpd_enable_cgi=1     #开启
     setsebool httpd_enable_cgi=1     #关闭
  6. [[email protected] selinux]# getsebool -a |grep httpd 通过这个应该可以知道为什么关闭selinux
    allow_httpd_anon_write --> off
    allow_httpd_mod_auth_ntlm_winbind --> off
    allow_httpd_mod_auth_pam --> off
    allow_httpd_sys_script_anon_write --> off
    httpd_builtin_scripting --> on
    httpd_can_check_spam --> off
    httpd_can_network_connect --> off
    httpd_can_network_connect_cobbler --> off
    httpd_can_network_connect_db --> off
    httpd_can_network_memcache --> off
    httpd_can_network_relay --> off
    httpd_can_sendmail --> off
    httpd_dbus_avahi --> on
    httpd_dbus_sssd --> off
    httpd_enable_cgi --> on
    httpd_enable_ftp_server --> off
    httpd_enable_homedirs --> off
    httpd_execmem --> off
    httpd_manage_ipa --> off
    httpd_read_user_content --> off
    httpd_run_preupgrade --> off
    httpd_run_stickshift --> off
    httpd_serve_cobbler_files --> off
    httpd_setrlimit --> off
    httpd_ssi_exec --> off
    httpd_tmp_exec --> off
    httpd_tty_comm --> on
    httpd_unified --> on
    httpd_use_cifs --> off
    httpd_use_fusefs --> off
    httpd_use_gpg --> off
    httpd_use_nfs --> off
    httpd_use_openstack --> off
    httpd_verify_dns --> off
    [[email protected] selinux]#
  7. 扩展阅读

    SE Linux 可以为你的系统提供较棒的安全防护。 使用者能被分配预先定义好的角色,以便他们不能存取文件或者访问他们不拥有的程序。 这可不是简单的 " chmod 777" 同等物操作。 这在角色, 或他所在的安全上下文已经限制接触的文件和其他的资源的使用者定义中是不同于一般的 Unix 许可权限的,除了在一种比较受约束的流行之外。 带一个用户的.rhosts 文件在一个一般的 Unix 系统上申请。 如果他们使它成为任何人可写入 , 那么任何能登录的人都可以作危险的操作。 在 SE Linux 之下,你能控制其它用户是否有能力改变他们的.rhosts文件, 以及阻止其他的人写入 , 就算拥有者已经使它成为任何人可写入。
    一个通常的疑问是 SE Linux 的权限设置如何与标准的 Unix 的权限设置共存。 当你做特定的操作的时候, Unix 权限首先被检查。 如果他们允许你的操作 , 那么然后, SE Linux 将会检查并且允许或拒绝使用者的使用。 但是如果 Unix 许可不让你做某事,在那里的运行的操作被禁止和 SE Linux 检查没关系。  另外的一个例子是,如果有一个设置了SUID的可执行文件,如/usr/bin/passwd 他可以运行命令chmod 666 /etc/shadow,SE Linux 会阻止任何人非法的这样设置文件。  
    2.2 术语
    接下来的术语将在本文当中经常出现, 也是来自SE Linux的基本概念. It is somewhat tricky to define one word without including the other terms so I realise my definitions include things that need defining(译者注:这句实在不敢乱译,sorry。不过不耽误学习;-)) ) 
    2.2.1 (身份)identity
     
    在 SE Linux 中,身份的概念不同于传统的Unix uid (user id). 它们可以共存于一个系统, 但却是十分不同的概念。 在SE Linux中的身份是安全上下文的一部分,它会影响哪个域可以进入,也就是本质上的可以被执行。一个SE Linux 的身份(identity)会跟标准的Unix登录名有很相似的文本表示 (大部分情况下它们是这样), 无论如何,了解它们是两个完全不同的概念是很重要的。 运行su 命令不会改变SE Linux中的身份(identity)。(译者注:我在红帽系统中做的实验却不是这样,不过这无所谓,可能红帽系统的策略设置不同,我目前还没来得及研究具体是什么问题,只是猜测。)
     6

    Getting Started with SE Linux HOWTO:the new SE Linux
    举例: 
    一个无特权用户 faye 运行 id 命令 (在启动SE Linux的情况下) 可以看到用户的安全上下文: 
    context=faye:user_r:user_t
    安全上下文中的身份部分就是 "faye"。 现在, 如果 faye su切换成 root 再运行id, 他将发现安全上下文仍然是:
    context=faye:user_r:user_t
    身份保持相同, 跟没切换到root时一样。, 不管怎样,如果faye 身份被允许进入sysadm_r 角色并转换成了sysadm_r (这里可以使用newrole -r 命令),再运行id 命令,他将看到: 
    context=faye:sysadm_r:sysadm_t
    身份字段保持一样但是角色和域(第二和第三字段)的字段已经变了。这样保持身份的方式是用户职责所必需的。身份将影响系统决定哪个角色和域可以被什么身份所使用,这将对系统安全期决定性的作用。 
    2.2.2 域
     
    所有进程都在域中运行。域直接决定了进程的访问。 域基本上是一个进程允许做的操作的列表, 或者说它决定了一个进程可以对哪些类型进行操作。 域就好像一个标准UNIX的uid的概念。 假设一个属于root用户的可执行程序被设置了setuid。 在这个系统上的任何用户,只要可以执行这个程序,它就有可能获得root的权限。这是一个很大的安全漏洞。 再有SE Linux的系统上, 如果一个正在执行的进程想要转换进入特权域执行时,如果这个进程的角色被设置成不允许进入特权与的话, 这个进程就不能执行。 
    常见的例子是sysadm_t是系统管理域, user_t 是无特权用户域。 Init运行在init_t 域, named 运行在 named_t 域。
    2.2.3 类型
     
    类型分配给一个对象并决定谁可以访问这个对象。 它的定义和域基本相同, 不同就是域是对进程的应用而类型是分配给目录,文件,和套接字的。 
    2.2.4 角色
     
    角色决定了那些域可以使用。 有关哪些与可以被哪些角色使用可以预先定义在策略的配置文件里。如果一个策略数据库中定义了一个角色不可以使用一个域, 它将被拒绝。
     7

时间: 2024-10-23 16:46:03

浅析 SELinux的相关文章

辛星浅析Linux中的selinux

selinux是美国国家安全局发起的一个项目,它的目的是将系统加固到可以达到军方的级别.这也为Linux的安全提供了更强有力的保障. 所谓DAC,是自主访问控制,就是每一个用户为了能够实现和其他用户共享文件,在使用ACL之前,只能通过改变这个文件其他用户的权限,但是这种方法给系统安全带来了很多隐患.所谓CS,就是安全上下文,它取决于发起用户的权限和文本本身的权限. 所谓MAC,就是Mandatory   Access  Control,也就是强制访问控制,它是selinux实现访问控制的基础,s

浅析vanish

浅析 VANISH --一种cache 第一部分:理解vanish的准备工作 1.对CDN的小剖析 CDN  content  delivery  network  内容分发(推送)网络,是在现有的Internet中增加一层新的网络架构,将网络内容发布到最接近用户的网络边缘(边缘服务器),使用户最近取得所需内容,解决网络拥挤状态,提高用户访问网站的速度. CDN网络架构主要有两部分组成,中心和边缘两部分,中心指CDN网管中心和DNS重定向解析中心,负责全局负载均衡.边缘主要指异地节点,CDN分发

(Android系统)android property浅析

android property,相信各位android平台的开发人员用到的不会少,但是property的具体机制大家可能知道的不多,这里利用空闲时间大致了解了一些,特此分享跟大家,如有谬误,欢迎指正 android 1号进程进程init进程在开机的时候就会调用property_init函数,至于init是怎么起来的,这里不是重点,所以暂时先不介绍,property_init的具体flow如下: system/core/init/init.c void property_init(void) {

centos 6.X 关闭selinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统.在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件.SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上. 虽然SELinux很好用,但是在多数情况我们还是将其关闭,因为在不了解其机制的情况下使用SELinux会导致软件安装或者应用部署失败 以下就是关闭SELinux的方法 系统

CentOS 7.X 关闭SELinux

1.查看 [root@dev-server ~]# getenforce Disabled [root@dev-server ~]# /usr/sbin/sestatus -v SELinux status: disabled 2.临时关闭 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式 setenforce 0 3.永久关闭 vi /etc/selinux/config 将SELINUX=enforcing改为

永久关闭selinux

修改配置文件,永久关闭selinux. vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: #       enforcing - SELinux security policy is enforced. #       permissive - SELinux prints warnings

Python之encode与decode浅析

 Python之encode与decode浅析 在 python 源代码文件中,如果你有用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下: # code: UTF-8 因为python 只检查 #.coding 和编码字符串,为了美观等原因可以如下写法: #-*-coding:utf-8-*- 常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换. GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码.

SELinux入门简介

操作系统有两类访问控制:自主访问控制(DAC)和强制访问控制(MAC).标准Linux安全是一种DAC,SELinux为Linux增加了一个灵活的和可配置的的MAC. 进程启动时所拥有的权限就是运行此进程的用户权限,一个进程能访问哪些文件取决于该文件的主.组和其他权限,这就是DAC 如一个用户运行了进程,运行此进程需要若干个文件,但该进程具有的权限是与该用户的权限一致,即该进程能访问此用户能够访问的所有文件.Linux自身是无法限定某个进程只能访问其运行需要的指定文件,因此MAC,就是不让进程在

浅析PHP的开源产品二次开发的基本要求

浅析PHP的开源产品二次开发的基本要求 第一, 基本要求:HTML(必须要非常熟悉),PHP(能看懂代码,能写一些小系统,如:留言板,小型CMS),Mysql(至少会一种数据库),Javascript(能看懂,能改现成的一些代码),Div+Css(能进行界面的调整,明白CSS是怎么使用的) 第二, 熟悉开源产品的使用,比如 Dedecms,你要知道怎么登录,怎么新建栏目,怎么添加文章,模板标签的使用方法,模型的概念和使用方法等等一些功能 第三, 要熟悉这个开源产品的数据库结构,还要理解里面核心文