5.2. Apache 中对 mod-apparmor 的配置

Apache 的配置方式是在纯文本配置文件中放置指令。主配置文件通常为 httpd.conf。编译 Apache 时,您可以指明此文件的位置。您可以将指令放置在这些配置文件的任一个中以改变 Apache 的行为方式。若要更改主配置文件,您必须启动或重启动 Apache 以识别所作更改。

5.2.1. 虚拟主机指令

虚拟主机指令控制是接受还是拒绝包含尾随的路径名信息并跟有实际文件名(或者现有路径中不存在的文件)的请求。有关虚拟主机指令的 Apache 文档,请参阅http://httpd.apache.org/docs-2.0/mod/core.html#virtualhost

特定于 change_hat 的配置关键字是 ImmDefaultHatName,使用方法类似于 ImmHatName,例如:ImmDefaultHatName My_Funky_Default_Hat

配置选项实际上基于一个服务器指令,此指令使您能够使用其它选项不包含的关键字,从而针对默认服务器对其进行设置。虚拟主机在 Apache 内部被看作是单独的“服务器”,因此您可以为默认服务器设定默认的帽子名称,如果需要,也可以为每个虚拟主机设定默认的帽子名称。

以下步骤反映了某个请求来临时 mod-apparmor 尝试应用帽子的顺序。

  1. ImmHatName 关键字指定的帽子位置或路径。

  2. 通过整个 URI 路径命名的帽子。

  3. ImmDefaultHatName 关键字指定的默认服务器帽子。

  4. DEFAULT_URI(如果这些都不存在,则返回到“” Apache 帽子)。

5.2.2. 位置和目录指令

位置和目录指令指定程序配置文件中的帽子名称,这样可程序调用与其安全性相关的帽子。对于 Apache,您可以在 http://httpd.apache.org/docs-2.0/sections.html 找到有关位置和目录指令的文档。

下面的位置指令示例指定,对于给定的位置,mod-apparmor 应使用指定的帽子:

<Location /foo/>
      ImmHatName MY_HAT_NAME
</Location>

此指令会尝试对所有以 /foo//foo//foo/bar/foo/cgi/path/blah_blah/blah 等)开头的 URI 使用 MY_HAT_NAME

目录指令的工作方式与位置指令相似,不同的是它代表的是文件系统中的路径名,示例如下:

<Directory "/srv/www/www.immunix.com/docs"> # Note lack of trailing slash
      ImmHatName immunix.com
</Directory>

例如:.  在下例中,phpsysinfo 程序用于描述一个位置指令。tarball 可从 http://phpsysinfo.sourceforge.com 下载。

  1. 下载 tarball 后,请将它安装到 /srv/www/htdocs/sysinfo/

  2. 创建 /etc/apache2/conf.d/sysinfo.conf 并向其添加以下文本:

    <Location "/sysinfo">
              ImmHatName sysinfo
    </Location>

    此时以下帽子应作用于 phpsyinfo:

       ^sysinfo {
      #include <program-chunks/base-files>
        /bin/df                               ix,
        /bin/bash                             ix,
        /dev/tty                              rw,
        /etc/SuSE-release                     r,
        /etc/fstab                            r,
        /etc/hosts                            r,
        /etc/mtab                             r,
        /proc/**                              r,
        /sbin/lspci                           ix,
        /srv/www/htdocs/sysinfo/**            r,
        /sys/bus/pci/devices                  r,
        /sys/devices/**                       r,
        /usr/bin/who                          ix,
        /usr/share/pci.ids                    r,
        /var/log/apache2/{access,error}_log   w,
        /var/run/utmp                         r,
      }
    
  3. 以 root 用户的身份在终端窗口输入 rcapparmor restart 以重新装载 Novell AppArmor 配置文件。

  4. 在以 root 用户身份登录的情况下,在终端窗口中输入 rcapache2 restart 以重启 Apache。

  5. 在浏览器中输入 http://hostname/sysinfo/ 以接收 phpsysinfo 传递的系统信息。

  6. 进入 /var/log/syslog 或运行 dmesg 以追踪配置错误并在输出中查找拒绝事件。