首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

从头开始生成 SELinux(1)

从头开始生成 SELinux(1)

简介SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制 (MAC)系统。对于目前可用的 Linux 安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。有关这些主题的更多信息的链接,请参见本文后面的  部分。
大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
如果您与很多用户一样希望让系统与以前一样工作,但是要求安全性更好一些,那么可以通过使用一些熟悉的应用程序或者通过使用高级语言编写安全策略来查询和操作 SELinux。然而,在出现问题时 —— 例如内核和用户空间的内容不同步 —— 这些方法就不够了。另外,这些方法还可能会干扰 UNIX® 工程师理解 SELinux 实际上是如何工作的。最后,工程师和安全社区应该明白除了目前发行版所使用的方法之外,还有其他一些方法可以使用 SELinux。
在本文中,我们将学习如何将一个最初根本不能支持 SELinux 的系统转换成一个强制使用 SELinux 的系统。我们还将学习如何强制采用一些安全访问策略。
前提条件要开始学习本文,您需要:
  • QEMU,一个免费且易于使用的处理器模拟器。这是一种很好的体验新内核或系统映像的方法,而不会对真实系统造成任何损坏。我们可以从  下载 QEMU。
  • Gentoo,一个基于源代码的 Linux 发行版。Gentoo 对于本练习来说非常理想,因为我们可以在一个运行的系统上安装 Gentoo,而不用管发行版是什么。我们可以在  找到最新的版本。
输入下面的命令,创建一个磁盘映像文件:
qemu-img create -f raw gentoo.img 2G
下一个步骤是启动 QEMU 来对裸磁盘映像文件进行分区,并格式化一个分区。这需要某种 Linux 引导 CD。Knoppix 可以实现这种功能,Gentoo liveCD 也可以实现这种功能。我们可以从下面的地址下载 Gentoo liveCD:
wget ftp://ftp.gtlib.cc.gatech.edu/pu ... /current/installcd/ install-x86-minimal-2006.0.iso
为了将来引用方便 —— 少输入几个字符 —— 您可能会希望对这个映像文件重新命名:
mv install-x86-minimal-2005.1.iso gentoo.iso
下面的命令会通知 QEMU 使用 gentoo.iso 作为自己的 CD,它使用 gentoo.img 作为自己的硬盘,并从 CDROM 开始引导:
qemu -hda gentoo.img -cdrom gentoo.iso -boot d
对于默认内核来说,我们只需要按回车键即可。然后输入下面的内容对磁盘映像文件进行分区:
清单 1. 对磁盘映像文件进行分区
1
2
3
4
5
6
fdisk /dev/hda
n
p
1
(return)
w




以上命令会创建一个新 (n) 主 (p) 分区,它从块 1 (1) 开始,到默认的末尾块(文件系统上的最后一个块)结束。然后将新的分区表写入 (w) 磁盘映像文件。
现在,我们将返回到 QEMU 中的 shell 提示符。现在输入:
mksf.ext2 /dev/hda1
为了给 udev 一个机会来创建设备,我们可能需要执行这个命令两次。然后,通过输入下面的命令关机:
poweroff
这会返回真实系统的 shell。如果没有返回,或挂起了很长时间,请按 Ctrl-c 键结束。
下一个步骤是将基本的发行版安装到磁盘映像文件上。Gentoo 非常适合本练习的原因是我们可以下载并提取出一个 “步骤 3” 映像文件,这样我们就可以获得一个功能完备的 Gentoo 系统。我们应该要找一个本地映像站点来下载一个步骤 3 的 tarball。如果您离 Sandia National Laboratories 很近,就可以使用下面这个示例站点:
wget ftp://mirror.iawnet.sandia.gov/p ... x86/current/stages/   stage3-x86-2006.0.tar.bz2
这个文件包含了一个完整 Gentoo 系统的压缩文件。要将这个系统提取到我们的磁盘映像文件上,首先要将磁盘映像文件挂载到系统中。下面这个命令用来挂载这个空文件系统,并将 tarball 展开到这个磁盘映像上。
清单 2. 将 Gentoo tarball 展开到磁盘映像上
1
2
3
4
5
su  (give root password)
ORIG=`pwd`
mount -oloop,offset=32256 gentoo.img /mnt
cd /mnt
tar jxf $ORIG/stage3-x86-2005.1.tar.bz2




当这个映像挂载到系统上时,需要注意几个基本的问题。/etc/fstab 文件告诉系统要将文件系统挂载到什么地方。对于这个简单的系统来说,不需要引导或交换项。下面的命令用来删除这些设置,并为根分区插入一个正确的项。它还会为 root 用户设置密码。请确保在运行 passwd 命令时,选择一个可以记住的密码。安全性对于这个玩具系统来说不是什么关键,因此使用 “password” 作为密码就可以了。
清单 3. 系统基本设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mv /mnt/etc/fstab /mnt/etc/fstab.orig
sed -e '/[BR]OOT/d' -e '/SWAP/d' /mnt/etc/fstab.orig > \
   /mnt/etc/fstab

cat >> /mnt/etc/fstab << EOF
/dev/hda1 / ext2 noatime 0 1
EOF

chroot /mnt
passwd
exit

cd $ORIG
umount /mnt




要启动 QEMU 映像文件,就必须使用内核。现在我们可以启用 SELinux 的支持来编译 Linux 内核了,尽管您可能并不知道自己正在使用 SELinux。从 kernel.org 下载 linux-2.6.14.tar.bz2(或更新版本)的一个拷贝,并将其解压:
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2
tar jxf Linux-2.6.14.tar.bz2
然后,切换到 Linux-2.6.14 目录,并对内核进行配置,如下所示:
cd linux-2.6.14
make defconfig
make menuconfig
确保至少启用以下选项:
清单 4. 内核 .config 文件节选
1
2
3
4
5
6
7
8
9
10
11
12
13
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_SECURITY=y

CONFIG_SECURITY=y
CONFIG_SECURITY_CAPABILITIES=y
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1




现在使用下面的命令来编译内核:
make
cp arch/i386/boot/bzImage ..
当然,在转换到 SELinux 之前,我们首先需要对系统进行测试。这可以使用下面的命令来实现:
qemu -hda gentoo.img -kernel bzImage -append "ro root=/dev/hda1"
四处浏览一下,添加几个用户,在系统中玩耍一阵。完成之后,使用 poweroff 命令关闭系统。现在,我们已经准备好将这个系统转换成 SELinux 了。
返回列表