مستندات restic کنار دستور init هشدار می‌دهد: «اگر رمز را گم کنید، به داده‌های ذخیره‌شده در مخزن دسترسی نخواهید داشت». هر طرح بکاپ با restic پیش از انتخاب سرویس ذخیره‌سازی باید جوابی برای این جمله داشته باشد. برنامه restic داده را پیش از ارسال به S3 رمزنگاری می‌کند؛ ارائه‌دهنده محتوا را نمی‌خواند و کلید همه چیز، رمز مخزن است.

تهدیدآنچه نجاتتان می‌دهددستور یا تنظیم restic
گم شدن رمز مخزننسخه دوم رمز بیرون از سروردستور key add
کلید S3 دزدیده‌شدهمقصدی که حذف را نمی‌پذیردحالت --append-only در rest-server
خرابی خاموش دادهخواندن نمونه‌ای از داده مخزنگزینه check --read-data-subset
سیاست نگهداری اشتباهپیش‌نمایش حذفگزینه forget --dry-run

💡 جای رمز مخزن و کلیدهای S3

برنامه restic داده را روی خود سرور رمز می‌کند و بعد می‌فرستد؛ کدش متن‌باز است.
✅ نسخه‌ای از رمز مخزن را پیش از نخستین backup بیرون از همان سرور بگذارید.
✅ دستورها را اول روی مخزن محلی بیازمایید.

رمزنگاری پیش از ارسال، مسئله اعتماد به ارائه‌دهنده را حل می‌کند و سؤال تازه‌ای می‌سازد: رمز و کلیدها کجا هستند و چه کسی به آن‌ها می‌رسد. بحث تفاوت اسنپ شات و بکاپ نشان داده چرا اسنپ‌شات پنل نسخه بیرون از سرور نیست.

بکاپ با restic، فایل رمز جدا از سرور و مخزن رمزنگاری‌شده روی فضای ذخیره‌سازی ابری

مخزن رمزنگاری‌شده روی Object Storage

مخزن restic روی Object Storage یک bucket است که restic فقط داده رمزنگاری‌شده در آن می‌نویسد. نشانی‌اش با پیشوند s3: شروع می‌شود و کلیدها از متغیرهای AWS_ACCESS_KEY_ID و AWS_SECRET_ACCESS_KEY خوانده می‌شوند؛ این قاعده برای Amazon S3 و سرویس‌های سازگار از جمله MinIO یکی است.

خروجی‌های این صفحه از بکاپ با restic 0.19.1 روی یک مخزن محلی آزمایشی است؛ دستورهای S3 از مستندات آمده‌اند. بسته apt اوبونتو 24.04 نسخه 0.16.4 است؛ باینری رسمی را در /usr/local/bin/restic بگذارید و با restic self-update به‌روز نگه دارید.

ساخت مخزن با init

کلیدی که در خط فرمان تایپ شود، در تاریخچه shell می‌ماند. برای آزمون نخست مهم نیست؛ کار شبانه از فایل محیطی می‌خواند.

export AWS_ACCESS_KEY_ID=PLACEHOLDER_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=PLACEHOLDER_SECRET_KEY
restic -r s3:https://s3.example.com/backup-bucket init

طبق صفحه ساخت مخزن در مستندات restic، شکل کلی نشانی s3:https://server:port/bucket_name است. init این هشدار را چاپ کرد:

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

نخستین backup با exclude

کش و فایل موقت، حجم مخزن را بی‌دلیل بالا می‌برند. گزینه --exclude الگو می‌گیرد و --exclude-caches محتوای پوشه‌های دارای CACHEDIR.TAG را کنار می‌گذارد.

restic backup /var/www /etc --exclude-caches \
  --exclude="/var/www/*/cache" --exclude="/var/www/cache"

اسلش اول، الگو را از ریشه حساب می‌کند و ستاره از روی / رد نمی‌شود. ما دیر فهمیدیم: در آزمون، الگوی ستاره‌دار site1/cache را کنار گذاشت ولی خود www/cache را نه؛ الگوی دوم برای همین است.

