| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 安全365社区 |
安全365
收藏本站
设为首页
会员登录:
站内搜索: 新闻中心 系统安全 网络安全 安全技术 下载中心
| 系统安全首页 | 漏洞分析 | 入侵检测 | 升级补丁 | 安全配置 |
在SELinux中基于角色的访问控制
在SELinux中基于角色的访问控制
作者:Serge E.… 文章来源:51CTO.com 点击数: 更新时间:2008-3-6 1:39:52
基于角色的访问控制(RBAC)是常用的简化管理的安全模式,通过给用户指定角色,然后再给角色授权来实现,RBAC在SELinux中扮演用户与基础类型加强模式(TE)之间的抽象层,它提供非常细粒度的访问控制,但是管理难度并没有降低,研究如何将SELinux上下文的3部分(策略、内核和用户空间)协同工作以强制使用RBAC和限制Linux用户在TE策略中。

在SELinux下安全策略的实施是在基于角色的访问控制(RBAC)下的类型增强(TE),(SELinux也能实现多级安全(MLS)的实施,MLS在本文范围之外),类型增强(TE)是最常见的,但也是最不容易理解的,因为它强制实施更细粒度的许可:当某些东西因为异常访问拒绝而遭到破坏时,类型增强(TE)是最可靠的,在TE中,一个进程的安全域(它的影响超过了系统)是由任务历史和当前执行的程序决定的

RBAC的概念并不象TE一样被经常提到,并且因为他与TE集成的原因,总是让人难以理解,你通常会认为RBAC是按照用户被分配的角色进行访问的,从TE方面来说SELinux明确指出了基于角色的访问,因此SELinux下RBAC的目标是允许基于角色的权限管理,然后限制一个角色的权利域,合成一个有效的安全上下文。

要知道这是如何工作的,请看一个简单的现金帐簿会计系统是如何使用SELinux提供安全保护的,你将在两个完全不同的环境(看这两个环境相关的下载,附录A)下看到一样的解决方案:

在developerWorks网站上有一篇文章“从零开始SELinux”介绍了如何从零开始一个SELinux系统,这个系统显示在内核和用户空间里的部分是绑定在一起的。

Fedora Core 8 系统,Fedora Core 8 系统(写本文时的最新版本)展示了SELinux与RBAC是如何高度地集成在一起的。

与角色一起工作

假设你已经要求一个库房部门部署一套安全登记库存会计系统,因为每天都进行现金帐簿,最终数量必须同时被出纳和经理统计,因此我们首先定义两个角色,出纳和经理,然后我们将角色赋予了需要它的雇员,即赋予出纳和经理。

在两个系统上的策略文件或许会稍微不同,在两个系统上都使用现金帐簿系统,数据一样,所有数据存储在/data目录下,并且只能通过/bin/register.py程序进行访问,register.py能同时被经理和出纳使用,用于存储数值,为了保持代码简洁,缺少一些特点,出纳每天为他自己存储现金帐簿值,经理能为其他雇员存储数值,当出纳与经理为同一个出纳存储相同的数值时,经理能够提交这个数值。

在2007/12/12晚上9点,当出纳Bob使用register.py存储了一个数值109.95时,文件/data/cashier_r/bob/12-12-2007被创建,内容是"bob 09:00 109.95.",后来,经理Mary在9:25存储了一个相同的数值,结果文件/data/cashier_r/bob/12-12-2007被覆盖,内容为"mary 09:25 109.95.",最后,Mary在晚上9:27提交了这个数值,bob使用register.py提交后创建了文件/data/final/bob/12-12-2007,内容为"mary 09:27 bob mary 109.95."。

如果Bob和Mary对他们的数值都不同意,Mary将不能为Bob提交数值了,他不得不去找Bob协商,除非他们两个都同意,否则这两个数值都必须重新计算,重新运行register.py命令用前面的数值再计算一次,新的结果将附加到先前的结果后以便仓库管理员稍后容易阅读,bob使用/bin/register.py命令提交时将使用最后的那个数值而不是/data/cashier_r/bob/12-12-2007和/data/mgr_r/bob/12-12-2007。

注意:在这个例子中讨论的代码都为访问控制需要使用了SELinux,我们的例子简单地允许所有拥护都能完全往/data目录下的文件和目录中进行写入访问,在一个真实的部署环境中,你可能会想到使用DAC[译者注:即传统的linux权限控制,使用访问控制列表ACL]许可来进行深度防御,所有经理都希望在/data/mgr_r/bob/和/data/final/bob/目录下创建文件,牵涉到UNIX组权限的小心使用,但是更简单的办法是,完全依靠SELinux来实现强制访问控制。

首先阻止经理和出纳访问/data目录下的任何文件,除非通过register.py程序,实际上,Bob将以cashier_t类型登陆到角色cashier_r,但是cashier_t不能读取/data目录下的内容,为了能读取,他必须进入cashier_register_t类型,进入后也只能执行/bin/register.py程序,类似地,Mary将以mgr_t登陆到角色mgr_r,但是他必须进入mgr_register_t类型后才能执行/bin/register.py程序来访问/data目录下的内容。

第一个访问控制实际上发生在登陆的时候,PAM模块认为Bob必须登陆到cashier_r角色,当在内核中的SELinux类型增强服务器拒绝同意bob_u:cashier_r:cashier_t进入bob_u:cashier_r:cashier_register_t时也会发生,除了执行cashier_exec_t类型的文件,cashier_exec_t是管理员仅仅为/bin/register.py指定的类型。

当register.py拒绝同意出纳提交数据或为另一个用户存储数据时也会发生,将来通过SELinux策略进行加强,并且内核代码也会加强策略的控制,它不允许cashier_register_t访问/data/mgr_r或/data/final目录下的文件。

部署现金帐簿系统

部署现金帐簿会计系统的第一步建立在前面提及到的从零开始一个SELinux系统(可以在http://www.ibm.com/developerworks/linux/library/l-rbac-selinux/index.html?ca=drs-#download下载)之上,下面的步骤将展示完成一个从零开始的系统

加载要使用的磁盘镜像(关闭qemu镜像):

mount -o loop,offset=32256 -t ext2 gentoo.img /mnt

http://www.ibm.com/developerworks/linux/library/l-rbac-selinux/index.html?ca=drs-#download下载code_for_fromscratch.tgz,然后在磁盘镜像下解压:

tar zxf selinuxregister.tgz -C /mnt
umount /mnt 

现在开始qemu镜像:

qemu -hda gentoo.img -m 512 -vnc :3 -kernel bzImage -append "ro root=
/dev/hda1 -p"

一旦你登陆进去,你必须编译并安装新的策略和新的PAM模块:

cd /usr/src
checkpolicy -c 19 -o policy.bin policy.conf
cp policy.bin /etc/
rc-update add selinuxenforce default
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.orig
cp /etc/pam.d/system-auth.new /etc/pam.d/system-auth

在策略中的用户被创建,但是你必须创建与之对应的Linux用户:

adduser mary
passwd mary
  (passwd)
mkdir /home/mary
adduser boss
passwd boss
  (passwd)
mkdir /home/boss
adduser bob
passwd bob
  (passwd)
mkdir /home/bob

然后为数据存储创建目录结构:

mkdir /data
mkdir /data/cashier_r
mkdir /data/mgr_r
mkdir /data/final
chmod 777 /data/*
最后,给文件系统做上标记:
setfiles /usr/src/filecontexts /
poweroff

现在镜像准备好了,不加-p参数重新启动它,SELinux策略就被加载了:

qemu -hda gentoo.img -m 512 -vnc :3 -kernel bzImage -append "ro root=
/dev/hda1"

再以root登陆并再次尝试:
ls /data

权限被拒绝,注销root然后用bob登陆,我们的出纳,登记一个数值,例如:
register bob 25.22

然后尝试欺骗系统
register bob commit

不能工作,注销bob然后用Mary登陆:
register bob commit

哦,Mary首先需要敲入她自己的数值:
register bob 27
register bob commit

数值不匹配,想知道Bob提交后的结果吗?
cat /data/cashier_r/bob/(day)

哦,你未被允许查看它,你将不得不去找Bob进行协商,或许你要重新统计你的帐簿并查出他是对的,因此:
register bob 25.22
register bob commit

这下没有问题了,现在你以root用户登陆并:
cat /data/final/bob/(day)

这下将显示所有输入的数值了。

 

[1] [2] [3] 下一页

文章录入:郝丽    责任编辑:郝丽 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    没有相关文章
    站长邮箱:webmaster@anquan365.com
    联系电话:86-10-67634029 点击这里给我发消息

    Copyright © 2006-2008 www.anquan365.com 北京华安普特网络科技有限公司 版权所有