Вот предыстория моего вопроса:
Некоторые люди вносят изменения на наш веб-сайт ASP.NET ... дизайнеры развертывают изменения HTML и CSS, разработчики .NET развертывают файлы ASPX, DLL, графические дизайнеры развертывают изображения и т. Д.
Теоретически все эти развертывания выполняются очень контролируемым образом - исходный код поддерживается в SVN, пакеты развертывания создаются и контролируются версиями, развертывания сначала тестируются на подготовительном сайте, развертывания в реальном времени документируются. Теоретически мы всегда знаем, какие файлы были изменены, когда, почему и кем.
Однако иногда кто-то вносит изменения прямо на действующем сайте и обходит все процедуры. Обычно это происходит из-за какой-то чрезвычайной ситуации. Иногда вносятся изменения, которые вызывают проблему на сайте ... и никто не причастен к этому!
Итак, мы ищем некую автоматическую службу, которая фиксирует все изменения файлов в определенных папках на сервере. Он должен «регистрировать» изменения файла по мере их появления, то есть фиксировать новую версию всего файла, а также регистрировать логин пользователя в Windows. Другими словами, каждый файл получает историю внесенных в него изменений, как SVN, TFS и т. Д. Мы должны иметь возможность делать различия между версиями в истории файла. 99% того, что он фиксирует, должны быть изменениями, внесенными с помощью надлежащих процедур, но он также должен содержать 1%, которые этого не делают.
Чтобы было ясно - мы не ищем службу, которая отправляет предупреждения о «целостности файла», например OSSEC. Мы просто хотим, чтобы каждое изменение файла фиксировалось, поэтому в случае, если что-то пойдет не так, мы можем проверить журнал изменений и выяснить, что было сделано вне обычных процедур. Кроме того, очевидно, что это должно быть полностью автоматизировано - требовать от пользователей выполнения дополнительной процедуры - это не то, что нам нужно!
Кроме того, периодическое создание резервных копий и последующий поиск различий между ними - не то, что мы хотим, потому что это не скажет нам, кто внес изменения.
Я имел дело с аналогичными проблемами, работая на дневной работе и работая с несколькими клиентами.
Проблема здесь в основных разрешениях и разделение рабочих обязанностей. Вам нужно гораздо больше процедурных изменений, чем программный инструмент. Должно быть очень небольшое количество людей, способных продвигать контент, подобный этому, в продакшн. Это зависит от организации, но, судя по тому, что я видел на рынке малого бизнеса, менее 15% людей, которые вносят изменения в разрабатываемый веб-сайт, имеют доступ к запуску в производство. Обычно сюда входят главный разработчик, главный специалист по маркетингу / имиджу, руководитель службы информационной безопасности и (возможно) вторичный доверенный разработчик.
С учетом всего сказанного я бы предложил проводить аудит событий входа в систему Windows. После того, как вы сузили круг людей, у которых есть доступ, это дает простой способ узнать, кто имел доступ к системе во время изменения. Вы также можете использовать аудит файловой системы (на предмет изменений) в каталоге, в котором размещены файлы вашего веб-сайта. Он не захватывает исходный контент, но его относительно быстро и легко настроить.
Поскольку вы уже используете SVN, настройте еще один репозиторий и запланированную задачу для проверки содержимого сайта там. Также подойдет почасовое инкрементное резервное копирование.