مخزن رمزنگاری‌شده روی Object Storage

رمز مخزن تنها راه بازگشت داده است

برنامه restic داده مخزن را با کلیدهایی رمز می‌کند که فقط با رمز مخزن باز می‌شوند. مدل تهدید restic می‌گوید محتوای فایل‌ها و متادیتا بدون رمز در دسترس نیست؛ پس بعد از گم شدن رمز، نه ارائه‌دهنده راه میانبری دارد و نه شما.

پاکت مهروموم سؤالات کنکور از دست راننده و انباردار می‌گذرد و هیچ‌کدام سؤال‌ها را نمی‌خوانند؛ حساسیت ماجرا روی کسی است که اجازه باز کردنش را دارد. بکاپ با restic آن اجازه را از دیسک ارائه‌دهنده برمی‌دارد و در یک فایل کوچک متنی می‌گذارد.

⚠️ رمزی که فقط روی سرور است، با سرور از دست می‌رود

اگر تنها نسخه رمز در /etc/restic همان سرور بوده باشد، مخزن سالم روی S3 دیگر باز نمی‌شود و restic فقط Fatal: wrong password or no key found برمی‌گرداند.

فایل رمز و RESTIC_PASSWORD_FILE

رمزی که داخل اسکریپت نوشته شود، با هر کپی اسکریپت جابه‌جا می‌شود. مستندات برای اجرای خودکار RESTIC_PASSWORD_FILE و RESTIC_REPOSITORY را پیشنهاد می‌کنند. فایل را از اول با مجوز بسته بسازید و همان رمز init را در آن بنویسید:

install -d -m 700 /etc/restic
install -m 600 /dev/null /etc/restic/password
export RESTIC_REPOSITORY=s3:https://s3.example.com/backup-bucket
export RESTIC_PASSWORD_FILE=/etc/restic/password

در آزمون اول، فایل رمز را از سر عادت کنار پوشه مخزن ساخته بودیم؛ کسی که آن پوشه را بردارد رمز را هم برده است.

کلید دوم با key add

با یک رمز، یک اشتباه برای قفل شدن مخزن کافی است. دستور key add رمز دومی به همان مخزن اضافه می‌کند و جای آن در مدیر رمز یا روی کاغذ، بیرون از سرور است.

restic key add --new-password-file /root/second-pass
restic key list
shred -u /root/second-pass

رمز دوم را پیش از shred -u به مدیر رمز ببرید؛ در key list کلید فعلی ستاره دارد.

اجرای شبانه با systemd timer

🔸 فایل محیطی، پوشه کش و تایمر systemd

خود restic زمان‌بندی داخلی ندارد. سرویس سیستمی بدون User= متغیر HOME ندارد و restic 0.19.1 بدون پوشه کش متوقف می‌شود؛ CacheDirectory=restic پوشه /var/cache/restic را می‌سازد و RESTIC_CACHE_DIR مسیرش را به restic می‌دهد. درصد داخل فایل واحد به شکل %% نوشته می‌شود؛ پیش‌نویس اول ما 5% بود.

