從PaX網站http://pax.grsecurity.net/下載最新版本。 在咱們的例子中,咱們下載了paxctl-0.7.tar.bz2。 Paxctl包未簽名。 切換到下載程序包的目錄並運行如下命令。
$ tar xjf paxctl-0.7.tar.bz2
$ cd paxctl-0.7
$ make
$ su
# make install
完成:linux
將paxctl程序安裝到/ sbin。
將paxctl的手冊頁安裝到/ usr / share / man / man1。
若是須要更改其中任何一個位置,請修改Makefile。
用法:api
# paxctl --help
PaX control v0.7
Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <pageexec@freemail.hu>
usage: paxctl <options> <files>
options:
-p: disable PAGEEXEC -P: enable PAGEEXEC
-e: disable EMUTRAMP -E: enable EMUTRAMP
-m: disable MPROTECT -M: enable MPROTECT
-r: disable RANDMMAP -R: enable RANDMMAP
-x: disable RANDEXEC -X: enable RANDEXEC
-s: disable SEGMEXEC -S: enable SEGMEXEC
-v: view flags -z: restore default flags
-q: suppress error messages -Q: report flags in short format
-c: convert PT_GNU_STACK into PT_PAX_FLAGS (see manpage!)
-C: create PT_PAX_FLAGS (see manpage!)
PAGEEXEC 內核將根據CPU的分頁功能保護不可執行的頁面。 在其餘操做系統中,這有時稱爲「使用NX位標記頁面」。 能夠經過PaX -P和-p標誌在每一個ELF對象的基礎上控制此功能。app
EMUTRAMP
對於須要它們的進程,內核將模擬trampolines(即時編寫的可執行代碼片斷),例如: C和一些JIT編譯器中的嵌套函數。 因爲trampolines嘗試將進程自己寫入的代碼執行到PAGEEXEC或SEGMEXEC標記爲不可執行的內存,所以PaX內核會終止。任未嘗試使用它的進程。 EMUTRAMP容許這些進程運行,而無需徹底禁用非可執行內存的強制執行。 能夠經過PaX -E和-e標誌在每一個ELF對象的基礎上控制此功能。
MPROTECT
內核將阻止經過各類技術將新的可執行頁面引入正在運行的進程:它將禁止更改頁面的可執行狀態,或建立匿名RWX映射,或使RELRO數據頁再次成爲可寫。 它基於每一個ELF對象由PaX -M和-m標誌控制。
RANDMMAP
對於沒有經過MAP_FIXED變量指定的mmap()請求,內核將使用隨機化的基址。 它由PaX -R和-r標誌控制。
RANDEXEC 本地用戶容許任何能夠在系統上執行的程序和用目標程序的特權執行任意代碼。
SEGMEXEC PaX中的grsecurity報告了一個漏洞。 本地用戶有得到提高的權限。
樣例
讓咱們查詢爲/ usr / bin / vi啓用了什麼(若是有的話)PaX標誌:
# paxctl -v /usr/bin/vi
PaX control v0.7
Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <pageexec@freemail.hu>
file /usr/bin/vi does not have a PT_PAX_FLAGS program header, try conversion
paxctl沒法顯示標誌,由於vi沒有相應的程序頭。 需轉換標頭並再次查詢標誌。
警告注意,paxctl不會爲其修改的文件製做備份副本。 建議您備份要修改的二進制文件。
# paxctl -c /usr/bin/vi
file /usr/bin/vi had a PT_GNU_STACK program header, converted
# paxctl -v /usr/bin/vi
PaX control v0.7
Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <pageexec@freemail.hu>
- PaX flags: -------x-e-- [/usr/bin/vi]
RANDEXEC is disabled
EMUTRAMP is disabled
使用適當的程序頭,咱們能夠查詢和修改vi的PaX標誌。
顯示程序功能(pspax)
pspax程序顯示您有權訪問的全部程序的運行時功能。 它是pax-utils包的一部分。 Pax-utils能夠在http://dev.gentoo.org/~vapier/dist/找到。 它包含許多用於PaX(https://en.wikipedia.org/wiki/PaX)的有用工具,但不像paxctl那樣重要。pax-utils包由Hardened Gentoo Project維護。
pax-utils包提供的程序
pspax - 顯示您有權訪問的全部程序的運行時功能。ide
scanelf - 打印特定於二進制文件的ELF結構的信息。
dumpelf - 將ELF文件轉換爲人類可讀的C代碼,該代碼定義與原始ELF文件具備相同圖像的結構。
有關更多信息,請參閱pax-utils的Gentoo Linux指南。
安裝函數
從http://dev.gentoo.org/~vapier/dist/下載最新版本。 在咱們的例子中,咱們下載了pax-utils-0.4.tar.xz,這是撰寫本文時
的最新穩定版本。 切換到下載程序包的目錄並運行如下命令。
$ tar xJf pax-utils-0.4.tar.xz
$ cd pax-utils-0.4
$ make
$ su
# make install
安裝過程執行如下操做:
將pspax,scanelf,dumpelf和scanmacho程序安裝到/ usr / bin。
將README,BUGS和TODO文件安裝到/ usr / share / doc / pax-utils /。
將pspax,scanelf和dumpelf的手冊頁安裝到/ usr / share / man / man1。
若是須要更改任何這些位置,請修改Makefile。
用法
要顯示全部可用的命令行開關,請運行pspax --help。 閱讀手冊頁以獲取更多詳細信息。
$ pspax --help
* List ELF/PaX information about running processes
Usage: pspax [options]
Options:
-a, --all * Show all processes
-e, --header * Print GNU_STACK/PT_LOAD markings
-i, --ipaddr * Print ipaddr info if supported
-p, --pid * Process ID/pid #
-u, --user * Process user/uid #
-g, --group * Process group/gid #
-n, --nx * Only display w^x processes
-w, --wx * Only display w|x processes
-W, --wide * Wide output display of cmdline
-v, --verbose * Be verbose about executable mappings
-C, --nocolor * Don't emit color in output
-B, --nobanner * Don't display the header
-h, --help * Print this help and exit
-V, --version * Print version and exit
Pspax將單個節目的PaX標誌顯示爲一串字符(例如「peMRS」)。 小寫字符表示標誌已禁用,大寫表示已啓用。 下面的表格顯示了grsecurity使用的這些字符及其對應的PaX標誌。 「詳細信息」列包含指向每一個標誌的詳細說明的連接。
pspax flag
grsecurity's PaX flag
Details
E
PAX_EMUTRAMP
emutramp.txt
M
PAX_MPROTECT
mprotect.txt
P
PAX_PAGEEXEC
pageexec.txt
R
PAX_RANDMMAP
randmmap.txt
S
PAX_SEGMEXEC
segmexec.txt
例子
命令pspax -p <process_id>顯示有關特定進程的信息,由其PID標識。 您不可能碰巧知道或記住進程的PID,所以更容易經過名稱引用它們。 下面的示例使用pidof命令查找進程的PID,而後將其傳遞給pspax:
# pidof inetd | xargs pspax -p
USER PID PAX MAPS ETYPE NAME CAPS_ATTR
root 1741 peMRS w^x ET_EXEC inetd =ep cap_setpcap-ep
破折號意味着libcrypto不須要可執行堆棧。 若是確實如此,該行將以大寫「X」而不是破折號開頭。
要查詢系統中全部庫的狀態,請運行:
# find /lib /usr/lib -name '*.so.*.*.*' | xargs execstack
sysctl接口
sysctl命令提供用於在運行時修改內核參數的接口。 grsecurity內核配置中有一個選項能夠支持此接口(請參閱配置grsecurity)。在Linux中,sysctl只是文件系統例程的包裝器,用於讀取和寫入/ proc目錄中文件的內容。這意味着您還能夠經過將值回顯到/ proc中的文件來設置參數。有關grsecurity的全部可用sysctl選項的列表,
用法
sysctl命令獲取變量或變量=值對的列表,並設置或讀取它們的值。變量是/ proc / sys中由句點或正斜槓分隔的文件的路徑。該值取決於相關參數。大多數grsecurity的選項是1(啓用)或0(禁用)。
Sysctl的手冊頁可在
http://linux.die.net/man/8/sysctl上在線獲取。
例子
若是您想了解grsecurity的每一個可用運行時選項,請列出/ proc / sys / kernel / grsecurity的內容。
要在單個sysctl命令中啓用裝載審覈和禁用chdir審覈,請運行:
#sysctl kernel.grsecurity.audit_mount = 1 kernel.grsecurity.audit_chdir = 0
kernel.grsecurity.audit_mount = 1
kernel.grsecurity.audit_chdir = 0
能夠經過回顯來實現相同的結果:
#echo 1> / proc / sys / kernel / grsecurity / audit_mount
#echo 0> / proc / sys / kernel / grsecurity / audit_chdir