资源的审计

不是每个问题都有技术性的答案。我曾经诊断过一台服务器,它对 ping、SSH 或控制台连接均无响应。 我不能确定这到底是硬件故障还是软件故障。

当我电话询问主机所在位置的站点客服时,奥秘最终被揭开了。他们告诉我: 先期抵达的两名不明身份的男子,进入大厦直奔服务器机房,拔下了机器,并轻易地将机器带出了大厦。 后来我们发现,在机房所在的地区(Missouri,M.O.)曾发生过一连串的电脑失窃案。

从这个案例获得的重要信息是:最终知道了谁对你的服务器做了些什么,这还是不错的。

模拟运行模式(使用 --noop 开关)审计由 Puppet 控制的任何机器的变化是一种简单的方法。 然而,Puppet 还有一个专门的审计功能,它可以报告资源或特定属性的变化。

操作步骤

使用 audit 元参数定义一个资源:

file { "/etc/passwd":
    audit => [ owner, mode ],
}

工作原理

元参数metaparameter)是一种可以应用到任何资源的参数,不仅用于指定类型。 audit 元参数告诉 Puppet,你想要记录和监视关于这个资源的某些事件。 其值可以是你要审计的一个参数列表。

在本例中,一旦 Puppet 运行,它就开始记录 /etc/passwd 文件的属主和权限模式。 无论是属主改变还是权限改变,例如:如果你运行了如下命令:

# chmod 666 /etc/passwd

当下一次运行 Puppet 时,它将会察觉到这个变化并将其记入日志:

notice: /Stage[main]//Node[cookbook]/File[/etc/passwd]/mode: audit
change: previously recorded value 644 has been changed to 666

更多用法

对于需要审记大型网络中的机器所做的任何改变(无论是恶意的还是意外的)的情况, 使用 audit 特性是非常有用的。 你还可以使用 tagmail 报告特性通过 e-mail 自动发送审计通知信息。

对于要时刻关注不被 Puppet 管理的任何事物(例如生产服务器上的应用程序代码)的情况, 使用 audit 特性也是非常方便的。 你可以从 http://www.puppetlabs.com/blog/allabout-auditing-with-puppet/ 获取更多关于 Puppet 审计能力的信息。

如果你希望审计一个资源的一切,可以使用如下的代码:

file { "/etc/passwd":
    audit => all,
}

参见本书