Передача всего Linux-сервера под контроль исходного кода (git)

17

Я думаю о том, чтобы поставить весь мой Linux-сервер под контроль версий с помощью git Причиной этого является то, что это может быть самым простым способом обнаружения вредоносных модификаций / руткитов. Все, что я наивно считаю, необходимо проверить целостность системы: монтировать раздел linux каждую неделю или около того, используя спасательную систему, проверять, не отменен ли репозиторий git, и затем выдавать состояние git для обнаружения любых изменений, внесенных в систему. ,

Помимо очевидных потерь дискового пространства, есть ли другие негативные побочные эффекты?

Это совершенно безумная идея?

Это даже безопасный способ проверки на наличие руткитов, поскольку мне, скорее всего, придется хотя бы исключить / dev и / proc?

Тобиас Херткорн
источник
5
Я бы проголосовал за «совершенно сумасшедшую идею», слишком много последствий. Изменения в файлах будут происходить постоянно и превратят процедуры обновления в кошмар.
forcefsck
@forcefsck - почему изменения файла происходят постоянно? Разве они не должны происходить во время обновления системы?
Тобиас Херткорн
1
Просто подумайте , почему бы не использовать что-то вроде dirvish или rsync с --link-dest? Если вы используете dirvish для создания резервных копий, это даст вам хороший отчет для каждой резервной копии, показывающий, что изменилось. Вы можете rsync в режиме --dry-run, чтобы сравнить текущее состояние с вашей резервной копией. Если вы используете Dirvish, вы будете использовать инструмент, хорошо проверенный в качестве системы резервного копирования.
Зоредаче

Ответы:

16

Это "плохая идея" (тм). Помимо всего прочего, ваш репозиторий будет работать медленно, как все чертовски, и ухудшаться с каждой сохраненной ревизией.

Попробуйте централизованное управление, например, puppet / cfengine / chef. Это будет держать вещи, как вы ожидаете, и отменить неожиданные изменения.

Добавьте к этому что-то вроде iwatch, чтобы получать электронные письма о несанкционированных изменениях файлов.

Объедините это далее с файлами rpm / deb, если необходимо развернуть пользовательские приложения.

Добавьте что-то вроде rkhunter или chkrootkit время от времени для ударов ногами, и вы должны хорошо идти.

Работа сделана.

Sirex
источник
+1 за плохую идею - централизованное управление (puppet / cfengine / chef / radmind / и т. Д.) Даст вам возможность убедиться, что ваша система настроена в соответствии с вашими заданными требованиями, и большинство из них также можно использовать как «tripwire» система типов, чтобы сообщить вам, когда что-то меняется, чего не должно быть.
voretaq7
Я думаю, что это действительно плохая идея. Хорошо, вы можете видеть, какие файлы являются новыми и изменены. Но если вы запускаете git, ему нужно много ЦП для распаковки и вычисления ваших файлов. Если вы делаете это на всей машине, это займет много времени.
René Höhle
1
Я добавлю еще один в этот список; etckeeper сделает git-репо, за исключением только / etc.
Шейн Мэдден
хранилища типа git невероятно быстрые. И я не беспокоюсь о ЦП или IO, так как у сервера, который я имею в виду, запланированные простои (отсюда и возможность смонтировать его с помощью спасательной системы)
Тобиас Херткорн
Чего я не понимаю: как централизованные системы управления гарантируют отсутствие ложных срабатываний - система взломана + инструменты, используемые для проверки системы, взломаны = ложный положительный результат
Тобиас Херткорн
5

Другой альтернативой является настройка tripwire , которая представляет собой программное обеспечение GPL, которое просматривает все важные файлы в вашей системе и определяет, какие из них были изменены способами, которые вы определили как неприемлемые. Изменение может быть определено просто как mtime, через номер инода, вплоть до криптографически надежных контрольных сумм.

Требуется некоторая настройка и настройка, если вы не хотите получать множество отчетов каждую ночь об измененных файлах /var/run, изменениях в клиентских файлах DHCP /etcи т. П., Но если вы все же столкнетесь с этой проблемой, это может быть очень полезно на самом деле.

База данных свойств файла подписан с помощью ключа не известной машины, которая поможет вам быть уверены , что ни один инструмент не злонамеренно изменили базу данных или натяжной двоичные файлы. Для полной уверенности вы можете записать копию инструментов и баз данных tripwire на носитель только для чтения, который можно смонтировать на сервере и использовать для проверки всех изменений, произошедших после записи диска, если требуется полный судебный анализ.

Если вы собираетесь это сделать, очень важно настроить и запустить tripwire до того, как машина будет запущена в производство, или вы никогда не можете быть полностью уверены, что какой-то злонамеренный пользователь не имел возможности заразить машину до того, как она будет запущена. был перепутан.

Безумный Шляпник
источник
3

Я не думаю, что это сработает, но в качестве эксперимента я бы хотел посмотреть, что произойдет, если вы сделаете это только с папкой / etc. Вот где хранится большая часть информации о конфигурации.

Джоэл Коэль
источник
4
Просто / etc делается. Проверьте kitenet.net/~joey/code/etckeeper (etckeeper)
Тобиас Херткорн
1
etckeeper работает очень хорошо, я нахожу это очень полезным.
Zoredache
2

@Sirex уже дал очень хороший ответ, но если вы хотите сделать еще один шаг в области безопасности, лучшим способом борьбы с ним является сначала предотвращение, а затем обнаружение.

Попробуйте настроить систему с /монтированной файловой системой только для чтения. Сделайте / tmp отдельным ramfs, смонтированным с опцией noexec, nodev. Чтобы система работала, вам нужно только / var монтировать чтение-запись. Поэтому в / var монтируем fs с помощью rw, noexec, nodev и удаляем права на запись в / var / tmp (на самом деле, это редко требуется демонам, и это должно настраиваться). Также используйте патч безопасности для вашего ядра, чтобы дополнительно ограничить доступ пользователей к ресурсам, например, попробуйте grsec. Используйте брандмауэр с самыми строгими правилами.

Некоторые дистрибутивы предоставляют обширную документацию по укреплению системы. Например:

forcefsck
источник
0

Я думаю, что это хорошая идея для анализа изменений, которые инструмент вносит в вашу систему:

  1. установить голый Linux в ВМ
  2. инициализировать рут мерзавца
  3. установите инструмент, который вы хотите проанализировать
  4. увидеть все изменения, сделанные в вашей системе

... Удалить ВМ

Вы должны добавить в .gitignore файл много папок, например, proc и т. Д.

rubo77
источник
0

В ситуациях, когда вы просто заинтересованы в сохранении определенных папок во всей файловой системе под контролем версий, может подойти следующий подход:

Сначала создайте Git-репозиторий на /уровне:

$ cd /
# git init

Затем создайте /.gitignoreбелый список только для определенных папок, например, только для белого /path/to/versioned/config/folder/(на основе /programming//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/ ) для управления версиями этой конкретной папки, поскольку она более специализирована для этой цели ( например, он фиксируется автоматически после установки пакетов).

Хайме Хаблутцель
источник