資安觀念

網站備份為什麼重要:備份檔存在,不等於能成功還原

網站備份的重點不只在檔案存在;本文整理備份範圍、異地保存、版本週期與定期還原測試。

網站備份為什麼重要:備份檔存在,不等於能成功還原

備份成功訊息只證明某個工作排程跑完,不代表資料完整、密鑰可用、版本相容或真的能還原。網站備份必須從 RPO、RTO、資料範圍、異地保存與還原演練一起設計。

01

先定義 RPO 與 RTO

RPO 是最多可接受遺失多少時間的資料;RTO 是服務必須在多久內恢復。內容站可能接受每日備份,交易或會員系統則需要更短的資料庫備份與日誌。

沒有這兩個目標,就無法判斷備份頻率、成本與還原優先序是否合理。

02

備份範圍要包含資料、設定與依賴

  • 網站程式與可重建的 release artifact。
  • 資料庫、上傳檔案與物件儲存。
  • 環境設定、Web Server、排程、DNS 與憑證部署方式。
  • 套件 lockfile、容器映像與基礎設施程式碼。
  • 復原所需的金鑰清單與輪替程序,但秘密應分開加密保存。
03

採用 3-2-1 並隔離勒索風險

至少保留三份資料、兩種介質、一份異地或離線。雲端快照與正式系統在同一帳號、同一管理權限下,遇到帳號接管時可能一起被刪除。

備份帳號應使用獨立憑證、不可變保存與刪除保護,應用主機只具備寫入新備份的最低權限。

04

產生一致性備份並驗證雜湊

以下只示範流程骨架;實際資料庫要使用對應的一致性選項:

set -euo pipefail
stamp=$(date +%Y%m%d-%H%M%S)
mkdir -p "/backup/$stamp"

mysqldump --single-transaction --routines --events appdb   | gzip -9 > "/backup/$stamp/appdb.sql.gz"

tar -C /srv/www -czf "/backup/$stamp/uploads.tar.gz" uploads
sha256sum /backup/$stamp/* > "/backup/$stamp/SHA256SUMS"
age -r "$BACKUP_RECIPIENT" -o "/backup/$stamp.tar.age" < <(tar -C /backup -cf - "$stamp")

不要把資料庫密碼直接寫在命令列,避免出現在程序清單與 history;使用受限的 option file 或秘密管理服務。

05

還原演練要在隔離環境完整啟動

  1. 從異地位置取得指定版本備份。
  2. 驗證雜湊、解密與解壓縮。
  3. 建立乾淨主機與相容版本的資料庫。
  4. 匯入資料、檔案與設定。
  5. 執行登入、查詢、上傳、排程與外部整合測試。
  6. 記錄實際耗時、缺少項目與下一步修正。

只打開壓縮檔或執行 SQL 語法檢查,不算完整還原測試。

06

保留版本並定期測試刪除與災難情境

可採每日 14 份、每週 8 份、每月 12 份等分層保留,依 RPO 與法規調整。除了硬體故障,也要演練誤刪資料、惡意加密、雲端帳號停權與最新備份已受污染的情境。

合格標準:能由指定人員在目標 RTO 內,從不依賴正式環境的備份恢復可驗證服務。

演練紀錄

記錄備份版本、開始與完成時間、實際 RPO/RTO、失敗步驟與修正負責人,下一次演練才能驗證改善是否生效。