FreeBSD 使用手册
上一页 | 第16章 　强制访问控制 | 下一页

# 16.15 MAC Jail 中的 Nagios

下面给出了通过多种 MAC 模块， 并正确地配置策略来实现安全环境的例子。 这只是一个测试， 因此不应被看作四海一家的解决之道。 仅仅实现一个策略， 而忽略它不能解决任何问题， 并可能在生产环境中产生灾难性的后果。

在开始这些操作之前， 必须在每一个文件系统上设置 `multilabel` 选项， 这些操作在这一章开始的部分进行了介绍。 不完成这些操作， 将导致错误的结果。 首先， 请确认已经安装了 `net-mngt/nagios-plugins`、 `net-mngt/nagios`， 和 `www/apache13` 这些 ports， 并对其进行了配置， 且运转正常。

## 16.15.1 创建一个 insecure (不安全) 用户 Class

首先是在 `/etc/login.conf` 文件中加入一个新的用户 class：

    insecure:\
    :copyright=/etc/COPYRIGHT:\
    :welcome=/etc/motd:\
    :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
    :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
    :manpath=/usr/share/man /usr/local/man:\
    :nologin=/usr/sbin/nologin:\
    :cputime=1h30m:\
    :datasize=8M:\
    :vmemoryuse=100M:\
    :stacksize=2M:\
    :memorylocked=4M:\
    :memoryuse=8M:\
    :filesize=8M:\
    :coredumpsize=8M:\
    :openfiles=24:\
    :maxproc=32:\
    :priority=0:\
    :requirehome:\
    :passwordtime=91d:\
    :umask=022:\
    :ignoretime@:\
    :label=biba/10(10-10):

并在 default 用户 class 中加入：

    :label=biba/high:

一旦完成上述操作， 就需要运行下面的命令来重建数据库：

    # cap_mkdb /etc/login.conf

## 16.15.2 引导配置

现在暂时还不要重新启动， 我们还需要在 `/boot/loader.conf` 中增加下面几行， 以便让模块随系统初始化一同加载：

    mac_biba_load="YES"
    mac_seeotheruids_load="YES"

## 16.15.3 配置用户

使用下面的命令将 `root` 设为属于默认的 class：

    # pw usermod root -L default

所有非 `root` 或系统的用户， 现在需要一个登录 class。 登录 class 是必须的， 否则这些用户将被禁止使用类似 vi(1) 这样的命令。 下面的 `sh` 脚本应能完成这个工作：

    # for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \
    	/etc/passwd`; do pw usermod $x -L default; done;

将 `nagios` 和 `www` 这两个用户归入不安全 class：

    # pw usermod nagios -L insecure

    # pw usermod www -L insecure

## 16.15.4 创建上下文文件

接下来需要创建一个上下文文件； 您可以把下面的实例放到 `/etc/policy.contexts` 中。

    # This is the default BIBA policy for this system.

    # System:
    /var/run                        biba/equal
    /var/run/*                      biba/equal

    /dev                            biba/equal
    /dev/*                          biba/equal

    /var				biba/equal
    /var/spool                      biba/equal
    /var/spool/*                    biba/equal

    /var/log                        biba/equal
    /var/log/*                      biba/equal

    /tmp				biba/equal
    /tmp/*				biba/equal
    /var/tmp			biba/equal
    /var/tmp/*			biba/equal

    /var/spool/mqueue		biba/equal
    /var/spool/clientmqueue		biba/equal

    # For Nagios:
    /usr/local/etc/nagios
    /usr/local/etc/nagios/*         biba/10

    /var/spool/nagios               biba/10
    /var/spool/nagios/*             biba/10

    # For apache
    /usr/local/etc/apache           biba/10
    /usr/local/etc/apache/*         biba/10

这个策略通过在信息流上设置限制来强化安全。 在这个配置中， 包括 `root` 和其他用户在内的用户， 都不允许访问 Nagios。 作为 Nagios 一部分的配置文件和进程， 都是完全独立的， 也称为 jailed。

接下来可以用下面的命令将其读入系统：

    # setfsmac -ef /etc/policy.contexts /
    # setfsmac -ef /etc/policy.contexts /

> 注意: 随环境不同前述的文件系统布局可能会有所不同； 不过无论如何， 都只能在一个文件系统上运行它。

在 `/etc/mac.conf` 文件中的 main 小节需要进行下面的修改：

    default_labels file ?biba
    default_labels ifnet ?biba
    default_labels process ?biba
    default_labels socket ?biba

## 16.15.5 启用网络

在 `/boot/loader.conf` 中增加下列内容：

    security.mac.biba.trust_all_interfaces=1

将下述内容加入 `rc.conf` 中的网络接口配置。 如果主 Internet 配置是通过 DHCP 完成的， 则需要在每次系统启动之后手工执行类似的配置：

    maclabel biba/equal

## 16.15.6 测试配置

首先要确认 web 服务以及 Nagios 不会随系统的初始化和重启过程而自动启动。 在此之前， 请在此确认 `root` 用户不能访问 Nagios 配置目录中的任何文件 如果 `root` 能够在 `/var/spool/nagios` 中运行 ls(1)， 则表示配置有误。 如果配置正确的话， 您会收到一条 “permission denied” 错误信息。

如果一切正常， Nagios、 Apache， 以及 Sendmail 就可以按照适应安全策略的方式启动了。 下面的命令将完成此工作：

    # cd /etc/mail && make stop && \
    setpmac biba/equal make start && setpmac biba/10\(10-10\) apachectl start && \
    setpmac biba/10\(10-10\) /usr/local/etc/rc.d/nagios.sh forcestart

再次检查是否一切正常。 如果不是的话， 请检查日志文件和错误信息。 此外， 还可以用 sysctl(8) 来临时禁用 mac_biba(4) 安全策略模块的强制措施， 并象之前那样进行配置和启动服务。

> 注意: `root` 用户可以放心大胆地修改安全强制措施， 并编辑配置文件。 下面的命令可以对安全策略进行降级， 并启动一个新的 shell：

>     # setpmac biba/10 csh

> 要阻止这种情况发生， 就需要配置 login.conf(5) 中许可的命令范围了。 如果 setpmac(8) 尝试执行超越许可范围的命令， 则会返回一个错误， 而不是执行命令。 在这个例子中， 可以把 root 设为 `biba/high(high-high)`。

上一页 | 起始页 | 下一页
MAC LOMAC 模块 | 上一级 | User Lock Down

本文档和其它文档可从这里下载：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.