以下是我的问题的背景:
许多人对我们的 ASP.NET 网站部署了更改...设计师部署了 HTML 和 CSS 更改,.NET 开发人员部署了 ASPX、DLL 文件,图形设计师部署了图像等等。
理论上所有这些部署都是以非常受控的方式完成的 - 源代码在 SVN 中维护,创建部署包并进行版本控制,首先在预生产站点上测试部署,对实际部署进行记录。理论上我们始终知道哪些文件被更改了、何时更改、为何更改以及由谁更改。
然而,有时有人会直接在现场网站上进行更改,并绕过所有程序。这通常是由于某些紧急情况。有时所做的更改会导致网站出现问题……但没有人对此负责!
因此,我们正在寻找某种无人值守的服务,用于捕获服务器上特定文件夹的所有文件更改。它应该在文件更改发生时“签入”,即捕获整个文件的新版本,并捕获用户的 Windows 登录。换句话说,每个文件都会获得对其所做的更改的历史记录,就像 SVN、TFS 等一样。我们应该能够在文件历史记录中对版本进行差异分析。它捕获的 99% 应该是通过正确程序进行的更改 - 但它也应该包含 1% 未进行的更改。
需要明确的是 - 我们并不寻求像 OSSEC 那样发送“文件完整性”警报的服务。我们只是希望捕获每个文件更改,这样如果出现问题,我们可以检查更改日志并找出在常规程序之外做了什么。此外,它显然应该完全自动化 - 要求用户遵循额外的程序并不是我们想要的!
此外,定期进行备份然后寻找它们之间的差异并不是我们想要的,因为这不会告诉我们是谁做的更改。
答案1
我曾在日常工作中以及与多个客户处理过类似的问题。
这里的问题是基本权限和职责分离。您需要的不仅仅是软件工具,还有程序上的改变。应该只有极少数人能够将这样的内容推送到生产中。这取决于组织,但从我在小型企业市场看到的情况来看,在开发中对网站进行更改的人中,只有不到 15% 的人有权将内容推送到生产中。这通常包括首席开发人员、首席营销/形象人员、IS 负责人和(可能)二级受信任开发人员。
话虽如此,我还是建议审核 Windows 登录事件。一旦您缩小了有权访问的人的范围,这就可以很容易地知道在发生更改时谁在访问系统。您还可以对托管您网站文件的目录使用文件系统审核(针对更改)。它不会捕获原始内容,但设置起来相对快速和容易。
答案2
由于您已经使用 SVN,请设置另一个存储库和一个计划任务以在其中签入网站内容。每小时增量备份作业也可以。