Как проверить целостность файлов и пакетов при передаче в Linux?

«Как проверить целостность файлов и пакетов при передаче в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-пайплайнах целостность данных критична при загрузке артефактов, образов Docker или конфигураций. Используем криптографические хеш-суммы и встроенные проверки пакетов.

1. Проверка хеш-сумм файлов Скачиваем файл и его эталонную хеш-сумму (например, package.tar.gz и package.tar.gz.sha256).

# Вычисляем SHA256 сумму скачанного файла
sha256sum package.tar.gz
# Сравниваем с ожидаемой (вывод должен быть 'OK')
echo "expected_sha256_hash  package.tar.gz" | sha256sum -c -

# Для быстрой проверки в одну строку
curl -sL https://example.com/file.tar.gz | sha256sum --check <(echo "expected_hash  -")

2. Проверка системных пакетов

# Для RPM-пакетов (CentOS/RHEL)
rpm -V nginx  # Проверяет изменения в установленных файлах
rpm -K package.rpm  # Проверяет GPG-подпись и целостность самого .rpm файла

# Для DEB-пакетов (Debian/Ubuntu)
dpkg -V nginx  # Проверка установленного пакета
debsums -c nginx  # Проверка контрольных сумм файлов

3. Проверка целостности при копировании (rsync) Используем rsync с флагом -c для проверки на основе контрольных сумм, а не размера/даты.

rsync -avc /source/ user@remote:/destination/

4. Интеграция в CI/CD пайплайн Пример шага в GitLab CI для проверки загруженного артефакта:

validate_artifact:
  stage: deploy
  script:
    - wget -O app.jar ${ARTIFACT_URL}
    - echo "${CI_COMMIT_SHA}  app.jar" | sha256sum -c
    - echo "Integrity check passed"

5. Проверка целостности файловых систем Для мониторинга критических системных файлов можно использовать AIDE (Advanced Intrusion Detection Environment).