rrsync(1) User Commands rrsync(1)

rrsync - اسکریپتی برای راه‌اندازی کاربران محدودشدهٔ rsync از طریق ورودهای ssh

rrsync [-ro|-wo] [-munge] [-absolute] [-no-del] [-no-lock] [-no-overwrite] DIR

تنها آرگومان غیرگزینه‌ای، DIR (دایرکتوری) محدودشده را برای استفاده مشخص می‌کند. این مسیر می‌تواند نسبت به دایرکتوری خانگی کاربر نسبی یا یک مسیر مطلق باشد.

نسخهٔ برخط این صفحهٔ راهنما (که شامل پیوندهای متقابل مباحث است) در نشانی زیر در دسترس است: https://download.samba.org/pub/rsync/rrsync.1.

ورود ssh یک کاربر را می‌توان به یکی از دو روش آسان، تنها به اجرای انتقال rsync محدود کرد:

اجبار به اجرای اسکریپت rrsync
اجبار به اجرای دستور rsync daemon-over-ssh.

هر دوی این پیکربندی‌ها از قابلیتی در ssh استفاده می‌کنند که اجازه می‌دهد به جای اجرای یک شل تعاملی، اجرای یک دستور مشخص تحمیل شود. با این حال، اگر شل خانگی کاربر bash است، لطفاً برای بررسی یک اشکال بالقوه، بخش «مسئله امنیتی BASH» را ببینید.

برای استفاده از اسکریپت rrsync، فایل ~/.ssh/authorized_keys کاربر را ویرایش کرده و پیشوندی شبیه به یکی از موارد زیر (به همراه یک فاصله پس از آن) در ابتدای هر خط کلید ssh که باید محدود شود قرار دهید:

command="rrsync DIR"
command="rrsync -ro DIR"
command="rrsync -munge -no-del DIR"

سپس اطمینان حاصل کنید که اسکریپت rrsync محدودیت‌های گزینه‌ای دلخواه شما را داشته باشد. اگر می‌خواهید چندین پیکربندی مختلف داشته باشید، ممکن است بخواهید اسکریپت را با نامی یکتا در یک دایرکتوری bin محلی کپی کنید. اگر می‌خواهید انتقال را بیشتر محدود کنید، می‌توان یک یا چند گزینهٔ rrsync را پیش از DIR تعیین کرد.

برای استفاده از راه‌اندازی دیمن rsync، فایل ~/.ssh/authorized_keys کاربر را ویرایش کرده و پیشوندی شبیه به یکی از موارد زیر (به همراه یک فاصله پس از آن) را در ابتدای هر خط کلید ssh که باید محدود شود بیفزایید:

command="rsync --server --daemon ."
command="rsync --server --daemon --config=/PATH/TO/rsyncd.conf ."

سپس، مطمئن شوید که فایل rsyncd.conf با یک یا چند نام ماژول همراه با مسیر و محدودیت‌های گزینه‌ایِ مناسب ایجاد شده باشد. اگر گزینهٔ --config مربوط به rsync حذف شود، مقدار پیش‌فرض آن ~/rsyncd.conf خواهد بود. برای جزئیات نحوهٔ پیکربندی دیمن rsync به صفحهٔ راهنمای rsyncd.conf(5) مراجعه کنید.

هنگام استفاده از rrsync، تنها یک دایرکتوری محدودشده برای هر کلید مجاز (authorized key) می‌تواند وجود داشته باشد. در مقابل، پیکربندی دیمن اجازهٔ تعریف چندین نام ماژول را در فایل پیکربندی می‌دهد که هر کدام تنظیم مسیر ویژهٔ خود را دارند.

ادامهٔ این صفحهٔ راهنما به استفاده از اسکریپت rrsync اختصاص دارد.

تنها اجازهٔ خواندن از DIR را می‌دهد. مستلزم گزینه‌های -no-del و -no-lock است.
تنها اجازهٔ نوشتن در DIR را می‌دهد.
گزینهٔ --munge-links مربوط به rsync را در سمت سرور فعال می‌کند.
اجازه می‌دهد آرگومان‌های انتقال فایل، دایرکتوری محدودشده را با استفاده از مسیر مطلق آن در سرور نام‌گذاری کنند. برای نمونه، با rrsync -absolute /path/to/root، آرگومان انتقال /path/to/root/dir1 به عنوان نام مستعاری برای dir1 پذیرفته می‌شود.
گزینه‌های --delete* و --remove* مربوط به rsync را غیرفعال می‌کند.
از بررسی قفل تک‌اجرایی (به‌ازای هر کاربر) صرف‌نظر می‌کند. در ترکیب با -munge سودمند است.
گزینهٔ --ignore-existing را در سمت سرور اعمال می‌کند. زمانی که سرور دریافت‌کننده است، از بازنویسی فایل‌های موجود جلوگیری می‌کند.
از آنجا که --ignore-existing تنها از فایلی که در حال انتقال است محافظت می‌کند، این گزینه همچنین گزینه‌هایی را که می‌توانند به یک فایل موجود دیگر در دایرکتوری محدودشده دسترسی پیدا کنند رد می‌کند: --log-file، --partial-dir، --delay-updates، و حالت پشتیبان‌گیری (-b، --backup-dir، که پشتیبان منتشرشدهٔ آن جایگزین هر فایلی می‌شود که از قبل نام پشتیبان را اشغال کرده است). بنابراین، بارگذاری‌های با قابلیت ازسرگیری همراه با یک --partial-dir صریح، --delay-updates، و ثبت گزارش در سمت سرور تحت این گزینه در دسترس نیستند.
این پیام راهنما را نمایش می‌دهد و خارج می‌شود.

