Grsectory 配置
使用grsecurity修补内核,内核源代码存档名为linux-3.2.50.tar,匹配的grsecurity补丁grsecurity-2.9.1-3.2.50-201308052151.patch。 两个文件都在同一目录中。切换到root用户并在下载文件的目录中运行如下命令。 第一个命令解压缩Linux源包,第二个命令将补丁应用于内核。 您可能须要使用首选的包管理工具安装补丁程序。linux
# tar -xf linux-3.2.50.tar
# cd linux-3.2.50
# patch -p1 < ../grsecurity-2.9.1-3.2.50-201308052151.patch
内核配置
内核源代码包有一个通用配置文件,该文件无需任何重大修改便可运行。 发行版可能有本身的流程和工具来配置和构建内核,在这种状况下,应该查阅相关文档。 尽管如此,检查选项并的硬件和当前设置相匹配。
使用默认配置做为基础配置内核,在/usr/src/linux-3.2.50目录下,执行如下命令。
$ make menuconfig
因为缺乏软件包和库 - 按照错误消息进行指导。将启动交互式内核配置菜单。 在3.x和2.6中,grsecurity选项位于安全选项:Grsecurity下。 能够在Grsecurity和PaX配置选项页面上在线查每一个选项及其对系统的影响的详细说明,也可使用内核配置系统的内置帮助功能。 在启用或禁用选项以前,请确保了解选项。 退出配置菜单后,能够从新运行“make menuconfig”再次启动它。
建议你先“配置方法”选项设置为“自动”,载配置“使用类型”和其余选项以知足环境和需求。 能够在“自定义配置”中微调全部grsecurity和PaX设置。正则表达式
启用sysctl接口(Grsecurity»自定义配置到Sysctl支持)。 使你能够更改grsecurity运行的选项,而无需从新编译内核。 这是一个很是有用的功能,尤为是当您第一次使用grsecurity时。 “配置方法 - 自动”默认启用此功能。
一些审计选项会产生大量日志消息,最明显的是Exec和Chdir日志记录(分别为GRKERNSEC_EXECLOG和GRKERNSEC_AUDIT_CHDIR)。 若是启用其中任何一个,请确保正确配置日志记录系统以防止日志泛滥。 注意检查Grsecurity»自定义配置»日志选项。
启用sysctl接口(Grsecurity»自定义配置到Sysctl支持)。 能够更改grsecurity运行的选项,而无需从新编译内核。 这是一个很是有用的功能,尤为是当您第一次使用grsecurity时。 “配置方法 - 自动”默认启用此功能。算法
一些审计选项会产生大量日志消息,最明显的是Exec和Chdir日志记录(分别为GRKERNSEC_EXECLOG和GRKERNSEC_AUDIT_CHDIR)。 若是启用其中任何一个,请确保正确配置日志记录系统以防止日志泛滥。 注意检查Grsecurity»自定义配置»日志选项。shell
编译和安装
在alipine系统下:注意确保你的gcc库符合要求。
make *.deb -f
在编译grsecurity修补内核补丁程序时,会看到一些差别。 其中一个差别出如今编译结束时,可能相似于:
WARNING: modpost: Found 2820 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
这个
警告是无害的。 正如grsecurity邮件列表上的PaX团队所描述的那样:
the extra section mismatches are due to my changes, i explicitly
added detection for writeable function pointers which are potential
exploit targets, just to know how many of them there are. we've been
eliminating some of them already but this work will never finish.
as for what they are in general, a mismatch means an unwanted reference
from one section to another. say, accessing init code or data from
normal code/data is not good since init sections are freed up on boot,
so any reference to them must not exist from permanent sections.
从NVIDIA网站下载NVIDIA驱动程序.run文件。
从https://grsecurity.net/~spender/nvidia-drivers-352.09-pax.patch下载适用的NVIDIA驱动程序的PaX补丁
运行
sh <NVIDIA .run文件名> -x
cd`basename <NVIDIA .run文件的名称> .run`
patch -p1 <../nvidia-drivers-352.09-pax.patch
经过运行./nvidia-installer安装的驱动程序。
Grsectory 管理编程
下载gradm和grsecurity以前的版本。 在本文档中,压缩包的名称为gradm-3.1-201503211320.tar.gz。 解压缩包并经过执行如下命令切换到gradm目录: 安全
$ tar xzf gradm-3.1-201503211320.tar.gz
$ cd gradm网络
PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它经过提供一些动态连接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员能够灵活地根据须要给不一样的服务配置不一样的认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。app
Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。 这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,
Yacc 表明 Yet Another Compiler Compiler。 Yacc 的 GNU 版叫作 Bison。它是一种工具,将任何一种编程语言的全部语法翻译成针对此种语言的 Yacc 语 法解析器。它用巴科斯范式(BNF, Backus Naur Form)来书写。按照惯例,Yacc 文件有 .y 后缀。编译行以下调用 Yacc 编译器:
Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器均可以指定为 Flex 布局。行内元素也可使用 Flex 布局。
GNU
bison是一个自由软件,用于自动生成语法分析器程序,实际上可用于全部常见的操做系统。Bison把LALR形式的上下文无关文法描述转换为可作语法分析的C或C++程序。在新近版本中,Bison增长了对GLR语法分析算法的支持。GNU bison基本兼容Yacc,并作了一些改进。它通常与flex一块儿使用。
注意:查看make的输出。 确保在末尾附近没有看到“没法检测PAM标头,禁用PAM支持”的行。 若是这样作,请安装PAM头文件并再次运行make命令。
要在没有PAM支持的状况下安装gradm,请运行:
$ make nopam
最后, 用 root, run:
# make install
gradm和grlearn程序安装到/ sbin。
建立目录/ etc / grsec及其中的两个文件(若是它们尚不存在):learn_config和policy。
将gradm的手册页安装到/ usr / share / man / man8。(grlearn没有手册页。它由gradm内部使用。)
注意第一次在系统上安装gradm,则会要求提供RBAC系统的管理密码。 选择一个长密码,从initscript【初始化】开始gradm)。 不要使用与root相同的密码。
修改Makefile,更改任何二进制或手册页位置,
# gradm --help
gradm 3.1
grsecurity RBAC administration and policy analysis utility
Usage: gradm [option] ...
Examples:
gradm -P
gradm -F -L /etc/grsec/learning.logs -O /etc/grsec/policy
Options:
-E, --enable
Enable the grsecurity RBAC system
-D, --disable
Disable the grsecurity RBAC system
-C, --check
Check RBAC policy for errors
-S, --status
Check status of RBAC system
-F, --fulllearn Enable full system learning
-P [rolename], --passwd
Create password for RBAC administration
or a special role
-R, --reload
Reload the RBAC system while in admin mode
Reloading will happen atomically, preserving
special roles and inherited subjects(主题)
-r, --oldreload Reload the RBAC system using the old method that
drops existing special roles and inherited subjects(主题)
-L <filename>, --learn
Specify the pathname for learning logs
-O <filename|directory>, --output
Specify where to place policies(策略) generated from
learning mode. Should be a directory only if
"split-roles" is specified in learn_config and
full-learning(全面学习) is used.
-M <filename|uid>, --modsegv(恶意、恐怖含义)
Remove a ban on a specific file or UID
-a <rolename> , --auth
Authenticates to a special role that requires auth(认证模块)
-u, --unauth Remove yourself from your current special role
-n <rolename> , --noauth
Transitions to a special role that doesn't
require authentication(认证)
-p <rolename> , --pamauth
Authenticates to a special role through PAM
-V, --verbose Display verbose (详细)policy statistics when enabling system
-h, --help
Display this help
-v, --version
Display version and GPLv2(开源许可) license information
学习模式
学习模式与其余安全系统中的任何内容都不一样。 Grsecurity的学习模式能够在每一个主题或每一个角色的基础上使用,也能够在系统范围内使用。在单个进程或角色上使用学习模式时,系统的其他部分将保持受策略定义的保护。学习模式能够学习RBAC系统支持的全部内容:文件,功能,资源,每一个角色使用的IP地址以及套接字使用状况。学习系统能够智能地减小文件系统和网络访问,从而减小策略规模,提升可读性,并减小之后须要的手动调整量。此外,学习系统强制实施可配置的安全基础。 / etc / grsec / learn_config文件使管理员可以指定学习系统应被视为受保护资源的文件/目录。学习系统将确保不管是否执行任何规则缩减,只有经过正常使用访问这些受保护资源的进程才会经过生成的策略授予访问权限。此外,它将为访问受保护资源的进程建立新主题,建立授予这些进程额外保护的权限边界。编程语言
完整的系统学习
使用以root身份运行gradm:
#gradm -F -L /etc/grsec/learning.logs
将启用基于角色的访问控制(RBAC)系统并启动完整的系统学习。 gradm监视并记录系统所作的事情。 用该日志为系统构建最小权限策略。运行和使用执行的应用程序次数。 由于学习模式使用基于阈值的系统来肯定什么时候应该对文件进行访问,或者是否应该将其提供给目录。 若是在单个目录中进行了四次或更屡次相似访问(例如写入/ tmp中的多个文件),则授予该目录而不是单个文件的访问权限。 这样能够减小拥有规则数量,并确保编译完最终ACL后应用程序能够正常工做。
启用完整系统学习时,以管理员角色执行任何管理任务。
在启用完整系统学习的同时执行管理任务,请使用如下命
#gradm -a admin
完成执行管理任务后,请记住退出shell或使用gradm -u从admin角色取消认证。
让系统正常使用它在现实中获得的,用gradm -D禁用RBAC系统。 禁用RBAC是必要的步骤,由于它强制学习守护进程将其缓冲区刷新到磁盘。 使用在RBAC被禁用以前得到的学习日志将产生不完整的结果。 禁用RBAC后,执行:
#gradm -F -L /etc/grsec/learning.logs -O / etc / grsec / policy
这将会给新学习的ACL放在规则集的末尾。 您能够经过启用grsecurity(运行gradm -E)并确保全部应用程序按照预期的方式运行来测试策略。工具
进程和基于角色的学习
学习模式很是简单。 要作的就是将“l”(小写字母L,而不是数字1)添加到过程的主题模式,启用学习。 了解还没有创建策略,并给定二进制文件的全部必要访问权限,请添加如下主题:
subject /path/of/binary ol
/ h
-CAP_ALL
connect disabled
bind disabled
要了解给定角色,请在角色模式中添加“l”。 对于这二者,要启用学习,请经过执行如下命令启用系统:
#gradm -L /etc/grsec/learning.logs -E
完成后,使用gradm -D禁用ACL系统(或者,使用gradm -a进入管理模式),并使用:
#gradm -L /etc/grsec/learning.logs -O / etc / grsec / policy
这会将新学习的ACL放在规则集的末尾。 只需删除旧ACL,便可开始使用。
/ etc / grsec / learn_config
此配置文件经过调整特定文件和目录的学习算法来帮助学习过程。它接受如下形式的行:
<command> <pathname>
其中
<command>能够是i
nherit-learn,no-learn,inherit-no-learn,high-reduce-path,dont-reduce-path,protected-path,high-protected-path和always-reduce-path。分别是:继承 - 学习,不学习和继承 - 不学习等,会影响完整的系统学习,而其余学习则适用于全部学习模式。至于含义去查看文档。
inherit-learn将路径名中包含的进程执行的每一个二进制文件的全部学习访问权限,抛出给路径名指定的主题中,以便更改指定路径的学过程。这对于完整系统学习的状况下的cron很是有用,所以最终以特权方式执行mv或rm的脚本,而不会致使根策略的全部状况,都将特权授予mv或rm。
no-learn容许路径内的进程执行正常系统使用容许的任何操做而不受限制。若是进程生成大量学习日志,则最好在该进程上使用此命令并手动配置其策略。
inherit-no-learn结合了上述两种状况,使得指定路径中的进程可以无限制地执行任何正常的系统操做,这些进程执行的任何二进制文件也是如此。
high-reduce-path修改了学习过程的启发式,有利于减小对此路径的访问。
dont-reduce-path修改学习过程的启发式,以便永远不会减小对此路径的访问。
always-reduce-path修改学习过程的启发式,以便指定的路径始终将其中的全部文件和目录减小到指定的路径。
protected-path指定系统上被视为重要资源的路径。修改这些路径之一的任何过程在学习过程当中都有本身的主题,从而促进了安全策略。
read-protected-path指定系统上包含敏感信息的路径。读取这些路径之一的任何过程在学习过程当中都有本身的主题,从而促进了安全策略。
high-protected-path指定应该从全部进程中隐藏的路径,可是直接访问它的路径。建议对此命令使用高度敏感的文件。
请注意,此配置文件中的路径名不支持正则表达式。