This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

MAC Jail 中的 Nagios

16.15 MAC Jail 中的 Nagios

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

  在开始这些操作之前, 必须在每一个文件系统上设置 multilabel 选项, 这些操作在这一章开始的部分进行了介绍。 不完成这些操作, 将导致错误的结果。 首先, 请确认已经安装了 net-mngt/nagios-pluginsnet-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;

  将 nagioswww 这两个用户归入不安全 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” 错误信息。

  如果一切正常, NagiosApache, 以及 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)

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

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