【Linux基础】SELinux-阿里云开发者社区

开发者社区> 科技小能手> 正文

【Linux基础】SELinux

简介:
+关注继续查看

 

目录:
一,目前系统文件权限的管理有两种: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内置的。只要学会在强制和宽松模式间转换就行了!
 
要了解更多更详细的知识,请去鸟哥的网站上看吧,我这里没有啦!哈哈~

本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/404673

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
3994 0
Linux 基础命令
Linux 基础命令修改IP 查看进程 lsof -i:端口 杀掉 kill -9 pid 永久关闭防火墙 systemctl stop firewalld.service 查看空间大小 df -h 编辑文件 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容。
664 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3950 0
Linux基础命令---uptime
uptime       uptime指令用来显示系统运行多长时间、有多少用户登录、系统负载情况。       此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。
811 0
14426
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载