下面给出了通过多种 MAC 模块, 并正确地配置策略来实现安全环境的例子。 这只是一个测试, 因此不应被看作四海一家的解决之道。 仅仅实现一个策略, 而忽略它不能解决任何问题, 并可能在生产环境中产生灾难性的后果。
在开始这些操作之前, 必须在每一个文件系统上设置 multilabel 选项, 这些操作在这一章开始的部分进行了介绍。 不完成这些操作, 将导致错误的结果。 首先, 请确认已经安装了 net-mngt/nagios-plugins、 net-mngt/nagios, 和 www/apache13 这些 ports, 并对其进行了配置, 且运转正常。
首先是在 /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
现在暂时还不要重新启动, 我们还需要在 /boot/loader.conf 中增加下面几行, 以便让模块随系统初始化一同加载:
mac_biba_load="YES" mac_seeotheruids_load="YES"
使用下面的命令将 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
接下来需要创建一个上下文文件; 您可以把下面的实例放到 /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
在 /boot/loader.conf 中增加下列内容:
security.mac.biba.trust_all_interfaces=1
将下述内容加入 rc.conf 中的网络接口配置。 如果主 Internet 配置是通过 DHCP 完成的, 则需要在每次系统启动之后手工执行类似的配置:
maclabel biba/equal
首先要确认 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)。
本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.