Передача всего Linux-сервера под контроль исходного кода (git)
Я думаю о том, чтобы поставить весь мой Linux-сервер под контроль версий с помощью git. Причиной этого является то, что это может быть самым простым способом обнаружения вредоносных модификаций / руткитов. Все, что я наивно считаю, необходимо проверить целостность системы: монтировать раздел linux каждую неделю или около того, используя спасательную систему, проверять, не отменен ли репозиторий git, и затем выдавать состояние git для обнаружения любых изменений, внесенных в систему.,
Помимо очевидных потерь дискового пространства, есть ли другие негативные побочные эффекты?
Это совершенно безумная идея?
Это даже безопасный способ проверки на наличие руткитов, поскольку мне, скорее всего, придется хотя бы исключить / dev и / proc?
5 ответов
Это "плохая идея" (тм). Помимо всего прочего, ваш репозиторий будет работать медленно, как все чертовски, и ухудшаться с каждой сохраненной ревизией.
Попробуйте централизованное управление, например, puppet / cfengine / chef. Это будет держать вещи, как вы ожидаете, и отменить неожиданные изменения.
Добавьте к этому что-то вроде iwatch, чтобы получать электронные письма о несанкционированных изменениях файлов.
Объедините это далее с файлами rpm / deb, если необходимо развернуть пользовательские приложения.
Добавьте что-то вроде rkhunter или chkrootkit время от времени для ударов ногами, и вы должны быть хорошими, чтобы пойти.
Работа выполнена.
Другой альтернативой является настройка tripwire, которая представляет собой программное обеспечение GPL, которое просматривает все важные файлы в вашей системе и определяет, какие из них изменились способами, которые вы определили как неприемлемые. Изменения могут быть определены просто как mtime, через номер инода, вплоть до криптографически надежных контрольных сумм.
Требуется некоторая настройка и настройка, если вы не хотите получать множество отчетов каждую ночь об измененных файлах в /var/run
, изменения в клиентских файлах DHCP в /etc
и тому подобное, но если вы все же пойдете на эту неприятность, это действительно может быть очень полезно.
База данных свойств файла подписана ключом, неизвестным компьютеру, что позволяет вам быть уверенным, что ни один инструмент не изменил злонамеренно базу данных или двоичные файлы Tripwire. Для полной уверенности вы можете записать копию инструментов и баз данных tripwire на носитель только для чтения, который можно смонтировать на сервере и использовать для проверки всех изменений с момента записи диска, если требуется полный судебный анализ.
Если вы собираетесь это сделать, очень важно настроить и запустить tripwire до того, как машина будет запущена в производство, или вы никогда не можете быть полностью уверены, что какой-то злонамеренный пользователь не смог заразить машину до того, как она будет запущена. был перепутан.
Я не думаю, что это сработает, но в качестве эксперимента я бы хотел посмотреть, что произойдет, если вы сделаете это только с папкой /etc. Вот где хранится большая часть информации о конфигурации.
Я думаю, что это хорошая идея для анализа изменений, которые инструмент вносит в вашу систему:
- установить голый Linux в ВМ
- инициализировать рут мерзавца
- установите инструмент, который вы хотите проанализировать
- увидеть все изменения, сделанные в вашей системе
... Удалить ВМ
Вам придется добавить много папок в .gitignore
файл хоть как проц и тд
@Sirex уже дал очень хороший ответ, но если вы хотите сделать еще один шаг в области безопасности, лучшим способом борьбы с ним является сначала предотвращение, а затем обнаружение.
Попробуйте настроить систему с /монтированной файловой системой только для чтения. Сделайте /tmp отдельным ramfs, смонтированным с опцией noexec,nodev. Чтобы система работала, вам нужно только /var монтировать чтение-запись. Поэтому в /var монтируем fs с помощью rw,noexec,nodev и удаляем разрешения на запись в /var/tmp (на самом деле, это редко требуется демонам, и это должно быть настраиваемо). Также используйте патч безопасности для вашего ядра, чтобы дополнительно ограничить доступ пользователей к ресурсам, например, попробуйте grsec. Используйте брандмауэр с самыми строгими правилами.
Некоторые дистрибутивы предоставляют обширную документацию по укреплению системы. Например:
Для ситуаций, когда вы просто заинтересованы в хранении определенных папок во всей файловой системе под контролем версий, может работать следующий подход:
Сначала создайте репозиторий Git в
/
уровень:
$ cd /
# git init
Затем создайте
/.gitignore
который добавляет в белый список только определенные папки, например только в белый список
/path/to/versioned/config/folder/
(на основе https://stackoverflow.com/a/11018557/320594):
/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore
Затем создайте первую фиксацию:
# git add -A
# git commit -m "Initial commit"
А затем по запросу добавьте дополнительные папки, которые вы хотите использовать в системе контроля версий.
PS:
В дополнение к предыдущему методу, если вам нужно сохранить / etc / под контролем версий, вы можете предпочесть использовать
etckeeper
(https://etckeeper.branchable.com/) для управления версиями этой конкретной папки, поскольку она более специализирована для этой цели (например, она автоматически фиксируется после установки пакетов).