SELinux 是美国国家安全局对于强制访问控制的实现,是 Linux? 上最杰出的新安全子系统。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也能够作为其他发行版上容易安装的包得到。本文将向您展示如何手工转换一个非 SELinux 的系统,目的是展示 SELinux 是如何集成到系统中的。

简介

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 下载页面 下载 QEMU。
* Gentoo,一个基于源代码的 Linux 发行版。Gentoo 对于本练习来说很理想,因为我们能够在一个运行的系统上安装 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/pub/gentoo/releases/x86/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. 对磁盘映像文档进行分区

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/pub/gentoo/releases/x86/current/stages/stage3-x86-2006.0.tar.bz2

这个文档包含了一个完整 Gentoo 系统的压缩文档。要将这个系统提取到我们的磁盘映像文档上,首先要将磁盘映像文档挂载到系统中。下面这个命令用来挂载这个空文档系统,并将 tarball 展开到这个磁盘映像上。

清单 2. 将 Gentoo tarball 展开到磁盘映像上

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. 系统基本配置

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(或更新版本)的一个拷贝,并将其解压:

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!