Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5018566
  • 博文数量: 891
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8636
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(891)

文章存档

2020年(8)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: LINUX

2011-07-20 13:18:53

目录:

一,目前系统文件权限的管理有两种:DAC(传统的) 和 MAC(SELINUX) 1

1,传统的文件权限与帐号关系:自主式存取控制, DAC(DISCRETIONARY ACCESS CONTROL, DAC)      1

2,以政策规则订定特定程序读取特定文件:委任式存取控制, MAC   1

【理解】       2

二,SELINUX 的运作模式      2

1,【重要原理】SELINUX 是透过 MAC 的方式来控管程序,    2

2,查看安全性上下文的命令     2

【重点】在预设的 TARGETED 政策中, IDENTIFY ROLE 栏位基本上是不重要的!   3

三、SELINUX 的启动、关闭与查看     3

1,并非所有的 LINUX DISTRIBUTIONS 都支持 SELINUX 3

2,查看SELINUX的模式   3

3,查看 SELINUX 的政策 (POLICY)  3

4,通过配置文件调整SELINUX的参数   3

5SELINUX 的启动与关闭      4

6,查看已启动程序的TYPE设定      4

 

正文:

SELinuxSecurity Enhanced Linux的缩写,强化网络安全和权限管理

一,目前系统文件权限的管理有两种:DAC(传统的) MAC(SELinux)

总结:DAC是以用户为出发点来管理权限的

      MAC是以程序为出发点来管理权限的

1,传统的文件权限与帐号关系:自主式存取控制, DAC(Discretionary Access Control, DAC)

简单理解DAC就是rwx!因此,当某个程序想要对文件进行存取时, 系统就会根据该程序的拥有者/群组,并比对文件的权限,若通过权限检查,就可以存取该文件了。

【注意】:各种权限设定对 root 是无效的。

DAC的缺点:

· root 具有最高的权限如果不小心某个程序被它人取得, 且该程序属于 root 的权限,那么这支程序就可以在系统上进行任何资源的存取!真是要命!

·使用者可以取得程序来变更文件资源的存取权限如果你不小心将某个目录的权限设定为 777 ,由于对任何人的权限会变成 rwx ,因此该目录就会被任何人所任意存取!

这些问题是非常严重的!尤其是当你的系统是被某些漫不经心的系统管理员所掌控时!她们甚至觉得目录权限调为 777 也没有什么了不起的危险哩...

2,以政策规则订定特定程序读取特定文件:委任式存取控制, MAC

委任式存取控制 (MAC) :他可以针对特定的程序与特定的文件资源来进行权限的控管! 也就是说,即使你是 root ,那么在使用不同的程序时,你所能取得的权限并不一定是 root 而得要看当时该程序的设定而定。如此一来,我们针对控制的『主体』变成了『程序』而不是使用者喔! 此外,这个主体程序也不能任意使用系统文件资源,因为每个文件资源也有针对该主体程序设定可取用的权限! 如此一来,控制项目就细的多了!但整个系统程序那么多、文件那么多,一项一项控制可就没完没了 所以 SELinux 也提供一些预设的政策 (Policy) ,并在该政策内提供多个规则 (rule) ,让你可以选择是否启用该控制规则!

在委任式存取控制的设定下,我们的程序能够活动的空间就变小了!举例来说, WWW 伺服器软体的达成程序为 httpd 这支程式, 而预设情况下, httpd 仅能在 /var/www/ 这个目录底下存取文件,如果 httpd 这个程序想要到其他目录去存取资料时, 除了规则设定要开放外,目标目录也得要设定成 httpd 可读取的模式 (type) 才行喔!限制非常多! 所以,即使不小心 httpd cracker 取得了控制权,他也无权浏览 /etc/shadow 等重要的设定档喔!

【理解】

以前:root--->启动httpd---->httpd可以访问系统任何文件

现在:root--->启动httpd---->httpd只能访问/var/www/目录(这是MAC)规则的约束

    如果httpd想要访问其他目录,那么必须满足两个条件:DACrwx + MAC的规则

二,SELinux 的运作模式 1,【重要原理】SELinux 是透过 MAC 的方式来控管程序,

他控制的主体程序httpd), 目标是文件(该程序欲访问的文件)

·主体 (Subject)SELinux 主要想要管理的就是程序,主体= process

·目标 (Object):主体程序将访问的文件,目标=文件

·政策 (Policy)由于程序与文件数量庞大,因此 SELinux 依据服务来制订基本的存取安全性政策。这些政策内包含有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 5.x 里面仅有提供两个主要的政策,分别是:

【重点】

targeted针对网路服务限制较多,针对本机限制较少,是预设的政策

strict完整的 SELinux 限制,限制方面较为严格。

建议:使用预设的 targeted 政策即可。

