加固的Gentoo (Hardened Gentoo)

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Hardened Gentoo and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎Nederlands • ‎русский • ‎中文(中国大陆)‎
Resources

"Gentoo Hardened" 是一个 Gentoo 项目,它在现有 Gentoo Linux 安装上提供了多种额外的安全服务。虽然这些服务可以分别单独使用,但是 "Gentoo Hardened" 启用了 toolchain 中几个可以降低被攻击风险的选项,支持 PaX, grSecurity, SELinux, TPE 等等功能。

无论你是运行一台面向互联网的服务器还是一台灵活的工作站,当你面对多种威胁的时候你会更愿意加固你的系统,而不是仅仅自动升级最新的安全补丁。 加固(Hardening) 系统意味着你会采取额外的措施来应对攻击和其他风险,这些措施通常是在系统上执行的一系列活动的组合。

"Gentoo Hardened" 中的几个项目都很活跃,这些项目可以帮助你进一步加固你的 Gentoo 系统,通过:

  • 使能工具链中的特定选项(编译器、链接器...),例如:强制PIE(position-independent executables),堆栈粉碎保护(stack smashing protection)以及编译阶段的缓存检查。
  • 使能Linux内核的PaX扩展,它提供了一些额外的防护方法如随机安排地址空间和不可执行内存。
  • 在Linux内核中使能grSecurity扩展,包括额外的chroot限制,额外的审计,进程限制等。
  • 在Linux内核中使能SELinux 扩展,它提供了一套强制的访问控制系统来增强标准的Linux权限限制。
  • 使能Integrity相关技术,例如完整性评估框架(Integrity Measurement Architecture)用来为系统应对篡改增强弹性。

当然,这还包括了必要的用户工具来管理这些扩展。

切换到“加固的配置文件(Hardened profile)”

选择一个“hardened profile”, 这样“程序包管理”将会以“加固模式”来运行。

root #eselect profile list
root #eselect profile set [加固的配置文件编号]
root #source /etc/profile

通过选择“hardened profile”,某些包管理设置(masks, USE标记等等)会成为系统默认设置,这些设置会应用在很多包上面,包括 toolchain 。 toolchain 用于建立/编译你的程序,包括:GCC(GNU Compiler Collection)、binutils(链接器等)和 glibc(GNU C library)。通过重新编译安装 toolchain,这些新的默认设置将会应用到 toolchain 上面,这会让所有后面的“包编译”都以加固模式来完成。

root #emerge --oneshot gcc
root #emerge --oneshot binutils virtual/libc

上面的命令重建了 GCC,现在可以用它来编译出已加固的软件。确定 GCC 启用了“hardened”选项。

root #gcc-config -l
[1] i686-pc-linux-gnu-4.5.3 *
[2] i686-pc-linux-gnu-4.5.3-hardenednopie
[3] i686-pc-linux-gnu-4.5.3-hardenednopiessp
[4] i686-pc-linux-gnu-4.5.3-hardenednossp
[5] i686-pc-linux-gnu-4.5.3-vanilla

在上面的输出样例中,已加固的 GCC 配置是没有后缀的那个。如果你想关闭 PIE 或者 SSP 功能,选择相应的 hardenedno(pie|ssp) 或者 hardenednopiesspvanilla 配置当然就是关闭了加固功能的 GCC 。最后,让你的新配置生效:

root #source /etc/profile

如果你使用“预链接”的包,删除它,因为它和“hardened profile”不兼容。

root #emerge --depclean prelink

现在你用新的加固后的 toolchain 来重新安装所有的包。

root #emerge --emptytree --verbose @world

安装已加固的内核源代码(hardened kernel sources),这样内核将以加固模式 来管理你运行中的系统(特别是使用 PaX):

root #emerge --ask hardened-sources

现在配置/编译源代码并将内核添加到你的启动管理器(如:GRUB)。

提示与技巧

Hardened Gentoo/Grsecurity chroot

如果你想 chroot 到一个拷贝的环境,其中CONFIG_GRKERNSEC_CHROOT开启了的话,你必须使用 cd grub,并把 root(cd) kernel(cd) initrd(cd) 设置中的 (cd) 换成 (hdx,y)。

现在你可以安装 grub 环境了。

每个包单独的加固设置

警告
该方法 Gentoo 不提供技术支持。

修改 GCC 配置来处理特定的软件包是一件很痛苦的事情。避免这种情况的一个方法是通过使用 package.env 来设置针对单个软件包的 C(XX)FLAGS。创建文件 /etc/portage/env/nossp 并添加以下内容:

FILE /etc/portage/env/nosspDisable SSP
CFLAGS="${CFLAGS} -fno-stack-protector"
CXXFLAGS="${CXXFLAGS} -fno-stack-protector"

允许关闭 PIE, 创建 /etc/portage/env/nopie 并添加如下内容:

FILE /etc/portage/env/nopieDisable PIE
CFLAGS="${CFLAGS} -no-pie"
CXXFLAGS="${CXXFLAGS} -no-pie"
LDFLAGS="${LDFLAGS} -no-pie"
Note
GCC version 4.x uses -nopie instead of -no-pie.

最后,添加你想关闭 PIE 或者 SSP 的软件包到 /etc/portage/package.env 和相关的 /etc/portage/env/<文件名>,下面是针对 sys-libs/zlib 的一个范例:

FILE /etc/portage/package.env对 sys-libs/zlib 关闭 PIE
sys-libs/zlib nopie

另请参阅

查看下列资源以获取更多信息:

外部资源