一个好老好老的老程序员了。
全部博文(915)
分类: 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
5,SELINUX 的启动与关闭 4
6,查看已启动程序的TYPE设定 4
正文:
SELinux是Security 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想要访问其他目录,那么必须满足两个条件:DAC的rwx + 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/httpd的type是什么呢?就是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
5,SELinux 的启动与关闭
【重要常识】上面是预设的政策与启动的模式!你要注意的是,如果改变了政策则需要重新开机;如果由 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日编辑了该文章文章。