کارشناس زن کنار تجهیزات آموزشی پشتیبان‌گیری و بازیابی

WIUNIX ACADEMY

پشتیبان‌گیری رمزگذاری‌شده با restic و آزمون بازیابی در محیط جدا

از خروجی ثابت برنامه روی میزبان مستقل پشتیبان بگیرید، شناسهٔ دقیق snapshot را نگه دارید و بازیابی را با مقایسهٔ فایل‌ها و آزمون برنامه بسنجید.

پیشرفته50 دقیقه مطالعهبه‌روزرسانی
محیطت را انتخاب کن

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Ubuntu 26.04 LTSبررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من7 مقدار قابل‌تغییر

از اینجا شروع کن

در پایان چه چیزی خواهی داشت؟

برای یک خروجی ثابت و سازگار برنامه، پشتیبان خارج از میزبان بسازید و همان snapshot را در مسیر جدا بازیابی و با فایل‌های اصلی مقایسه کنید.

سیستم‌عامل‌ها و نسخه‌های پوشش‌داده‌شده

فرمان‌ها و تفاوت‌های محیط‌های منتخب با مستندات رسمی بررسی شده‌اند؛ این بررسی به معنای اجرای عملی روی همهٔ سیستم‌ها یا سرویس شما نیست.

قبل از شروع

  • نسخهٔ موجود و تأییدشدهٔ restic با امکانات مستند این آموزش، خروجی ثابت برنامه و مسئول مشخص داده.
  • میزبان SFTP مستقل با هویت SSH اختصاصی، کلید میزبان تأییدشده و مسیر تازهٔ مورد تأیید برای مخزن.
  • فضای کافی بازیابی و محل مستقل و محافظت‌شده برای رمز مخزن و اطلاعات بازیابی؛ مسیر بازیابی نباید از قبل وجود داشته باشد.
01

قدم بعدی

ابزار میزبان انتخاب‌شده را آماده کنید

ابزارهای لازم را روی کامپیوتر یا سروری آماده کنید که فرمان‌های مدیریتی را از آن اجرا می‌کنید. پیش از تأیید، فهرست تغییر بسته‌ها را بخوانید؛ داخل کانتینر برنامه ابزار نصب نکنید. کلاستر، سرویس و باینری‌های اصلی باید از قبل با نسخهٔ مورد تأیید موجود باشند. پنل‌های بعد را در Bash اجرا کنید. نصب بسته روی همین میزبان تغییر ایجاد می‌کند، اما سرور برنامهٔ تازه‌ای راه نمی‌اندازد.

این مسیر برای کلاینت موجود و تأییدشدهٔ restic نسخهٔ۰٫۱۹٫۱ یا ساخت سازگاری است که جداگانه بررسی شده باشد. بستهٔ Debian12 نسخهٔ۰٫۱۴ و Debian13 نسخهٔ۰٫۱۸ است؛ صرف نصب بستهٔ توزیع را برآورده‌شدن این پیش‌نیاز ندانید. پنل بسته‌ها عمداً restic را نصب یا ارتقا نمی‌دهد و EPEL را فعال نمی‌کند. باینری دیگر فقط پس از تأیید و بررسی انتشار و امضای رسمی وارد شود.

bash

میزبان انتخاب‌شده؛ نصب بسته فقط با مجوز تغییر همین میزبان

sudo apt-get update
sudo apt-get install --no-install-recommends ca-certificates curl bash coreutils openssh-client openssl python3 findutils
cat /etc/os-release
command -v bash curl timeout
restic version
ssh -V
python3 --version
openssl version
command -v sha256sum find sort xargs
از کجا بدانم درست انجام شد؟

نسخهٔ سیستم با انتخاب شما یکسان باشد، ابزارها پیدا شوند و نسخهٔ کلاینت و سرویس با شرایط بالا سازگار باشند. اگر باینری موجود نیست یا سازگار نیست، ادامه ندهید.

حفاظت میزبان و مسیرهای نصب موجود را حفظ کنید

در Ubuntu و Debian ممکن است AppArmor و قواعد دیوارهٔ آتش میزبان فعال باشند. این روند پورت ورودی باز نمی‌کند و پروفایل امنیتی را تغییر نمی‌دهد. اگر دسترسی فایل یا شبکه رد شد، لاگ و سیاست سرویس را با مسئول آن بررسی کنید. مسیر نصب واقعی را حفظ کنید؛ مسیرهای نمونهٔ فرم، کشف خودکار محل نصب نیستند.

پیش از گرفتن پشتیبان، معیار بازیابی را تعیین کنید

پایان موفق بارگذاری به معنای بازیابی برنامه نیست. منبع، نقطهٔ سازگاری، بیشترین مقدار قابل قبولِ از دست‌رفتن داده (RPO) و زمان هدف بازیابی (RTO) را مشخص کنید. این راهنما از خروجی فایلِ ثابت برنامه پشتیبان می‌گیرد و فایل‌های پایگاه دادهٔ زنده را از نظر تراکنشی سازگار نمی‌کند. ابتدا روش بومی پشتیبان یا خروجی پایگاه داده را اجرا کنید و اطلاعات لازم برای بازیابی آن را همراه نگه دارید.

