borg-serve(1) ابزار پشتیبان‌گیری borg borg-serve(1)

borg-serve - اجرای borg در حالت کارگزار برای دسترسی از راه دور

borg [گزینه‌های عمومی] serve [گزینه‌ها]

این دستور یک فرآیند کارگزار (سرور) مخزن را آغاز می‌کند. این دستور معمولاً به‌صورت دستی استفاده نمی‌شود.

برای گزینه‌های عمومی دستورات Borg به borg-common(1) مراجعه کنید.

محدود کردن دسترسی مخزن به PATH. می‌توان چندین بار این گزینه را تعیین کرد تا به کلاینت اجازه دسترسی به چندین دایرکتوری داده شود. دسترسی به تمام زیرپوشه‌ها به‌طور ضمنی اعطا می‌شود؛ نیازی نیست PATH مستقیماً به یک مخزن اشاره کند.
محدود کردن دسترسی مخزن. فقط مخزن واقع در PATH (هیچ زیرپوشه‌ای در نظر گرفته نمی‌شود) قابل دسترسی است. می‌توان چندین بار این گزینه را تعیین کرد تا به کلاینت اجازه دسترسی به چندین مخزن داده شود. برخلاف --restrict-to-path زیرپوشه‌ها قابل دسترسی نیستند؛ PATH باید مستقیماً به مکان یک مخزن اشاره کند. PATH ممکن است یک پوشه خالی باشد یا آخرین بخش PATH ممکن است وجود نداشته باشد، که در این صورت کلاینت می‌تواند یک مخزن در آنجا ایجاد کند.
فقط اجازه افزودن به فایل‌های قطعه مخزن داده شود. توجه داشته باشید که این گزینه فقط بر ساختار سطح پایین مخزن تأثیر می‌گذارد و اجرای delete یا prune یا خواندن از مخزن همچنان مجاز خواهد بود. برای جزئیات بیشتر به append_only_mode در یادداشت‌های تکمیلی (Additional Notes) مراجعه کنید.
تنظیم سهمیه ذخیره‌سازی مخزن (نسبت به تنظیمات سهمیه خود مخزن اولویت دارد) (مانند 5G، 1.5T). هنگامی که مخزن جدیدی ایجاد می‌شود، سهمیه ذخیره‌سازی روی مخزن جدید نیز تنظیم می‌شود. پیش‌فرض: بدون سهمیه.

دستور borg serve دارای پشتیبانی ویژه‌ای از دستورات اجباری SSH (forced commands) است (مثال authorized_keys در زیر را ببینید): اگر متغیر محیطی SSH_ORIGINAL_COMMAND تنظیم شده باشد، این دستور از برخی گزینه‌های ارائه‌شده در خط فرمان صرف‌نظر کرده و به‌جای آن مقادیر متغیر را به کار می‌برد. این رفتار تنها بر روی یک فهرست مجاز با نظارت دقیق از گزینه‌های ایمن اعمال می‌شود. این فهرست در حال حاضر شامل موارد زیر است:

  • گزینه‌هایی که سطح لاگ و موضوعات اشکال‌زدایی چاپی را کنترل می‌کنند، مانند --verbose، --info، --debug، --debug-topic و غیره.
  • گزینه --lock-wait برای اینکه به کلاینت اجازه دهد مدت‌زمان انتظار پیش از انصراف و لغو عملیات (در زمانی که فرآیند دیگری قفل را نگه داشته است) را کنترل کند.

متغیرهای محیطی (مانند BORG_XXX) موجود در دستور اصلی ارسال‌شده توسط کلاینت تفسیر نمی‌شوند؛ آن‌ها نادیده گرفته می‌شوند. اگر نیاز باشد متغیرهای محیطی BORG_XXX در سمت borg serve تنظیم شوند، باید در مکان‌های سیستمی ویژه مانند /etc/environment یا در خود دستور اجباری تنظیم گردند (مثال زیر).

# اجازه دادن به یک جفت کلید SSH فقط برای اجرای borg و دسترسی انحصاری به /path/to/repo.
# استفاده از گزینه‌های کلید برای غیرفعال‌سازی قابلیت‌های غیرضروری و بالقوه خطرناک SSH.
# این کار به ایمن‌سازی یک سیستم خودکار پشتیبان‌گیری از راه دور کمک می‌کند.
$ cat ~/.ssh/authorized_keys
command="borg serve --restrict-to-path /path/to/repo",restrict ssh-rsa AAAAB3[...]
# تنظیم یک متغیر محیطی BORG_XXX در سمت ``borg serve``.
$ cat ~/.ssh/authorized_keys
command="BORG_XXX=value borg serve [...]",restrict ssh-rsa [...]

نکته:

