16.7.MAC Jail 中的 Nagios

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

需要在每个文件系统上设置 multilabel 示例。它还假设 net-mgmt/nagios-pluginsnet-mgmt/nagioswww/apache22 在尝试集成到 MAC 框架之前都已正确安装、配置和工作。

16.7.1. 创建不安全的用户类

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

  1. insecure:\
  2. :copyright=/etc/COPYRIGHT:\
  3. :welcome=/etc/motd:\
  4. :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
  5. :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
  6. :manpath=/usr/share/man /usr/local/man:\
  7. :nologin=/usr/sbin/nologin:\
  8. :cputime=1h30m:\
  9. :datasize=8M:\
  10. :vmemoryuse=100M:\
  11. :stacksize=2M:\
  12. :memorylocked=4M:\
  13. :memoryuse=8M:\
  14. :filesize=8M:\
  15. :coredumpsize=8M:\
  16. :openfiles=24:\
  17. :maxproc=32:\
  18. :priority=0:\
  19. :requirehome:\
  20. :passwordtime=91d:\
  21. :umask=022:\
  22. :ignoretime@:\
  23. :label=biba/10(10-10):

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

  1. :label=biba/high:

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

  1. # cap_mkdb /etc/login.conf

16.7.2. 配置用户

使用以下命令将用户 root 设置为默认类:

  1. # pw usermod root -L default

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

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

接下来,将 nagioswww 帐户放入不安全类中:

  1. # pw usermod nagios -L insecure
  2. # pw usermod www -L insecure

16.7.3. 创建上下文文件

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

  1. # This is the default BIBA policy for this system.
  2. # System:
  3. /var/run(/.*)? biba/equal
  4. /dev/(/.*)? biba/equal
  5. /var biba/equal
  6. /var/spool(/.*)? biba/equal
  7. /var/log(/.*)? biba/equal
  8. /tmp(/.*)? biba/equal
  9. /var/tmp(/.*)? biba/equal
  10. /var/spool/mqueue biba/equal
  11. /var/spool/clientmqueue biba/equal
  12. # For Nagios:
  13. /usr/local/etc/nagios(/.*)? biba/10
  14. /var/spool/nagios(/.*)? biba/10
  15. # For apache
  16. /usr/local/etc/apache(/.*)? biba/10

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

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

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

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

  1. default_labels file ?biba
  2. default_labels ifnet ?biba
  3. default_labels process ?biba
  4. default_labels socket ?biba

16.7.4. 加载程序配置

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

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

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

  1. maclabel biba/equal

16.7.5. 测试配置

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

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

  1. # cd /etc/mail && make stop && \
  2. setpmac biba/equal make start && setpmac biba/10\(10-10\) apachectl start && \
  3. 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)