Практическое задание

Эта задача — шаг 17 курса «Расследование на сервере»

Улика из стёртого коммита

сложно~10 мин

Конфиги сервера живут в git-репозитории /srv/config-repo. Злоумышленник закоммитил туда задание cron/sync.sh (коммит update sync job), а потом замёл следы: git reset --hard откатил ветку main, и поверх он сделал безобидный коммит. Сейчас файла в рабочем дереве нет, в git log коммита тоже.

Восстанови улику, не трогая main: создай ветку evidence, которая указывает на стёртый коммит, — в ней должен быть cron/sync.sh. История main должна остаться как есть (три коммита).

Что потренируешь:
  • git reflog
  • восстановление коммитов
  • git branch
  • dangling commit
  • расследование

Разбор темы

Когда на коммит перестаёт ссылаться ветка (после reset --hard, rebase, удаления ветки), сам объект не исчезает: он становится «висячим» и живёт в базе, пока его не соберёт git gc (по умолчанию — недели). Каждое перемещение HEAD git пишет в журнал ссылок, его читает git reflog: там видно и сброс, и коммит, который был до него. Для расследования важно не переписывать текущую историю, а сохранить находку отдельно — повесить на найденный хеш новую ветку. Тогда улика больше не потеряется при сборке мусора, а рабочая ветка останется нетронутой.

Что проверяется

  1. ветка evidence создана
  2. в evidence есть стёртый cron/sync.sh
  3. main не тронута

Как это выглядит