15.7. MAC Jail 中的 Nagios

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

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

15.7.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

15.7.2. 配置用户

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

# pw usermod root -L default

所有非 root 或系统的用户,现在需要一个登录 class。登录 class 是必须的,否则这些用户将被禁止使用公共命令。下面的 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

15.7.3. 创建上下文文件

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

# 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 一部分的配置文件和进程, 都是完全独立的, 也称为 jailed。

在每个文件系统上执行setfsmac之后将会读取该文件。本例在根文件系统上设置此规则:

# 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

15.7.4. 载入配置文件

/boot/loader.conf 中增加下列内容:

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

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

maclabel biba/equal

15.7.5. 测试配置

首先要确认 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>.