مثال‌های فوق از دستورالعمل restrict استفاده کرده و فرض می‌کنند که یک پوسته سازگار با استاندارد POSIX به عنوان پوسته ورود کاربر تنظیم شده است. این کار قابلیت‌های بالقوه خطرناک SSH را به‌طور خودکار مسدود می‌کند، حتی اگر این قابلیت‌ها در به‌روزرسانی‌های آینده اضافه شوند. بنابراین، استفاده از این گزینه ارجحیت دارد.

اما اگر از OpenSSH server < 7.2 استفاده می‌کنید، باید قابلیت‌های SSH مورد نظر برای محدودسازی را صراحتاً تعیین کنید و نمی‌توانید صرفاً از گزینه restrict استفاده کنید چرا که این گزینه در نسخه 7.2 معرفی شده است. ما توصیه می‌کنیم در این حالت از no-port-forwarding,no-X11-forwarding,no-pty,no-agent-forwarding,no-user-rc استفاده کنید.

جزئیات درباره نحوه استفاده از sshd: sshd(8) https://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man8/sshd.8

پایپ‌های borg serve (stdin/stdout/stderr) در سمت سرور به فرآیند sshd متصل هستند. در صورتی که اتصال SSH بین borg serve و کلاینت قطع شود یا به شکلی غیرعادی گیر کند (برای مثال به دلیل قطعی شبکه)، ممکن است زمان زیادی طول بکشد تا sshd متوجه قطع اتصال کلاینت شود. در این فاصله، sshd همچنان به کار خود ادامه می‌دهد و در نتیجه فرآیند borg serve نیز که قفل مخزن را در دست دارد باز می‌ماند. این موضوع می‌تواند باعث ناموفق شدن عملیات بعدی borg روی مخزن از راه دور با خطای Failed to create/acquire the lock شود.

جهت جلوگیری از بروز این مشکل، پیشنهاد می‌شود پیکربندی اضافی زیر برای SSH انجام شود:

در فایل ~/.ssh/config یا در فایل /etc/ssh/ssh_config سمت کلاینت:

Host backupserver
        ServerAliveInterval 10
        ServerAliveCountMax 30

عبارت backupserver را با نام میزبان، FQDN یا نشانی IP سرور Borg جایگزین کنید.

این تنظیم باعث می‌شود کلاینت هر ۱۰ ثانیه یک بسته نگه‌دارنده اتصال (keepalive) به سرور ارسال کند. اگر ۳۰ بار متوالی نگه‌دارنده اتصال بدون دریافت پاسخ ارسال شود (مدت‌زمان ۳۰۰ ثانیه)، فرآیند کلاینت SSH خاتمه یافته و در نتیجه فرآیند Borg نیز به صورت منظم پایان می‌یابد.

در فایل پیکربندی sshd سمت سرور (معمولاً /etc/ssh/sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 30

این تنظیم موجب می‌شود که سرور هر ۱۰ ثانیه یک بسته نگه‌دارنده اتصال به کلاینت بفرستد. در صورتی که ۳۰ نگه‌دارنده متوالی بدون پاسخ ارسال شود (مدت ۳۰۰ ثانیه)، فرآیند sshd سرور متوقف می‌شود و در نتیجه فرآیند borg serve به شکل مناسب خاتمه یافته و قفل مخزن را آزاد می‌نماید.

اگر پس از آن دستورات Borg را با --lock-wait 600 اجرا کنید، این زمان کافی را به فرآیندهای borg serve می‌دهد تا پس از قطع اتصال SSH و سپری شدن ۳۰۰ ثانیه انتظار برای شکست نگه‌دارنده‌ها، به کار خود پایان دهند.

شما مطمئناً می‌توانید مقادیر مهلت زمانی نشان‌داده‌شده در بالا را به مقادیری متناسب با محیط و کاربرد خود تغییر دهید.

هنگامی که کلاینت قابل اعتماد نیست، ایده خوبی است که پوسته کاربر پشتیبان‌گیری را به یک پیاده‌سازی ساده تنظیم کنید (مسیر /bin/sh تنها یک مثال است و ممکن است چنین پیاده‌سازی ساده‌ای باشد یا نباشد):

chsh -s /bin/sh BORGUSER

از آنجا که پوسته پیکربندی‌شده توسط openssh https://www.openssh.com برای اجرای دستور پیکربندی‌شده از طریق فایل authorized_keys با استفاده از "$SHELL" -c "$COMMAND" استفاده می‌شود، تعیین یک پیاده‌سازی حداقلی پوسته در مقایسه با زمانی که یک پیاده‌سازی پیچیده و دارای ویژگی‌های فراوان به کار گرفته شود، سطح حمله را کاهش می‌دهد.

borg-common(1)

The Borg Collective

2026-07-18