خارج از میزبان یعنی حوزهٔ خرابی مستقل با دسترسی جدا، نه پوشه‌ای دیگر روی همان دیسک. رمزگذاری از محتوای مخزن محافظت می‌کند، اما دارندهٔ مجوز حذف همچنان می‌تواند پشتیبان را نابود کند. نگه‌داری تغییرناپذیر، حالت فقط‌افزودن و جداسازی اعتبارنامه به طراحی متناسب با مقصد نیاز دارند؛ SFTP به‌تنهایی آن‌ها را فراهم نمی‌کند.

02

قدم بعدی

نسخه، مقصد و هویت سرور را پیش از نوشتن تأیید کنید

از کلاینت پشتیبانی‌شدهٔ موجود و هویت SSH اختصاصی پشتیبان استفاده کنید. کلید میزبان مقصد را از راه مستقل و مطمئن تأیید کنید و بررسی آن را خاموش نکنید. مسیر مخزن باید تازه و مورد تأیید باشد و حساب پشتیبان بتواند در والد آن بنویسد. محدودیت‌های فعلی SSH را با مسئول سرور بررسی کنید؛ برای عبور از خطا مجوزها را گسترده نکنید.

bash

خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید

restic version
ssh -o BatchMode=yes -o StrictHostKeyChecking=yes 'backup@backup.example.com' 'pwd'
ssh -o BatchMode=yes -o StrictHostKeyChecking=yes 'backup@backup.example.com' 'test ! -e /srv/restic/academy-repo'
از کجا بدانم درست انجام شد؟

نسخه و هویت مقصد روشن باشند، اتصال با کلید میزبان معتبر برقرار شود و مسیر مخزن هنوز وجود نداشته باشد.

03

قدم بعدی

رمز مخزن را مستقیم در فایل محافظت‌شده بسازید

پوشهٔ خصوصی تازه را با دسترسی محدود بسازید و رمز تصادفی را مستقیم در فایل بنویسید. رمز نباید مقدار فرم یا آرگومان فرمان شود. پیش از اتکا به پشتیبان، نسخهٔ بازیابی رمز و دسترسی SSH را در سازوکار محرمانهٔ مستقل نگه دارید. ازدست‌رفتن همهٔ رمزها و کلیدهای مخزن، بازیابی را ناممکن می‌کند.

bash

خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید

umask 077
mkdir '/home/operator/academy-restic-private' || exit 1
openssl rand -base64 48 > '/home/operator/academy-restic-private/repository-password' || exit 1
chmod 600 '/home/operator/academy-restic-private/repository-password'
stat -c '%a %n' '/home/operator/academy-restic-private' '/home/operator/academy-restic-private/repository-password'
از کجا بدانم درست انجام شد؟

فایل رمز فقط برای حساب مجاز قابل خواندن باشد و برنامهٔ نگه‌داری مستقل اطلاعات بازیابی مشخص شده باشد.

04

قدم بعدی

جدابودن منبع، محل اطلاعات محرمانه و مقصد بازیابی را کنترل کنید

منبع باید خروجی ثابت و خواندنی باشد و مسیر بازیابی نباید وجود داشته باشد. بررسی مسیرها هم‌پوشانی در هر دو جهت، مسیر بازیابیِ موجود یا پیوندی و انتخاب ریشهٔ فایل‌سیستم به‌عنوان منبع را رد می‌کند. پوشهٔ اطلاعات محرمانه نیز باید بیرون منبع و مقصد بازیابی باشد. والد مقصد بازیابی باید از قبل وجود داشته و قابل نوشتن باشد. فضای محلی واقعی و ظرفیت مخزن دور را بررسی کنید؛ نسبت deduplication را از پیش فرض نکنید. مقدار معتبر فرم، مالکیت واقعی مسیر را ثابت نمی‌کند.

bash

خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید

python3 - <<'PY'
from pathlib import Path
import os
s=Path('/srv/backup-export').resolve(strict=True)
p=Path('/home/operator/academy-restic-private').resolve(strict=True)
assert p.is_dir(), 'Invalid private directory'
r=Path('/srv/academy-restic-restore')
assert s.is_dir() and s != Path(s.anchor), 'Invalid source'
assert not r.exists() and not r.is_symlink(), 'Restore target already exists'
r=r.resolve()
assert s != r and s not in r.parents and r not in s.parents, 'Overlapping source/restore'
assert p != s and s not in p.parents and p not in s.parents, 'Private directory overlaps source'
assert p != r and p not in r.parents and r not in p.parents, 'Private directory overlaps restore'
parent=r.parent.resolve(strict=True)
assert parent.is_dir() and os.access(parent,os.W_OK|os.X_OK), 'Restore parent is not writable'
print('Source/private/restore paths are non-overlapping; restore parent exists and is writable')
PY
du -xsh -- '/srv/backup-export'
df -h -- '/srv/backup-export' '/home/operator/academy-restic-private' "$(dirname -- '/srv/academy-restic-restore')"
از کجا بدانم درست انجام شد؟

سه مسیر پس از حل مسیر واقعی هم‌پوشانی نداشته باشند، والد بازیابی قابل نوشتن باشد و فضای لازم بررسی شده باشد.

همهٔ آموزش‌های آکادمی ↗