跳轉到內容

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 <pageexec@freemail.hu>
- 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 <pageexec@freemail.hu>
- 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 <pageexec@freemail.hu>
- 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
華夏公益教科書