1

(也发布在ServerFault,但意识到这里会有更多的 SVN/TFS 用户)

底线问题:

  • 是否可以创建一个运行无人值守服务的 SVN/TFS 存储库,该服务会静默检查对目标文件夹中的文件所做的所有更改以及更改者的用户名?它必须对进行文件更改的人完全不可见。

这是我的问题的背景:

许多人为我们的 ASP.NET 网站部署更改……设计师部署 HTML 和 CSS 更改,.NET 开发人员部署 ASPX、DLL 文件,图形设计师部署图像等。

从理论上讲,所有这些部署都是以一种非常可控的方式完成的——源代码在 SVN 中维护,部署包被创建和版本控制,部署首先在预生产站点上进行测试,实时部署被记录。从理论上讲,我们总是知道哪些文件被更改、何时、为什么以及由谁更改。

但是,有时有人直接在现场进行更改并绕过所有程序。通常这是因为一些紧急情况。有时所做的更改会导致网站出现问题……而且没有人拥有它!

所以我们正在寻找的是某种无人值守的服务,它可以捕获服务器上特定文件夹的所有文件更改。它应该在文件更改发生时“签入”文件更改,即捕获整个文件的新版本,并捕获用户的 Windows 登录。换句话说,每个文件都会获得对其所做更改的历史记录,就像 SVN、TFS 等一样。我们应该能够在文件历史记录中的版本之间进行比较。它捕获的 99% 应该是通过适当的程序进行的更改 - 但它也应该包含 1% 没有的更改。

需要明确的是 - 我们不是在寻找发送“文件完整性”警报的服务,如 OSSEC。我们只希望捕获每个文件更改,因此如果出现问题,我们可以检查更改日志并找出在常规程序之外做了什么。此外,它显然应该是完全自动化的——要求用户遵循额外的程序不是我们在这里所追求的!

此外,定期进行备份然后查找它们之间的差异不是我们想要的,因为这不会告诉我们是谁进行了更改。

4

1 回答 1

1

虽然在技术上可以做到这一点,但我强烈建议您解决问题的根本原因——而不是症状。

但是,有时有人直接在现场进行更改并绕过所有程序。通常这是因为一些紧急情况。有时所做的更改会导致网站出现问题......并且没有人拥有它

(强调我的)这是一个你需要解决的大问题。对实时站点的访问应该被非常严格地锁定(只有发布经理应该对服务器有写访问权限——或者更好的是,一个自动化的部署过程),并且“紧急”更改仍然应该遵循相同的一般工作流程才能投入生产- 只是加速。

您的实时站点的每个版本都应该是一个单独的包(或一个脚本化的过程,可重复的过程,仅在您告诉它推送到实时站点的哪个版本中有所不同),并且由固定的人/一组人协调推广。如果不遵循流程(包括客户/利益相关者和变更经理的签字),任何事情都不会上线,并且每次都由相同的人以相同的方式进行促销。

现在——你自己承认——你没有责任。只要人们逃脱惩罚,他们就会尝试这样做。要么是出于恶意,要么是因为“遵循流程需要太长时间/太难”。

简短版本:与其通过解决此行为(使用您在此处寻找的解决方案)来启用此行为,不如从一开始就阻止它发生,这样您就不需要事后进行清理。

此外,定期进行备份然后查找它们之间的差异不是我们想要的,因为这不会告诉我们是谁进行了更改。

我看不出您提出的解决方案如何为您提供所需的审计跟踪。该服务只会提交所做的更改,而不是提交这些更改的人。您能否通过使用 Windows 安全日志记录和 NTFS 审计来跟踪更改的来源?也许,也许不是。

该服务将如何处理合并冲突?在 SVN 中,您只能在您的 WC 处于 HEAD 修订版时提交,因此您必须更新,然后提交。如果对需要合并的相同元素有其他更改,会发生什么?

我建议您使用诸如 Tripwire 之类的监控服务来监视对您的实时站点所做的更改,但这可能仍然无法告诉您进行了更改或为什么进行更改- 但如果发生更改,您至少可以很快得到通知。

于 2012-12-10T17:03:16.477 回答