Файлы меняются.
Это вечная история, или, по крайней мере, такая же старая, как и системное администрирование. Вы устанавливаете пакет на свой Debian или Ubuntu, и какое-то время всё идёт как по маслу. Затем, возможно, какой-нибудь скрипт почистит систему слишком агрессивно, кто-то полезет в конфигурационный файл, куда не следовало, или ваш диск решит устроить истерику после неожиданного отключения питания. Внезапно вы остаётесь в недоумении: всё ли сейчас именно так, как я ожидаю? Не тронул ли кто-то, хоть что-то, этот файл?
<a href="/tag/debsums/">debsums</a> даст ответ на этот вопрос.
Давайте будем честны, мы все через это проходили. Смотреть на систему, которая ведёт себя… странно. Можно часами копаться в логах, сравнивать директории и вообще метаться вслепую. А можно воспользоваться инструментом, созданным как раз для такой цифровой детективной работы. Для систем на базе Debian этот инструмент — debsums.
Он не гламурный. Он не попадет в заголовки новостей. Но когда вам нужно узнать, действительно ли файлы, установленные пакетом, изменились на диске, это ваш лучший выбор. И, положа руку на сердце, в общем гаме технологического хайпа найти что-то столь фундаментально практичное — это уже победа.
За Гранью Сканирования Уязвимостей
Прежде чем вы примете это за универсальное средство безопасности, давайте немного остынем. Коллеги, которые пишут debsecan, заняты поиском известных уязвимостей — тех самых CVE, от которых у команд безопасности волосы встают дыбом. debsums играет совсем в другую игру. Он не спрашивает, уязвим ли пакет. Он спрашивает, являются ли файлы, которые этот пакет туда положил, всё ещё оригинальными файлами.
Представьте так: debsecan — это полицейский, который проверяет ваш паспорт, чтобы узнать, есть ли вы в списке наблюдения. debsums — это охранник, который сравнивает ваш багаж с манифестом. Две разные задачи, обе важные, но вы же не отправите досмотрщика багажа опрашивать подозреваемых.
debsums творит свою магию, сравнивая файлы на вашей системе с MD5-суммами. Эти суммы аккуратно спрятаны в /var/lib/dpkg/info/*.md5sums для каждого пакета. Если рассчитанная сумма файла на вашем диске не совпадает с той, что записана в файле .md5sums, debsums поднимет тревогу.
Что он может обнаружить?
- Локально изменённые файлы пакетов (классика жанра).
- Файлы, которые полностью пропали.
- Определённые типы повреждения данных или «гниения бит», которые могут произойти.
Но, как быстро указывает man страница — и к этому стоит прислушаться — это не полномасштабный аудит безопасности. Это в первую очередь поиск файлов, которые были локально подделаны или повреждены аппаратными проблемами. Это различие критично для установки правильных ожиданий.
Начало Работы: Просто (Почти)
Если вы используете Debian или Ubuntu, установка debsums сводится к паре стандартных команд:
sudo apt-get update
sudo apt-get install debsums
Чтобы убедиться, что он установлен, короткая команда:
debsums --version
подтвердит это.
Когда вы только начинаете разбираться, действуйте поэтапно. Если конкретный пакет, скажем, bash, доставляет неприятности, выполните:
debsums bash
Если всё в порядке, вы, вероятно, получите тишину. Это лучшая тишина в мире системного администрирования.
Для более быстрой диагностики, особенно когда вам просто нужно увидеть проблемы, флаг --silent — ваш друг:
debsums --silent bash
Он подавляет весь вывод для неизменённых файлов, оставляя вам только ошибки. Очень удобно.
Теперь, для быстрой проверки всего хоста — команды, к которой я бы прибегнул во время плановой проверки состояния — это ваш вариант:
sudo debsums -c
Флаг -c означает --changed, и он подразумевает --silent. Таким образом, он сообщает только о файлах, которые действительно были изменены. Если эта команда ничего не возвращает, вы обычно можете выдохнуть с облегчением.
Конфигурационные Файлы: Обращайтесь Осторожно
Вот момент, где debsums проявляет некоторую тонкость, и, честно говоря, это разумно:
По умолчанию debsums активно игнорирует конфигурационные файлы, расположенные в /etc. Почему? Потому что ожидается, что эти файлы будут меняться. При установке приложения часто предполагается, что вы будете настраивать его конфигурацию. Перезапись этих пользовательских изменений стандартными значениями из пакета была бы катастрофой.
Если вы хотите включить конфигурационные файлы в проверку — возможно, вас беспокоят непреднамеренные изменения — вы можете использовать флаг -a (для --all):
sudo debsums -ca
А если вы хотите проверить только конфигурационные файлы, это тоже возможно:
sudo debsums -ce
Используйте эти опции с умом. Изменённый конфигурационный файл — это не всегда плохо; иногда это просто нормальная, ответственная системная администрация.
Когда Контрольные Суммы Пропадают
Не каждый пакет поставляется с удобным файлом .md5sums. debsums может показать, каким пакетам не хватает этой информации, используя флаг -l:
debsums -l
Это не означает, что эти пакеты по своей сути скомпрометированы или сломаны. Это просто означает, что debsums не может проверить их файлы по локальным контрольным суммам, потому что их изначально нет. Вам придётся разбираться с такими случаями индивидуально, возможно, полагаясь на репозиторий пакетов или проводя более глубокие ручные проверки.
Перестроение Кэша Контрольных Сумм
Что, если вы хотите, чтобы debsums имел больше данных для работы, особенно для тех пакетов, у которых отсутствуют контрольные суммы? man страница Debian предлагает неплохой трюк: загрузите архивы пакетов в ваш APT-кэш.
Сначала получите список пакетов, у которых отсутствуют контрольные суммы:
debsums -l
Затем используйте этот список для загрузки соответствующих .deb-файлов:
sudo apt-get --reinstall -d install $(debsums -l)
Это заполнит ваш каталог /var/cache/apt/archives. Теперь debsums может использовать эти закэшированные архивы для генерации контрольных сумм там, где их раньше не было. Вы можете выполнить более полную проверку, используя флаги -g (generate) и -p (path):
sudo debsums -cagp /var/cache/apt/archives
Вот что означают эти флаги:
-c: Показать изменённые файлы.-a: Включить конфигурационные файлы.-g: Сгенерировать контрольные суммы для пакетов, которым их не хватает (используя закэшированные.deb-файлы).-p /var/cache/apt/archives: Указывает каталог, где находятся закэшированные.deb-файлы.
Эта последовательность команд, пожалуй, является одной из самых мощных проверок целостности, которую можно выполнить на Debian-хосте. Это полный системный скан, который выходит за рамки простой проверки быстрых модификаций.
Практический Рабочий Процесс для Проверок Системы
Если бы мне поручили проверить Debian-сервер, который ведёт себя подозрительно, я бы, скорее всего, действовал так:
-
Быстрый Скан на Изменения:
bash sudo debsums -cЭто даст вам немедленное представление о любых файлах, которые были изменены с момента установки. Это ваша первая линия обороны. -
Включить Конфигурационные Файлы:
bash sudo debsums -caЕсли первоначальный скан ничего не выявил, но вы всё ещё подозреваете что-то, расширьте область проверки, включив конфигурационные файлы. Помните, они часто меняются намеренно, но полезно знать, что именно изменилось. -
Выявить Пакеты Без Контрольных Сумм:
bash debsums -lЭто отметит пакеты, которыеdebsumsне может проверить. Вам придётся исследовать их отдельно. -
Загрузить Архивы Отсутствующих Пакетов:
bash sudo apt-get --reinstall -d install $(debsums -l)Подготовьтесь к более глубокой проверке, загрузив необходимые файлы. -
Комплексный Скан Целостности:
bash sudo debsums -cagp /var/cache/apt/archivesЭто финал. Это тщательная проверка, использующая всю доступную информацию, чтобы дать вам максимально ясную картину целостности вашей системы.
Этот структурированный подход даёт гораздо более чёткий сигнал, чем случайное сравнение файлов (diff) в /usr в надежде наткнуться на нужную проблему. Это методично.
Восстановление После Изменений
Итак, debsums -c выдал изменённый файл, например, /usr/bin/example-tool. Что теперь? Вам нужно узнать, какой пакет им владеет. Команда dpkg -S здесь ваш помощник:
dpkg -S /usr/bin/example-tool
Это покажет что-то вроде example-package: /usr/bin/example-tool, чётко идентифицируя ответственный пакет.
Зная имя пакета, вы можете перейти к его переустановке. man страница debsums описывает пайплайн для этого, но разбивка по шагам даёт вам больше контроля:
-
Найти изменённые файлы:
bash sudo debsums -c -
Получить владеющий пакет для всех изменённых файлов и сделать их уникальными:
bash dpkg -S $(sudo debsums -c) | cut -d: -f1 | sort -u -
Переустановить эти пакеты:
bash sudo apt-get install --reinstall $(dpkg -S $(sudo debsums -c) | cut -d: -f1 | sort -u)
Будьте осторожны с последней командой. Она невероятно полезна для восстановления управляемых пакетами файлов до их первоначального состояния. Однако это не волшебная палочка, означающая, что каждый изменённый файл следует слепо перезаписывать. Если файл был изменён намеренно и это изменение всё ещё требуется, полная переустановка может сломать вашу систему. Всегда понимайте, почему файл изменился, прежде чем слепо его восстанавливать.
Речь идёт не об абсолютной, недостижимой безопасности. Речь о практичной, проверяемой целостности. И для этого debsums — незаменимый инструмент в арсенале Debian-администратора. Он снимает все вопросы.