您的位置:首页 > 运维架构 > Linux

【Linux基础】SELinux

2011-07-04 11:21 375 查看
目录:一,目前系统文件权限的管理有两种:DAC(传统的) 和 MAC(SELINUX) 11,传统的文件权限与帐号关系:自主式存取控制, DAC(DISCRETIONARY ACCESS CONTROL, DAC) 12,以政策规则订定特定程序读取特定文件:委任式存取控制, MAC 1【理解】 2二,SELINUX 的运作模式 21,【重要原理】SELINUX 是透过 MAC 的方式来控管程序, 22,查看安全性上下文的命令 2【重点】在预设的 TARGETED 政策中, IDENTIFY 与 ROLE 栏位基本上是不重要的! 3三、SELINUX 的启动、关闭与查看 31,并非所有的 LINUX DISTRIBUTIONS 都支持 SELINUX 的 32,查看SELINUX的模式 33,查看 SELINUX 的政策 (POLICY)? 34,通过配置文件调整SELINUX的参数 35,SELINUX 的启动与关闭 46,查看已启动程序的TYPE设定 4正文:
SELinux是[b]Security Enhanced Linux[b]的缩写,[b]强化网络安全和权限管理 [/b][/b][/b]一,目前系统文件权限的管理有两种: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), 而[b]目标是文件(该程序欲访问的文件)![/b]是程序·主体 (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 [align=left]Identify:role:type[/align]身份识别:角色:类型 关于这三个参数的说明:·身份识别 (Identify):
相当于帐号方面的身份识别!root:表示 root 的帐号身份system_u:表示系统程序方面的识别,通常就是程序;user_u:代表的是一般使用者帐号相关的身份。 ·角色 (Role):
通过角色栏,我们可以知道这个资料是属于程序文件资料还是代表使用者。一般的角色有:object_r:代表的是文件或者目录system_r:代表的就是程序或者一般使用者也会被指定成为 system_r !【重点】在预设的 targeted 政策中, Identify 与 Role 栏位基本上是不重要的!重要的在于这个类型 (type) 栏位! 基本上,一个主体程序能不能读取到这个文件资源,与类型栏位有关!而类型栏位在文件与程序的定义不太相同。 ·类型(type)很重要,它有两种叫法,但实为同一物!type:在文件资源 (Object) 上面称为类型 (Type); DAC中的rwxdomain:在主体程序 (Subject) 则称为领域 (domain) 了! MAC[b]中的权限[/b]
【重要】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的模式# getenforceEnforcing <==就显示出目前的模式为 Enforcing 3,查看 SELinux 的政策 (Policy)?[root@master oracle]# sestatus[align=left]SELinux status: enabled <==是否启动 SELinux[/align][align=left]SELinuxfs mount: /selinux <==SELinux 的相关文件资料挂载点[/align][align=left]Current mode: enforcing <==目前的模式[/align][align=left]Mode from config file: enforcing <==设定档指定的模式[/align][align=left]Policy version: 21[/align]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 了呢?[align=left][root@www ~]# vi /boot/grub/menu.lst[/align][align=left]default=0[/align][align=left]timeout=5[/align][align=left]splashimage=(hd0,0)/grub/splash.xpm.gz[/align][align=left]hiddenmenu[/align][align=left]title CentOS (2.6.18-92.el5)[/align][align=left] root (hd0,0)[/align][align=left] kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet selinux=0[/align][align=left] initrd /initrd-2.6.18-92.el5.img[/align]# 如果要启动 SELinux ,则不可以出现 selinux=0 的字样在 kernel 后面!【问题】通过上面的学习我们知道,如果将启动着的SELinux改为禁用,需要重启电脑,我们不想重启电脑又不想开启SELinux该怎么办呢?【答案】将强制模式改为宽松模![align=left][root@www ~]# setenforce [0|1][/align][align=left]选项与参数:[/align][align=left]0 :转成 permissive 宽容模式;[/align][align=left]1 :转成 Enforcing强制模式[/align][align=left] [/align][align=left]范例一:将 SELinux 在 Enforcing 与 permissive 之间切换与查看[/align][align=left][root@www ~]# setenforce 0[/align][align=left][root@www ~]# getenforce[/align][align=left]Permissive[/align][align=left][root@www ~]# setenforce 1[/align][align=left][root@www ~]# getenforce[/align]Enforcing 6,查看已启动程序的type设定[root@master oracle]# ps aux -ZLABEL USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDsystem_u:system_r:init_t root 1 0.0 0.4 2060 520 ? Ss May07 0:02 init [5system_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 auditdsystem_u:system_r:auditd_t root 4024 0.0 0.4 13072 628 ? S<sl May07 0:00 /sbin/asystem_u:system_r:restorecond_t root 4040 0.0 4.4 10284 5556 ? Ss May07 0:00 /usr/sb 说明:其实这些东西我们都不用管,都是SELinux内置的。只要学会在强制和宽松模式间转换就行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: