Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->Linux技术 ->发行版专区 ->Gentoo ->构建一个 SELinux 就绪的 Gentoo 系统
  相关分类: 
CentOS
ubuntu
turbolinux
Suse
slackware
Redhat
Mepis
mandriva
Mandrake
knoppix
Gentoo
Fedora
Debian
红旗
  站内搜索: 
热门文章排行
热门文章排行 Gentoo版Linux操作系统的前世今生(04-11)
新手安装Xentoo(Xen+Gentoo)的极速体(04-22)
磨炼Gentoo的锋芒之十步骤实现基本安(04-11)
Bash 实例-探讨Gentoo ebuild系统 (04-22)
构建一个 SELinux 就绪的 Gentoo 系(04-22)
精采文章排行
精采文章排行 Gentoo 下LAMP 的安装和(05-05)
一步一步教你装linux:gentoo从装笔(05-05)
Gentoo Linux 1.4_rc4版本安装说明(05-05)
Gentoo 下LAMP 的安装和配置 (04-22)
新手安装Xentoo(Xen+Gentoo)的极速体(04-22)
  · 一步一步教你装linux:gentoo从装笔记· Gentoo Linux 1.4_rc4版本安装说明·Gentoo 下LAMP 的安装和配置 ·新手安装Xentoo(Xen+Gentoo)的极速体验 ·构建一个 SELinux 就绪的 Gentoo 系统 ·Bash 实例-探讨Gentoo ebuild系统 ·SPARC中怎么样安装Linux系统(Gentoo) ·《Gentoo Linux 发行版》(Gentoo Linux)[·Gentoo系统下LAMP的安装和配置简介

构建一个 SELinux 就绪的 Gentoo 系统

作者:Serge E. Hallyn    来源:IBM DW   点击:   日期:2007-04-22 [收藏] [投稿]

  IE是否经常中毒?推荐您

将一个有效上下文分配给系统中的第一个进程。两行之后,您可以看到:

sid unlabeled user_u:base_r:base_t

这会将相同的上下文分配给任何没有标记的文件。

现在来看一下文件 file_contexts。其中包括两行内容,格式如下:

<regexp> <context>

其中 regexp 是一个用来对文件名进行比较的正则表达式,context 是如果这个正则表达式可以匹配就对文件应用的 SELinux 上下文。下面这行代码:

/.* user_u:base_r:base_t

用来将这个上下文分配给系统上的所有文件。

安装 SELinux 用户空间

下一个步骤是安装将以文本形式编写的 SELinux 策略编译成内核所需要的二进制格式的代码,以及一个对根文件系统进行标记的程序。源代码可以使用清单 6 所示的代码通过 CVS 从 SourceForge 上获得:

清单 6. 得到 SELinux 用户空间源代码

su
mount -oloop,offset=32256 $ORIG/gentoo.img /mnt
cd /mnt/usr/src
cvs -z3 -d:pserver:anonymous@cvs.sf.net:/cvsroot/selinux co -P \
nsa/selinux-usr


将纯文本策略拷贝到磁盘映像文件上,方法如下:

cp -r $ORIG/mdp /mnt/usr/src

进入 nsa/selinux-usr 目录,并编译 libsepol、checkpolicy、libselinux 和 policycoreutils,方法如下:

清单 7. 编译 SELinux 用户空间代码

chroot /mnt
cd /usr/src/nsa/selinux-usr/
cd libsepol/
make && make install
cd ../libselinux/
make && make install
cd ../checkpolicy/
make && make install
cd ../policycoreutils/
make && make install


如果在上一个步骤中碰到了错误,请确保所需要的 setfiles 都已经安装了,方法如下:

清单 8. 安装 setfiles

cd setfiles
make
make install


现在,要编译策略,请使用 checkpolicy 程序,方法如下:

清单 9. 编译 SELinux 策略

cd /usr/src/mdp
checkpolicy -o policy.bin policy.conf
cp policy.bin /etc/
exit  # exit chroot
exit  # exit root shell


重新对文件系统进行标记需要引导进虚拟机中。记住现在要指定 -p 选项,这样 /sbin/init 就不会加载 SELinux 策略:

qemu -hda gentoo.img -kernel bzImage -append "ro root=/dev/hda1 -p"

SELinux 是通过自己的文件系统 selinuxfs 来与用户空间的程序进行交互的。用户空间程序期望它被挂载到 /selinux 上。创建 /selinux 目录,并对文件系统重新进行标记,方法如下:

清单 10. 重新标记文件系统

mkdir /selinux
cd /usr/src/mdp
setfiles file_contexts /
poweroff


最后,您可以在 SELinux 下重新启动机器了!

qemu -hda gentoo.img -kernel bzImage -append "ro root=/dev/hda1"

学习 SELinux 策略

SELinux 是基于为进程、文件和其他对象所分配的安全上下文来制定访问决策的。SELinux 为查询这些上下文并对它们进行设置(假设有所需的访问权限)提供了接口。例如,SELinux 通过 procattr 接口来报告进程的上下文。如果输入:

cat /proc/$$/attr/current

就会看到当前进程($$)的上下文。通过使用脚本 pidctx.sh(请参见后文 下载 一节中的 zip 文件),我们可以简单地查看系统中所有进程的上下文。这个脚本会简单地打印系统上每个进程的 /proc/<pid>/attr/current 文件的内容。

SELinux 使用扩展属性来保存文件的内容。Linux 中大部分永久文件系统(ext2、ext3、jfs、xfs 等)都可以支持扩展属性,而 reiserfs 是一个不幸的例外。这些是一些 (name, value) 的数据对,与 inode 关联在一起,其中名字被周期性地划分成名称空间。SELinux 扩展属性在安全性名称空间中,是由 “selinux” 来标识的,因此完整的 xattr 值应该是 “security.selinux”。新的系统调用集允许用户空间查询并设置扩展属性。用来对 xattr 进行查询的系统调用是 getxattr(2)。它接受一个文件名、一个属性名、一个缓冲区(xattr 的返回值就保存在这里)以及所提供的缓冲区的大小作为参数。

showctx.c 文件简单地运行作为命令行提供的所有文件名,并打印 security.selinux 扩展属性的值,这假设它是存在、可读的,并且具有合适的大小。

我们可以从后文 下载 一节的 zip 文件中获得 showctx.tar.gz 文件,并从中解压出 showctx.c 文件。然后将其放入 QEMU 机器。一种方法是关闭 QEMU 映像,然后执行下面的命令:

清单 11. 安装 showctx

(su)
mount -oloop,offset=32256 $ORIG/gentoo.img /mnt
cp showctx.c /mnt/usr/src
umount /mnt
exit


现在如果 QEMU 没在运行,就启动它。要编译 showctx,请输入:

gcc -o showctx showctx.c cp showctx /bin/

现在可以输入:

showctx / /tmp /home /root /usr/src

当然,对每个文件我们都会看到相同的内容。下一节会通过增强策略来让这变得更加有趣。


使用 SELinux 策略

秘密类型

现在可以创建一个秘密目录 /secret,SELinux 应该不允许其他进程在这个目录下面读取数据。实际上我们可以先在这个目录中创建一个目录和几个文件:

mkdir /secret echo "hello, world" > /secret/helloworld echo "You can't see me" > /secret/dontlook

在 SELinux 策略中,现在创建一个新类型 secret_t,其他类型 base_t 无权访问它。首先,我们可以将下面的内容:

type secret_t;

添加到 policy.conf 中的 base_t 声明之后来定义这个类型。另外,由于 secret_t 类型的文件都是角色 base_r 的,而角色 base_r 必须要允许与 secret_t 关联在一起。因此刚才添加的这行代码要读取:

role base_r types { base_t };

对其进行编辑,使其读取:

role base_r types { base_t secret_t };

现在,要重新编译这个策略,请输入:

checkpolicy -o policy.bin policy.conf
cp policy.bin /etc/



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页 1 2 34 下一页

上一篇:Bash 实例-探讨Gentoo ebuild系统   下一篇:新手安装Xentoo(Xen+Gentoo)的极速体验
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
· Gentoo 下LAMP 的安装和配置

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。