اسکریپت rrsync آرگومان‌های ارسالی مسیر را اعتبارسنجی می‌کند تا آن‌ها را به ماندن در محدودهٔ DIR مشخص‌شده محدود سازد.

اسکریپت rrsync گزینهٔ --copy-links در rsync را (به‌طور پیش‌فرض) رد می‌کند تا یک عملیات کپی نتواند با دنبال کردن یک پیوند نمادین (symlink) درون DIR، به فایلی در خارج از DIR دسترسی یابد.

اسکریپت rrsync گزینهٔ --protect-args (-s) در rsync را رد می‌کند، زیرا این گزینه امکان ارسال گزینه‌هایی را به سمت سرور فراهم می‌کند که اسکریپت قادر به بررسی آن‌ها نیست. اگر می‌خواهید از --protect-args پشتیبانی کنید، از پیکربندی daemon-over-ssh استفاده کنید.

اسکریپت rrsync تنها زیرمجموعه‌ای از گزینه‌های rsync را می‌پذیرد که rsync واقعی هنگام اجرای دستور سرور از آن‌ها استفاده می‌کند. چند گزینهٔ کمکی اضافی نیز برای تعامل با BackupPC و پذیرش برخی بازنویسی‌های کاربریِ مفید گنجانده شده است.

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

اگر شل خانگی کاربران شما بر روی bash تنظیم شده باشد، bash ممکن است سعی کند بیش از حد مفید واقع شود و مطمئن شود که فایل‌های bashrc ورودِ کاربر پیش از اجرای دستور اجباری اجرا می‌شوند. این امر می‌تواند در صورتی که کاربر بتواند به‌نوعی فایل‌های bashrc خانگی خود را (شاید از طریق کپی محدودشده، یک دایرکتوری خانگی مشترک یا موارد مشابه) به‌روزرسانی کند، یک مشکل امنیتی ایجاد کند.

یک راه ساده برای جلوگیری از این مسئله، تغییر شل کاربر به یک شل ساده‌تر مانند dash است. هنگام انتخاب شل خانگی جدید، مطمئن شوید که یک bash تغییرچهره‌داده‌شده را انتخاب نمی‌کنید، زیرا مشخص نیست که آیا از این مسئلهٔ امنیتی جلوگیری می‌کند یا خیر.

راه‌حل بالقوهٔ دیگر این است که مطمئن شوید دایرکتوری خانگی کاربر یک سوارشدگی (mount) مشترک نیست و کاربر هیچ راهی برای کپی فایل‌ها به خارج از دایرکتوری‌های محدودشده‌اش ندارد. این ممکن است نیازمند فعال‌سازی اجباری تبدیل پیوندهای نمادین (symlink munging) در سمت سرور باشد.

نسخه‌های آیندهٔ openssh ممکن است تغییری در مدیریت دستورهای اجباری داشته باشند که امکان اجتناب از استفاده از شل خانگی کاربر را فراهم کند.

فایل ~/.ssh/authorized_keys ممکن است خطوطی مانند زیر داشته باشد:

command="rrsync client/logs" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAzG...
command="rrsync -ro results" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAmk...

~/.ssh/authorized_keys

rsync(1), rsyncd.conf(5)

این صفحهٔ راهنما مربوط به نسخهٔ 3.5.0 از rsync است.

ابزار rsync تحت «پروانه عمومی همگانی گنو» (GNU General Public License) توزیع می‌شود. برای جزئیات بیشتر به فایل COPYING مراجعه کنید.

تارنمای rsync در نشانی https://rsync.samba.org و پروژهٔ گیت‌هاب آن در https://github.com/RsyncProject/rsync در دسترس است.

اسکریپت اولیهٔ rrsync با زبان perl توسط Joe Smith نوشته شده است. پس از آن افراد بسیاری در توسعهٔ آن مشارکت داشته‌اند. نسخهٔ python توسط Wayne Davison ایجاد شده است.

13 Aug 2026 rrsync from rsync 3.5.0