Введение
Небольшой магазин использует сервис заказов для связи клиентов, товаров и количества. После подготовленного инцидента пропали два заказа. Ваша задача — вернуть нужные данные, не заменяя независимый публичный каталог. Все люди и записи вымышлены; вредоносного ПО нет.
Резервная копия служит для восстановления. Архив объединяет файлы, а контрольная сумма описывает их байты. Вы узнаете, почему сумма полезна только при доверенном эталоне, и восстановите настоящую базу SQLite через промежуточный каталог. Это ограниченная практика восстановления, а не полная процедура реагирования на инциденты.
Достаточно уметь вводить команды и переключать вкладки. Workstation и App Server — отдельные терминальные сеансы одного учебного узла с разными начальными каталогами, а не разные машины. Веб-интерфейс доступен в Order Service.
Сохраните повреждённые данные сервиса
На этом шаге вы разберётесь в недостающих деловых данных и сохраните копию для отката до изменения сервиса.
Откройте Order Service. Обычно строка связывает номер заказа с клиентом, статусом, товаром и количеством. Нужная точка восстановления содержит три заказа:
| Заказ | Клиент | Статус | Товар | Количество |
|---|---|---|---|---|
| 4101 | Mina | packed | notebook | 1 |
| 4102 | Jon | packed | notebook | 2 |
| 4103 | Asha | packed | notebook | 3 |
Сейчас виден только 4101. Нажмите Public catalog: кружки, блокноты и сумки должны по-прежнему присутствовать. Этот файл не относится к базе и должен сохраниться. Затем вернитесь к заказам.
API — интерфейс сервиса для программ. В Workstation команда curl обращается к API; -f считает ошибки сервера неудачей, -s скрывает прогресс, а -S оставляет сообщения об ошибках. 127.0.0.1 обозначает этот же узел, 8080 — порт сервиса.
curl -fsS http://127.0.0.1:8080/api/orders
Результат — массив JSON, список строк в квадратных скобках. Есть только запись Mina. Успешный запрос не означает полноты деловых данных.
Перейдите в App Server. pwd выводит текущий каталог:
pwd
Ожидается /srv/order-service. SQLite хранит таблицы приложения в orders.db. У подготовленного сервиса нет писателей, он заново открывает базу для каждого запроса, поэтому копирование здесь безопасно. Активной производственной базе нужна процедура резервирования, согласованная с приложением.
cp принимает сначала источник, затем назначение. Сохраните текущую базу вне каталога приложения, чтобы отменить ошибочное восстановление:
cp /srv/order-service/orders.db /home/labex/project/recovery/damaged-before-recovery.db
Отсутствие вывода обычно означает завершение копирования. Не повторяйте команду после восстановления: восстановленная база перезапишет копию для отката. Повреждённое состояние сохранено; сам сервис ещё предстоит восстановить.
Выберите доверенный архив восстановления
На этом шаге вы отвергнете изменённые байты и поместите подходящий проверенный архив в промежуточный каталог.
Перейдите в Workstation. cd меняет каталог, ls показывает его содержимое. Абсолютный путь начинается с / и не зависит от текущего каталога.
cd /home/labex/project/recovery/backups
ls
Есть три архива .tar.gz: tar объединяет файлы, gzip сжимает их. Имена описывают время восстановления; самая новая копия не обязательно безопасна и подходит.
cat выводит текстовый файл. Прочитайте описания точек, отдельно предоставленные хранителем копий:
cat /opt/backup-custodian/recovery-points.txt
Архив 0800 предшествует заказам 4102 и 4103. 0900 включает нужную точку. Кандидат 1000 позднее, но его целостность тоже надо проверить.
Целостность означает неизменность байтов относительно эталона. SHA-256 создаёт дайджест для сравнения. Манифест хранителя принадлежит root и находится вне обычного редактируемого каталога восстановления. Сценарий предполагает независимый защищённый канал доставки; подписи и распространение ключей здесь не изучаются. Администратор может обойти локальное владение, поэтому учебный узел не является неуязвимым якорем доверия.
sha256sum -c читает пары имя/дайджест и сравнивает соответствующие файлы текущего каталога. Используйте независимый манифест:
sha256sum -c /opt/backup-custodian/SHA256SUMS
0800 и 0900 должны показать OK, 1000 — FAILED. Ненулевой код и предупреждение ожидаемы: как минимум один архив изменён. Не извлекайте этот кандидат.
Соседний манифест можно менять вместе с копиями. Сравните результат:
sha256sum -c SHA256SUMS
Все три показывают OK. Тот, кто меняет архив, может заменить и сумму рядом. Совпадение с недоверенным дайджестом не доказывает подлинности. 0800 не изменён, но не содержит нужных записей. Выберите 0900: он неизменён и подходит.
Промежуточный каталог позволяет проверить данные до вмешательства в работающий сервис. mkdir -p создаёт каталог и допускает его существование:
mkdir -p /home/labex/project/recovery/stage
Скопируйте туда проверенный кандидат:
cp orders-0900.tar.gz /home/labex/project/recovery/stage/orders-0900.tar.gz
При ошибке в источнике cp сообщит, что файл не найден; проверьте ls и повторите. Контроль оценивает реальные байты подготовленного архива, а не письменное заявление о проверке.
Проверьте промежуточную базу
На этом шаге вы просмотрите состав архива, извлечёте единственный ожидаемый файл и прочитаете подготовленную базу без изменений.
В Workstation перейдите в промежуточный каталог:
cd /home/labex/project/recovery/stage
tar -tvzf показывает состав gzip-архива: t — список, v — тип и права, z — gzip, f — имя архива. Просмотр ничего не извлекает.
tar -tvzf orders-0900.tar.gz
Единственным участником должен быть orders.db; поле прав начинается с -, обозначая обычный файл. При абсолютных путях, компонентах .., ссылках или неожиданных файлах остановитесь. Проверка имён полезна здесь, поскольку доверенный учебный архив содержит один обычный файл; это не полная политика безопасной распаковки произвольных архивов. Никогда не запускайте программы из подозрительной копии.
Для извлечения используйте x вместо t, убрав подробный режим v. Последний orders.db ограничивает извлечение этим файлом, а --no-same-owner сохраняет ваше владение:
tar -xzf orders-0900.tar.gz --no-same-owner orders.db
SQLite хранит связанные таблицы в одном файле. Подготовленный инструмент db-view открывает базу только для чтения, проверяет внутреннюю согласованность и связи и показывает объединённые деловые строки. Писать SQL или редактировать базу не нужно. Передайте путь подготовленного файла:
/opt/c11-runtime/db-view /home/labex/project/recovery/stage/orders.db
Ожидаются Integrity: ok, Relationships: ok и все три заказа. Исправная база может относиться к неправильному моменту: сравните клиентов, статусы и количества с шагом 1.
Неверный путь вызывает ошибку, а не создание пустой базы. Проверьте pwd и ls, затем повторите. При других данных вернитесь к независимому манифесту и выберите правильный архив до повторного извлечения. Сайт всё ещё повреждён: подготовка сама по себе не восстанавливает приложение.
Восстановите и проверьте работающий сервис
На этом шаге вы замените только назначенную базу и подтвердите восстановление настоящими запросами, сохранив публичный файл.
Перейдите в App Server. Копия для отката находится вне этого каталога, а подготовленная база прошла проверку. Скопируйте только её в назначенный путь приложения:
cp /home/labex/project/recovery/stage/orders.db /srv/order-service/orders.db
Источник и назначение — разные файлы. Не копируйте весь промежуточный каталог поверх /srv/order-service: там находятся посторонние файлы, которые надо сохранить. Перезапуск демона не нужен: подготовленное приложение только для чтения закрывает базу после каждого запроса. Другим приложениям может требоваться документированное обслуживание или перезапуск.
Обратитесь к приложению вместо того, чтобы полагаться на наличие копии или текстового файла restored:
curl -fsS http://127.0.0.1:8080/api/orders
Ожидаются 4101, 4102 и 4103 с верными клиентами, статусом packed и количествами 1, 2, 3. Откройте Order Service и обновите страницу: таблица должна совпадать.
Проверьте и независимый публичный файл:
curl -fsS http://127.0.0.1:8080/uploads/catalog.txt
Public catalog: mugs, notebooks, tote bags
Нажмите Public catalog в браузере и подтвердите содержимое. Восстановление означает возврат нужных данных при сохранении посторонних нормальных функций.
Если сервис сообщает Database unavailable, снова проверьте промежуточную базу и повторите копирование одного файла с правильными абсолютными путями. Чтобы вернуться к повреждённому исходному состоянию во время поиска ошибки, используйте сохранённую копию:
cp /home/labex/project/recovery/damaged-before-recovery.db /srv/order-service/orders.db
Последняя команда намеренно отменяет восстановление. Если вы её использовали, перед завершением снова скопируйте проверенную промежуточную базу в активный путь. Сохраните файл отката для дальнейшего разбора.
Резюме
Вы сохранили копию для отката, сравнили байты с независимым доверенным манифестом, выбрали подходящий момент и проверили промежуточную базу SQLite. Затем восстановили настоящий сервис и проверили связи и посторонний публичный файл. Новизна, неизменность и пригодность — разные свойства; безопасное восстановление требует их правильного сочетания.



