目录:
一,目前系统文件权限的管理有两种: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 !安全性文本的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现 『权限不符』的错误讯息了!
我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了政策指定之外,主体与目标的 安全性文本必须一致才能够顺利存取。 这个 安全性文本 (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/config
SELINUX=enforcing <==调整 enforcing|disabled|permissive
SELINUXTYPE=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 与 permissive 之间切换与查看
[root@www ~]# setenforce 0
[root@www ~]# getenforce
Permissive
[root@www ~]# setenforce 1
[root@www ~]# getenforce
Enforcing
6,查看已启动程序的type设定
[root@master oracle]# ps aux -Z
LABEL
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
system_u:system_r:
init_t root 1 0.0 0.4 2060 520 ? Ss May07 0:02 init [5
system_u:system_r:
kernel_t root 2 0.0 0.0 0 0 ? S< May07 0:00 [migra]
system_u:system_r:
kernel_t root 11 0.0 0.0 0 0 ? S< May07 0:00 [kacpi]
system_u:system_r:
auditd_t root 4022 0.0 0.4 12128 560 ? S<sl May07 0:01 auditd
system_u:system_r:
auditd_t root 4024 0.0 0.4 13072 628 ? S<sl May07 0:00 /sbin/a
system_u:system_r:
restorecond_t root 4040 0.0 4.4 10284 5556 ? Ss May07 0:00 /usr/sb
说明:其实这些东西我们都不用管,都是SELinux内置的。只要学会在强制和宽松模式间转换就行了!
要了解更多更详细的知识,请去鸟哥的网站上看吧,我这里没有啦!哈哈~
本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/404673