跳转到内容

Grsecurity/应用程序特定设置

来自 Wikibooks,开放世界中的开放书籍
Grsecurity
RBAC 系统 应用程序特定设置 报告错误


此页面列出了需要特定设置才能与 grsecurity 和 PaX 协同工作的应用程序。如果你想将应用程序添加到列表中,我们非常欢迎你这样做。请按字母顺序排列列表,并记住更新首页上的目录。


ATI Catalyst (fglrx) 图形驱动程序

[编辑 | 编辑源代码]

使用 Xorg 和专有 ATI Catalyst 图形驱动程序时,CONFIG_PAX_USERCOPY 不得设置,因为 PAX_USERCOPY 会阻止 ATI 驱动程序中发生真实的溢出,而该溢出仍然未修复。这补充了下面关于 Xorg 的部分内容。


从 11.8 版开始,CONFIG_PAX_MEMORY_UDEREF 也必须禁用。

cPanel jailshell

[编辑 | 编辑源代码]

由于 cPanel 的 jailshell 需要在 chroot 后挂载文件系统(包括绑定挂载),因此 chroot_caps(由于需要 CAP_SYS_ADMIN)和 chroot_deny_mount 都需要禁用。为此,请在内核配置中禁用相应的选项(CONFIG_GRKERNSEC_CHROOT_CAPS 和 CONFIG_GRKERNSEC_CHROOT_MOUNT),或者在启用 GRKERNSEC_SYSCTL 时在 init 脚本中禁用它们。使用以下命令

echo 0 > /proc/sys/kernel/grsecurity/chroot_caps
echo 0 > /proc/sys/kernel/grsecurity/chroot_deny_mount

我们将与 cPanel 开发人员合作,看看是否可以在将来的 jailshell 版本中避免对这种变通方法的需求。

Firefox (或 Debian 中的 Iceweasel)

[编辑 | 编辑源代码]

Mozilla Firefox 以及可能所有或部分(?) 位于 Firefox 二进制文件(称为 /usr/lib/firefox/firefox)所在的文件夹 (/usr/lib/firefox) 中的 lib.so 文件需要mprotect禁用,才能使flash 工作。如果 Firefox 二进制文件没有禁用mprotectFirefox 会在启动时进入无限循环,或者需要几分钟才能加载。如果没有禁用 lib.so 文件的mprotect任何遇到 Flash 的页面都肯定会运行无限循环,并且必须杀死 Firefox 进程。

必须为xulrunner-stubxulrunner-bin 的某些脚本的即时编译禁用该选项。有关更多详细信息,请参阅 Grsecurity 论坛。 [1] 最安全的选择当然是对mprotect并抵制使用即时 (JIT) Flash 脚本的网站。你可以在浏览器中禁用 JIT 编译,方法是启动地址 about:config,在页面的集成搜索栏中搜索“jit”,然后双击选项“javascript.options.methodjit.chrome”和“javascript.options.methodjit.content”以将它们设置为“false”。

