第 3 章 构建 Novell AppArmor 配置文件

目录

3.1. 配置文件组件和语法
3.2. 构建和管理 Novell AppArmor 配置文件
3.3. 用 YaST GUI 构建 Novell AppArmor 配置文件
3.4. 使用命令行界面构建 Novell AppArmor 配置文件
3.5. 构建配置文件的两种方式
3.6. 路径名和通配
3.7. 文件访问权限模式

本章介绍如何构建和管理 NovellŪ AppArmor 配置文件。选择要构建配置程序的程序后,您就作好了构建 Novell AppArmor 配置文件的准备。要获得此操作的帮助,请参见第 2 章 选择要进行免疫的程序 (↑Novell AppArmor 2.0 管理指南)


3.1. 配置文件组件和语法

本节详细介绍 Novell AppArmor 配置文件的语法或结构。第 3.1.1 节 “将 Novell AppArmor 配置文件分割成多个部分” (↑Novell AppArmor 2.0 管理指南)中会提供一个说明此语法的示例。

3.1.1. 将 Novell AppArmor 配置文件分割成多个部分

Novell AppArmor 配置文件组件被称为 Novell AppArmor 规则。目前的 Novell AppArmor 规则主要有两种类型:路径条目和功能条目。路径条目指定进程在该文件系统中可访问的内容,功能条目提供更精确的控制,通过需要权限的其它系统调用规定被限制的进程可以执行哪些操作。Include 是一种元规则或指令,可以导入其它文件中的路径和功能条目。

要解释配置文件的组成部分和如何创建配置文件,最方便的方法是详细说明一个配置文件示例。例如,您可以看一下 /sbin/klogd 程序的如下配置文件:

# profile to confine klogd1
/sbin/klogd 2
{3
#include <abstractions/base>4
  capability sys_admin,5
  /boot/* r6,
  /proc/kmsg r,
  /sbin/klogd r,
  /var/run/klogd.pid lw,
}
1

一条注释,给出此配置文件限制的程序的名称。类似注释的前面一定要有一个 # 号。

2

受限制的程序的绝对路径。

3

花括号 {} 是一个容器,用于包含其它配置文件的 include 语句以及路径和功能条目。

4

此指令导入 Novell AppArmor 配置文件的组件以简化配置文件。

5

功能条目语句可启用每个 29 POSIX.1e 草案功能。

6

路径条目,指定程序可以访问文件系统的哪些区域。路径条目的第一部分指定文件的绝对路径(包括常规的表达式通配),第二部分指定允许的访问模式(r 表示读,w 表示写,x 表示执行)。任何类型的空白空间(空格或 tab 符)都可以出现在路径名的前面或者用于分隔路径名和访问模式。访问模式之间的空白空间和尾随逗号是可选的。

为程序创建配置文件后,此程序只可访问配置文件中指定的文件、模式和 POSIX 功能。这些限制是对本机 Linux 访问控制的补充。

例如: .  要获得功能 CAP_CHOWN,程序必须能够在常规 Linux 访问控制下访问 CAP_CHOWN(一般为 root 用户所有的进程),并且在其配置文件中设置功能 chown。同样,要能够写入 /foo/bar 文件,则必须在文件属性中设置正确的程序用户 ID 和模式位(请参见 chmodchown 手册页),并且程序在其配置文件中设置 /foo/bar w

对违反 Novell AppArmor 规则的尝试将被记录在 syslog 中。在很多情况下,Novell AppArmor 规则可防止攻击发挥作用,因为必要的文件不可访问。对于 Novell AppArmor 允许的文件集,在任何情况下 Novell AppArmor 限制都可以限定攻击者可能进行的破坏。

3.1.2. #include

#include 语句是用于导入其它 Novell AppArmor 配置文件的组件以简化配置文件的指令。include 文件会提取程序的访问权限。通过使用 include,您可以向程序赋予访问其它程序也需要的目录路径和文件的权限。使用 include 可减小配置文件的大小。

默认情况下 #include 语句会在路径名的开头追加 /etc/apparmor.d/,它在此处查找 include 文件。不同于其它配置文件语句(但类似于 C 程序),#include 行不以逗号结尾。

为协助您构建应用程序的配置文件,Novell AppArmor 提供了两类 #include:抽象和程序块。

3.1.2.1. 抽象

抽象是由常见的应用程序任务组合而成的 #include。这些任务包括访问鉴定机制、访问名称服务例程、一般的图形要求以及系统统计。这些抽象中列出的文件被指定给具名的任务;需要其中一个文件的程序通常需要抽象文件中列出的某些其它文件(取决于本地配置和程序的特定要求)。可以在 /etc/apparmor.d/abstractions/ 中找到抽象。

3.1.2.2. 程序块

程序块是系统管理员可能想要在本地站点策略的基础上控制的特定程序的访问控制。每个块由单独一个程序使用。程序块使您更容易对策略进行本地站点修改或对 Novell AppArmor 提供的策略进行更新。管理员可以根据自身需要修改这些文件中的策略而不修改程序配置文件,这样可以简化在每个站点将 Novell AppArmor 中的策略更新合并为强制策略的任务。

程序块中的访问限制一般非常自由,它的设计使您的用户在访问文件时受到的干扰尽可能少,同时又保护了系统资源。postfix* 系列程序块是一个例外。这些配置文件用于帮助抽象化 postfix 二进制码的位置。您可能不希望在 postfix* 系列中降低权限。程序块可以在 /etc/apparmor.d/program-chunks/ 中找到。

3.1.3. 功能条目 (POSIX.1e)

功能语句为“capability”一词加上紧随其后的 POSIX.1e 功能名称,POSIX.1e 功能在capabilities(7) 手册页中定义。