Grsecurity/管理实用程序
Gradm,基于角色的访问控制系统的管理实用程序,是一个功能强大的工具,可以解析您的 ACL(访问控制列表),执行安全基本策略的强制执行,优化 ACL,以及处理学习日志的解析,将它们与您的 ACL 集合并输出最终的 ACL。
在您安装之前gradm,引导到您的补丁 grsecurity 内核。您可以编译gradm在您想要的任何内核中,但如果内核不支持 grsecurity,安装将失败。
如果您的 Linux 发行版提供现成的 grsecurity 内核包,它们很可能会提供一个包gradm也是。如果是这种情况,您应该考虑在编译之前使用它gradm自己。
在编译和安装之前gradm,确保您在系统中安装了以下应用程序:lex 或 flex 和 byacc 或 bison。如果您需要 可插拔身份验证模块 (PAM) 支持,请安装系统头文件;包含它们的包很可能被称为 libpam-dev 或类似名称。
应该补充一点,如果您在默认的 Linux 内核上编译 gradm,而没有 grsecurity 支持,则编译将失败,并且只有在引导到新的启用 grsecurity 的内核后才能进行编译。
更改到您下载的目录gradm并将 grsecurity 更新到更早的版本。在本文件中,压缩包的名称为 gradm-3.1-201503211320.tar.gz。解压缩包并通过执行以下命令更改到 gradm 目录
$ tar xzf gradm-3.1-201503211320.tar.gz $ cd gradm
要安装gradm带有 PAM 支持,以非 root 用户身份运行
$ make
注意:查看输出make。确保您在末尾附近没有看到一行说“无法检测到 PAM 头文件,正在禁用 PAM 支持”。如果您看到,请安装 PAM 头文件并运行make命令再次。
要安装gradm没有 PAM 支持,运行
$ make nopam
最后,以 root 身份运行
# make install
安装过程执行以下操作
- 安装gradm和grlearn程序到 /sbin。
- 创建一个目录 /etc/grsec 并在其中创建两个文件(如果它们不存在):learn_config 和 policy。
- 安装gradm的 手册页 到 /usr/share/man/man8。
- (grlearn没有附带手册页。它由内部使用gradm.)
- 最后,也是最重要的是,如果这是您第一次安装gradm在您的系统上,系统将要求您提供 RBAC 系统的管理密码。选择一个长密码,但您要记住的密码(尤其是如果您开始gradm从一个启动脚本)。不要使用与您的 root 密码相同的密码。
如果您需要更改任何二进制文件或手册页位置,请修改 Makefile。
要显示所有可用的命令行开关,请运行gradm --help.
# 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 文件使管理员能够指定学习系统应将哪些文件/目录视为受保护资源。学习系统将确保,无论进行任何规则减少,只有通过正常使用访问这些受保护资源的进程才能通过生成的策略获得访问权限。此外,它将为访问受保护资源的进程创建新主体,创建特权边界,为这些进程提供额外的保护。
要启用全系统学习,请运行gradm以 root 身份使用以下选项
# gradm -F -L /etc/grsec/learning.logs
这将启用 基于角色的访问控制 (RBAC) 系统并启动全系统学习。也就是说,gradm将监视和记录您的系统执行的操作。然后可以使用日志为您的系统构建最小特权策略。
运行并使用您通常使用的应用程序几次。这很重要,因为学习模式使用基于阈值的系统来确定何时应授予文件访问权限或是否应授予目录访问权限。如果在一个目录中进行四次或更多次类似的访问(例如写入 /tmp 中的多个文件),则会授予该目录的访问权限,而不是授予各个文件的访问权限。这减少了您拥有的规则数量,并确保在最终的 ACL 编译后应用程序能够正常工作。
在启用全系统学习时,不要在管理员角色之外执行任何管理任务。 |
要在启用全系统学习时执行管理任务,请使用以下命令验证管理员角色
# gradm -a admin
记住退出 shell 或使用以下命令从管理员角色注销gradm -u完成执行管理任务后。
一旦您觉得您已经让系统获得了在现实生活中会遇到的正常使用情况,请使用以下命令禁用 RBAC 系统gradm -D。禁用 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
完成后,使用以下命令禁用 ACL 系统gradm -D(或者,使用以下命令进入管理员模式gradm -a),并使用
# gradm -L /etc/grsec/learning.logs -O /etc/grsec/policy
这将把新学习到的 ACL 放置到您的规则集的末尾。只需删除旧的 ACL,您就可以开始了。
此配置文件通过调整特定文件和目录的学习算法来帮助学习过程。它接受以下形式的行
<command> <pathname>
其中<command>可以是 inherit-learn、no-learn、inherit-no-learn、high-reduce-path、dont-reduce-path、protected-path、high-protected-path 和 always-reduce-path。inherit-learn、no-learn 和 inherit-no-learn 仅影响全系统学习,而其他选项则在所有学习模式下都有效。
inherit-learn 通过将路径名中包含的进程执行的每个二进制文件的学习访问权限都抛到路径名指定的主体中,来更改指定路径的学习过程。这对cron在全系统学习的情况下,这样,最终执行mv或rm具有特权的脚本不会导致 root 策略在所有情况下都授予该特权mv或rm。
no-learn 允许路径内的进程在不受限制的情况下执行正常系统使用允许的任何操作。如果进程生成大量的学习日志,最好对该进程使用此命令并手动配置其策略。
inherit-no-learn 结合了以上两种情况,使指定路径内的进程能够不受限制地执行任何正常的系统操作,以及这些进程执行的任何二进制文件。
high-reduce-path 修改了学习过程的启发式方法,使其更倾向于减少对该路径的访问。
dont-reduce-path 修改了学习过程的启发式方法,使其永远不会减少对该路径的访问。
always-reduce-path 修改了学习过程的启发式方法,使指定的路径中所有文件和目录都将被缩减到指定的路径。
protected-path 指定系统上的一个路径,该路径被视为重要的资源。任何修改这些路径之一的进程都将在学习过程中获得自己的主题,从而促进安全的策略。
read-protected-path 指定系统上的一个路径,该路径包含敏感信息。任何读取这些路径之一的进程都将在学习过程中获得自己的主题,从而促进安全的策略。
high-protected-path 指定一个应隐藏于所有进程的路径,但直接访问它的进程除外。建议将高度敏感的文件用于此命令。
请注意,此配置文件不支持路径名中的正则表达式。