·安全性上下文 (security context)
我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了政策指定之外,主体与目标的安全性文本必须一致才能够顺利存取。 这个安全性文本 (security context) 有点类似文件系统的 rwx !安全性文本的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!

CentOS 5.x 已经帮我们制订好非常多的规则了,这部份你只要知道如何开启/关闭某项规则的放行与否即可。

2,查看安全性上下文的命令

# ls –Z

-rw-r--r--  root root root:object_r:user_home_t   install.log.syslo

Identify:role:type

身份识别:角色:类型

关于这三个参数的说明:

·身份识别 (Identify)
相当于帐号方面的身份识别!

root表示 root 的帐号身份

system_u:表示系统程序方面的识别,通常就是程序;

user_u代表的是一般使用者帐号相关的身份。

·角色 (Role)
通过角色栏,我们可以知道这个资料是属于程序文件资料还是代表使用者。一般的角色有:

object_r代表的是文件或者目录

system_r代表的就是程序或者一般使用者也会被指定成为 system_r

【重点】在预设的 targeted 政策中, Identify Role 栏位基本上是不重要的!

重要的在于这个类型 (type) 栏位! 基本上,一个主体程序能不能读取到这个文件资源,与类型栏位有关!而类型栏位在文件与程序的定义不太相同。

·类型(type)很重要,它有两种叫法,但实为同一物!

type在文件资源 (Object) 上面称为类型 (Type) DAC中的rwx

domain在主体程序 (Subject) 则称为领域 (domain) 了! MAC中的权限


【重要】domain 需要与 type 搭配,则该程序才能够顺利的读取文件资源啦!

[root@master oracle]# ll -Zd /usr/sbin/httpd

-rwxr-xr-x  root root system_u:object_r:httpd_exec_t   /usr/sbin/httpd

【说明】:既然说type很重要,/usr/sbin/httpdtype是什么呢?就是httpd_exec_t 说明httpd程序对该文件有执行权限!相当于文件上的x权限!!

三、SELinux 的启动、关闭与查看 1,并非所有的 Linux distributions 都支持 SELinux

目前 SELinux 支持三种模式,分别如下:

·enforcing:强制模式,代表 SELinux 运作中,且已经正确的开始限制 domain/type 了;

·permissive:宽容模式:代表 SELinux 运作中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux debug 之用;

·disabled:关闭SELinux 并没有实际运作。

2,查看SELinux的模式

# getenforce

Enforcing  <==就显示出目前的模式为 Enforcing

3,查看 SELinux 的政策 (Policy)

[root@master oracle]# sestatus

SELinux status:                 enabled    <==是否启动 SELinux

SELinuxfs mount:                /selinux   <==SELinux 的相关文件资料挂载点

Current mode:                   enforcing  <==目前的模式

Mode from config file:          enforcing  <==设定档指定的模式

Policy version:                 21

Policy from config file:        targeted   <==目前的政策为何?

4,通过配置文件调整SELinux的参数[root@www ~]# vi /etc/selinux/configSELINUX=enforcing     <==调整 enforcing|disabled|permissiveSELINUXTYPE=targeted  <==目前仅有 targeted strict

5SELinux 的启动与关闭

【重要常识】上面是预设的政策与启动的模式!你要注意的是,如果改变了政策则需要重新开机;如果由 enforcing permissive 改成 disabled ,或由 disabled 改成其他两个,那也必须要重新开机。这是因为 SELinux 是整合到核心里面去的, 你只可以在 SELinux 运作下切换成为强制 (enforcing) 或宽容 (permissive) 模式,不能够直接关闭 SELinux 的!

同时,由 SELinux 关闭 (disable) 的状态到开启的状态也需要重新开机啦!所以,如果刚刚你发现 getenforce 出现 disabled 时, 请到上述文件修改成为 enforcing 吧!

【重点】如果要启动SELinux必须满足以下两个点:

所以,如果你要启动 SELinux 的话,请将上述的 SELINUX=enforcing 设定妥当,并且指定 SELINUXTYPE=targeted 这一个设定, 并且到 /boot/grub/menu.lst 这个文件去,看看核心有无关闭 SELinux 了呢?

[root@www ~]# vi /boot/grub/menu.lst

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS (2.6.18-92.el5)

        root (hd0,0)

        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet selinux=0

        initrd /initrd-2.6.18-92.el5.img

# 如果要启动 SELinux ,则不可以出现 selinux=0 的字样在 kernel 后面!

【问题】通过上面的学习我们知道,如果将启动着的SELinux改为禁用,需要重启电脑,我们不想重启电脑又不想开启SELinux该怎么办呢?

【答案】将强制模式改为宽松模!

[root@www ~]# setenforce [0|1]

选项与参数:

0 :转成 permissive 宽容模式;

1 :转成 Enforcing 强制模式

范例一:将 SELinux Enforcing 管理员在2009年8月13日编辑了该文章文章。

-->
阅读(1761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~