# /etc/restic/env  (chmod 600)
RESTIC_REPOSITORY=s3:https://s3.example.com/backup-bucket
RESTIC_PASSWORD_FILE=/etc/restic/password
RESTIC_CACHE_DIR=/var/cache/restic
AWS_ACCESS_KEY_ID=PLACEHOLDER_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=PLACEHOLDER_SECRET_KEY
# /etc/systemd/system/restic-backup.service
[Service]
Type=oneshot
EnvironmentFile=/etc/restic/env
CacheDirectory=restic
ExecStart=/usr/local/bin/restic backup /var/www /etc --exclude-caches --exclude=/var/www/*/cache --exclude=/var/www/cache
ExecStart=/usr/local/bin/restic check --read-data-subset=5%%
# /etc/systemd/system/restic-backup.timer
[Timer]
OnCalendar=*-*-* 02:30:00
RandomizedDelaySec=15min
Persistent=true

[Install]
WantedBy=timers.target

محیط آزمون ما systemd نداشت؛ دو دستور سرویس را بدون HOME اجرا کردیم: بدون RESTIC_CACHE_DIR با خطای unable to locate cache directory و کد 1 ماند و با آن کامل شد. فعال‌سازی با systemctl enable --now restic-backup.timer است و Persistent=true نوبت جامانده در خاموشی را بعداً اجرا می‌کند. بررسی ۵ درصدی هر شب از S3 دانلود دارد؛ ترافیک خروجی را حساب کنید.

اگر مهاجم کلید S3 را داشته باشد، نسخه‌های قدیمی چه می‌شوند؟

با کلید S3 دارای اجازه حذف، مهاجم همه اشیای مخزن را پاک می‌کند. مدل تهدید restic صریح است: برنامه برای محافظت در برابر حذف فایل در محل ذخیره‌سازی طراحی نشده. نسخه‌های قدیمی فقط وقتی می‌مانند که خود مقصد حذف را نپذیرد.

ما هم تا پیش از خواندن این مدل تهدید، رمزنگاری را با امنیت بکاپ یکی می‌گرفتیم. هر کس root سرور را بگیرد، کلید کامل داخل /etc/restic/env را هم دارد و رمزنگاری بکاپ با restic جلویش را نمی‌گیرد.

چه کسی چه می‌بیند

چه کسینام فایل‌هامحتوای فایل‌هاتوان حذف نسخه‌ها
ارائه‌دهنده فضانه؛ متادیتا رمز شدهنهبله، دسترسی نوشتن دارد
مهاجم با root روی سروربله، با فایل رمز سروربلهبله؛ در append-only فقط افزودن
شما با رمز مخزنبلهبلهبله، با forget و prune

⚠️ دستور prune برگشت ندارد

اول forget اسنپ‌شات‌ها را برمی‌دارد، بعد prune داده‌ای را که فقط به آن‌ها تعلق داشت از مخزن پاک می‌کند. مهاجم با کلید کامل همین‌ها را می‌زند. مستندات forget در بحث مخزن append-only توصیه می‌کند کارهای نیازمند دسترسی کامل از کلاینتی جدا و امن انجام شود.

مقصد append-only با rest-server

سرور آلوده، بکاپ‌های خودش را هم پاک می‌کند. در پاکسازی سرور از باج‌افزار هم راه برگشت، نسخه سالمی است که به سیستم آلوده وصل نبوده. روی S3 خام، restic جلوی حذف را نمی‌گیرد؛ مقصد را عوض کنید یا امکانات نگهداری ارائه‌دهنده را در مستندات خودش ببینید.

💡 مقصدی که فقط افزودن را می‌پذیرد

طبق مخزن rest-server، حالت --append-only ساخت بکاپ تازه را می‌پذیرد و جلوی حذف و تغییر بکاپ‌های موجود را می‌گیرد. نشانی rest:https://backup.example.com:8000/ است و نام کاربری و رمز سرور به RESTIC_REST_USERNAME و RESTIC_REST_PASSWORD در فایل محیطی می‌روند. مستندات forget اینجا --keep-within را توصیه می‌کنند تا اسنپ‌شات جعلی، نسخه واقعی را بیرون نکند.

اگر مهاجم کلید S3 را داشته باشد، نسخه‌های قدیمی چه می‌شوند؟

سیاست forget را پیش از اجرا با dry-run بیازمایید

دستور forget با گزینه‌های --keep-* تعیین می‌کند کدام اسنپ‌شات بماند و --dry-run همین تصمیم را بدون حذف چاپ می‌کند.

خواندن ستون Reasons

سیاستی که روی کاغذ درست است، در عمل تاریخچه را می‌برد. --keep-daily n برای n روز آخرِ دارای اسنپ‌شات، از هر روز جدیدترین را نگه می‌دارد.

restic forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --dry-run

روی سه اسنپ‌شات یک روز انتظار داشتیم فقط جدیدترین بماند؛ خروجی، کوتاه‌شده:

keep 2 snapshots:
4caafce0  13:20:15  oldest daily snapshot
01e0a250  13:20:16  daily snapshot
remove 1 snapshots:
31c1dc12  13:20:16

قاعده‌اش در مستندات آمده: وقتی هنوز به اندازه هر بازه --keep-* اسنپ‌شات ندارید، قدیمی‌ترین هم اضافه نگه داشته می‌شود و برچسب oldest می‌گیرد. پیش از سپردن نگهداری بکاپ با restic به prune، سیاست را چند شب با dry-run ببینید، بعد از کلاینت جدا اجرا کنید:

restic forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --prune
restic check

مخزن در مدت prune قفل است؛ زمانش را از تایمر شبانه جدا کنید.

بازرسی با check و تمرین restore

خرابی خاموش داده تا روز بازیابی دیده نمی‌شود. بخش بررسی یکپارچگی مستندات توضیح می‌دهد که check ساده packها را نمی‌خواند و برای آن --read-data-subset لازم است:

restic check --read-data-subset=10%
read 10.0% of packfiles
no errors were found
restic restore latest --target /tmp/restore-test

دستور restore مسیر کامل فایل‌ها را زیر پوشه مقصد می‌سازد؛ داده در /tmp/restore-test/tmp/lab2 برگشت.

سرور قبلی دیگر بالا نمی‌آید، روی ماشین تازه restic نصب شده و فایل رمز از جای امنش برگشته؛ اولین فرمان، restic snapshots است.

روی ماشین تازه برای دیدن اسنپ‌شات‌ها چه لازم دارم؟

نشانی مخزن، دو کلید S3 و رمز. فایل محیطی را بسازید و restic snapshots بزنید؛ کد خروج 10 یعنی مخزن پیدا نشد و 12 رمز اشتباه.

مسیر را با --include محدود کنید یا شکل snapshotID:/path را به restore بدهید؛ --dry-run پیش از نوشتن، فهرست را نشان می‌دهد.

خیر. در آزمون ما اجرای دوم بدون تغییر 362 B و اجرای سوم با یک فایل تازه 2.854 KiB افزود.

بدون تعیین منطقه، restic از us-east-1 استفاده می‌کند؛ منطقه ارائه‌دهنده را در AWS_DEFAULT_REGION بگذارید. شیوه دسترسی را با -o s3.bucket-lookup=path یا dns عوض کنید.

بله، با restic key passwd. راه کم‌خطرتر: کلید تازه با key add و حذف کلید قدیمی با key remove.

مستندات عددی نمی‌دهند. --read-data همه packها را دانلود می‌کند؛ شکل 1/5 تا 5/5 آن را در پنج نوبت پخش می‌کند.

محتوا و نام فایل‌ها را نه، ولی به گفته مدل تهدید restic، کسی که دسترسی خواندن دارد از زمان ساخت اشیا اندازه بکاپ‌ها را حدس می‌زند.

جمع‌بندی؛ بکاپ با restic یعنی مراقبت از رمز و کلیدها. رمز را با key add دو جا داشته باشید، کلیدها را در فایل محیطی 600 بگذارید و تایمر را با پوشه کش اجرا کنید. برای حذف نشدن نسخه‌ها به دست مهاجم، مقصد append-only بگیرید و forget را از کلاینت دیگری بزنید. سیاست نگهداری را اول با --dry-run ببینید و restore را هر ماه روی ماشین دیگری تمرین کنید تا روز خرابی، مسیر برگشت آشنا باشد.

🚀 اسنپ‌شات پنل کجای این نقشه می‌نشیند؟

مخزن restic برای روزی است که خود سرور برنگردد؛ اسنپ‌شات پنل برای برگشت از یک آپدیت خراب است و جای دیگری در این نقشه دارد.

رمز مخزن restic شما الان کجاست: مدیر رمز، کاغذی در کشوی قفل‌دار، یا سرور دوم؟ خود رمز را هیچ‌جا نفرستید؛ نوع جا کافی است.

وب داده
وب داده

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

مقاله‌ها: 282
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *