18.7.MAC Jail 中的 Nagios
=========================

本节演示了在 MAC 环境中实现 Nagios 网络监控系统所需的步骤。这是一个示例,该示例仍要求管理员在生产环境中使用之前测试已实现的策略是否满足网络的安全要求。

该示例需要在每个文件系统上都设置\ ``多重标签``\ 。它还假设 `net-mgmt/nagios-plugins <https://cgit.freebsd.org/ports/tree/net-mgmt/nagios-plugins/pkg-descr>`__\ 、\ `net-mgmt/nagios <https://cgit.freebsd.org/ports/tree/net-mgmt/nagios/pkg-descr>`__ 和 `www/apache22 <https://cgit.freebsd.org/ports/tree/www/apache22/pkg-descr>`__ 在尝试集成到 MAC 框架之前都已正确安装、配置和工作。

18.7.1.创建不安全的用户分级
---------------------------

通过将以下用户分级添加到 **/etc/login.conf** 来开始此过程:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   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):

然后,将以下行添加到默认用户分级部分:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   :label=biba/high:

保存编辑内容并执行以下命令以重建数据库:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   # cap_mkdb /etc/login.conf

18.7.2.配置用户
---------------

使用以下命令将用户 ``root`` 设置为默认分级:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   # pw usermod root -L default

所有非 ``root`` 用户帐户现在都需要一个登录分级。登录分级是必需的,否则将拒绝用户访问常用命令。以下 ``sh`` 脚本应该可以解决问题:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

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

接下来,将 ``nagios`` 和 ``www`` 帐户放入不安全分级中:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   # pw usermod nagios -L insecure
   # pw usermod www -L insecure

18.7.3.创建上下文文件
---------------------

现在应创建上下文文件 **/etc/policy.contexts**\ :

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   # This is the default BIBA policy for this system.

   # System:
   /var/run(/.*)?          biba/equal

   /dev/(/.*)?         biba/equal

   /var                biba/equal
   /var/spool(/.*)?        biba/equal

   /var/log(/.*)?          biba/equal

   /tmp(/.*)?          biba/equal
   /var/tmp(/.*)?          biba/equal

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

   # For Nagios:
   /usr/local/etc/nagios(/.*)? biba/10

   /var/spool/nagios(/.*)?     biba/10

   # For apache
   /usr/local/etc/apache(/.*)? biba/10

此策略通过设置信息流限制来强制实施安全性。在此特定配置中,绝不应允许用户(包括 ``root``\ )访问 Nagios。作为 Nagios 一部分的配置文件和进程将完全独立或被隔离。

在每个文件系统上运行 ``setfsmac`` 后,将读取此文件。此示例在根文件系统上设置策略:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   # setfsmac -ef /etc/policy.contexts /

接下来,将这些编辑添加到 **/etc/mac.conf** 的主要部分:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

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

18.7.4.加载程序配置
-------------------

要完成配置,请将以下行添加到 **/boot/loader.conf**\ :

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   mac_biba_load="YES"
   mac_seeotheruids_load="YES"
   security.mac.biba.trust_all_interfaces=1

并将以下行中的网卡配置存储在 **/etc/rc.conf** 中。如果主网络配置是通过 DHCP 完成的,则可能需要在每次系统引导后手动配置:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   maclabel biba/equal

18.7.5.测试配置
~~~~~~~~~~~~~~~

首先,确保在系统初始化和重新启动时不会启动 Web 服务器和 Nagios。确保 ``root`` 无法访问 Nagios 配置目录中的任何文件。如果 ``root`` 可以列出 **/var/spool/nagios** 的内容,则存在问题。若无问题,应返回错误“permission denied”。

如果一切正常,现在可以启动 Nagios,Apache 和 Sendmail:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   # 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) <https://www.freebsd.org/cgi/man.cgi?query=sysctl&sektion=8&format=html>`__ 禁用 `mac_biba(4) <https://www.freebsd.org/cgi/man.cgi?query=mac_biba&sektion=4&format=html>`__ 安全策略模块,然后像往常一样尝试重新启动所有内容。

   **注意** ``root`` 用户仍可以更改安全实施并编辑其配置文件。对于新生成的 shell,以下命令将允许将安全策略降级到较低的级别:

   .. code:: shell-session

      # setpmac biba/10 csh

   要阻止这种情况发生,请使用 `login.conf(5) <https://www.freebsd.org/cgi/man.cgi?query=login.conf&sektion=5&format=html>`__ 强制用户进入某个范围。如果 `setpmac(8) <https://www.freebsd.org/cgi/man.cgi?query=setpmac&sektion=8&format=html>`__ 尝试在分区范围之外运行命令,将返回错误,并且不会执行该命令。在这种情况下,请将 root 设置为 ``biba/high(high-high)``\ 。