【Linux基础】SELinux

来源:互联网 发布:4g网络优化方案 编辑:程序博客网 时间:2024/05/16 07:50
 
目录:
一,目前系统文件权限的管理有两种: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
 
正文:

 

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想要访问其他目录,那么必须满足两个条件: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/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内置的。只要学会在强制和宽松模式间转换就行了
原创粉丝点击