Firefox >= 3.5 可能需要RANDMMAP禁用 (),否则它将在启动时进入无限循环。要禁用,请执行paxctl -r /firefox_binary. 通常,该二进制文件位于/usr/lib64/*firefox* 中。有关更多详细信息,请参阅http://bugs.gentoo.org/show_bug.cgi?id=278698。至少在基于 Ubuntu 的发行版上的 Firefox 13 中,你可以启用RANDMMAP.

Google Chrome 15.0.874.106

[编辑 | 编辑源代码]

在 Google Chrome 上

$ paxctl -v /opt/google/chrome/chrome
PaX control v0.5
Copyright 2004,2005,2006,2007 PaX Team <[email protected]>
- PaX flags: P----m-x-eR- [/opt/google/chrome/chrome]
	PAGEEXEC is enabled
	MPROTECT is disabled
	RANDEXEC is disabled
	EMUTRAMP is disabled
	RANDMMAP is enabled

$ paxctl -v /opt/google/chrome/nacl_helper
PaX control v0.5
Copyright 2004,2005,2006,2007 PaX Team <[email protected]>
- PaX flags: -p---m-x-e-- [/opt/google/chrome/nacl_helper]
	PAGEEXEC is disabled
	MPROTECT is disabled
	RANDEXEC is disabled
	EMUTRAMP is disabled

$ paxctl -v /opt/google/chrome/chrome-sandbox 
PaX control v0.5
Copyright 2004,2005,2006,2007 PaX Team <[email protected]>
- PaX flags: -----m-x-e-- [/opt/google/chrome/chrome-sandbox]
	MPROTECT is disabled
	RANDEXEC is disabled
	EMUTRAMP is disabled

这些 PaX 标志在我的系统上与 flash 配合得很好。但是,Chrome 的 nacl 会抛出这个

[1:1:14105440733:ERROR:nacl_fork_delegate_linux.cc(78)] Bad NaCl helper startup ack (0 bytes)

Grub 使用嵌套函数,因此需要在内核中启用 PAX_EMUTRAMP 并在受影响的二进制文件中启用 EMUTRAMP,或者如果在内核中未启用 PAX_EMUTRAMP,则需要在受影响的二进制文件中禁用 MPROTECT。根据使用的 grub 版本,以下某些文件可能不存在,但你应该标记所有存在的文件。要添加 EMUTRAMP,请对 paxctl 使用“-CE”参数。要删除 MPROTECT,请使用“-Cm”。

/usr/bin/grub-script-check
/usr/sbin/grub-probe
/usr/sbin/grub-mkdevicemap

GUFW/UFW 防火墙或更新管理器

[编辑 | 编辑源代码]

GUFW 是 Ubuntu 防火墙 (UFW) 的可选图形应用程序界面,两者都使用 Python。更新管理器是用于更新软件包的 GNOME 应用程序,它也依赖于 Python。实际上,任何使用 Python 的应用程序都尝试为你的受影响程序(GUFW 或更新管理器)的依赖项 Python 版本启用 EMUTRAMP。(例如:# paxctl -E /usr/bin/Python2.7)。

Ioquake3 需要禁用 mprotect 限制才能正常运行。

ISC DHCP 服务器

[编辑 | 编辑源代码]

注意:截至 2014 年 5 月 4 日发布的 grsecurity 补丁不再需要以下修改

在某些系统上,升级到启用了 grsecurity 的内核(启用了 GRKERNSEC_PROC_USERGROUP)后,内核日志可能会被以下内容淹没

init: isc-dhcp-server main process ended, respawning
init: isc-dhcp-server main process (pid) terminated with status            1

这可能是由于非特权用户无法访问 /proc/net/dev 造成的,因为 dhcpd 需要该访问权限。你可以通过在命令行中运行dhcpd -f 来确认,这应该会显示以下错误

Error opening '/proc/net/dev' to list interfaces

要解决此问题,请在你的内核配置中搜索 CONFIG_GRKERNSEC_PROC_GID,然后如果/etc/group 中不存在该 gid 的组,请添加一个组。然后将 dhcpd 添加到该组。添加的行将类似于

procview:x:1001:dhcpd

由于 DHCP 服务器一直在尝试重新生成,因此在进行此更改后,你应该发现它正在正常运行。

使用 epoll 堆栈跟踪查找存在问题 [2]。另外,即时编译也存在问题。禁用mprotect对于/usr/lib/jvm/java-6-sun-1.6.0.10/jre/bin/java/usr/lib/jvm/java-6-sun-1.6.0.10/jre/bin/javaws

Nagios 需要能够查看系统上的所有进程,以便准确地描述服务状态和性能统计信息。因此,它必须使用你配置的 CONFIG_GRKERNSEC_PROC_GID 组运行,或者使用grsec_proc_gid内核命令行选项设置的组运行。

Node.js 需要在运行时执行任意代码。为了允许这样做,mprotect需要禁用。在大多数系统上,可以使用以下命令完成此操作

paxctl -Cm /usr/bin/nodejs

注意:对于某些应用程序(例如 electron),你将需要为 electron 和 nodejs 可执行文件禁用 mprotect

Openoffice.org

[编辑 | 编辑源代码]

Openoffice.org 使用两个需要自定义设置才能工作的二进制文件。 /usr/lib/openoffice/program/soffice.bin/usr/lib/openoffice/program/unopkg.bin 都需要不受限制的mprotect. [3]

libreoffice.org

[编辑 | 编辑源代码]

与 openoffice.org 相同,但 libreoffice.org 需要不受限制的mprotect对于

/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 才能正常工作,如果你使用的是 libreoffice-base: Database。

PHP 和其他设置自身资源限制的应用程序

[编辑 | 编辑源代码]

虽然 Apache/PHP 在启用 grsec/PaX 内核的情况下运行良好,但你可能会觉得 PHP 在启用 SEGMEXEC 标志的 PaX 内核下存在潜在的内存泄漏或奇怪的 OOM(内存不足)错误。 没有内存泄漏,OOM 错误是正常的,尤其是在你没有设置足够高的资源限制的情况下。

关于 PHP 和启用 SEGMEXEC 标志导致的“异常”内存使用,请参阅 spender 在 http://bugs.php.net/bug.php?id=49501 评论中的答案

"Due to VMA mirroring, the SEGMEXEC option causes accounted vm usage to double.  So you weren't 
experiencing a memory leak -- you were just being accounted for twice as much memory as you 
thought you were using. The solution would be to double the resource limit or, if your system
is NX-capable and PAE is enabled, use PAGEEXEC."

X.org 在配置期间可能需要一些特定的内核设置(取决于硬件和使用的驱动程序,X 在没有可执行页面的情况下(PAX_NOEXEC)无法运行)。 这个问题尤其体现在 XFree4 中。 不过,已知 X.org 的最新版本可以在启用不可执行页面后正常工作。 如果你在 X 中遇到问题,请注意你的不可执行设置。

一些用户在系统负载高时遇到鼠标冻结问题。 通常鼠标指针会重置,但会停留在屏幕的左上角。 此行为被发现与某些抢占设置有关 [4][5]。 似乎是强制抢占和 KERNEXEC 之间的交互。 只要禁用抢占或使用自愿抢占,你就可以重新启用 KERNEXEC。

根据 Pax 团队的说法,KERNEXEC 应该可以正常工作,因为更改应该只是基本函数,比如打开/关闭函数。 如果你遇到问题,请切换到自愿抢占或无抢占。


下一页: 报告错误 | 上一页: RBAC 系统
首页: Grsecurity
华夏公益教科书