| rsyncd.conf(5) | User Commands | rsyncd.conf(5) |
نام (NAME)
rsyncd.conf - فایل پیکربندی دیمن rsync
خلاصه دستور (SYNOPSIS)
rsyncd.conf
نسخه برخط این صفحه راهنما (شامل پیوندهای متقابل مباحث) در نشانی زیر در دسترس است: https://download.samba.org/pub/rsync/rsyncd.conf.5.
توضیحات (DESCRIPTION)
فایل rsyncd.conf فایل پیکربندی زمان اجرا برای rsync در هنگام اجرا به عنوان دیمن rsync است.
فایل rsyncd.conf احراز هویت، دسترسی، ثبت وقایع و ماژولهای در دسترس را کنترل میکند.
قالب فایل (FILE FORMAT)
این فایل از ماژولها و پارامترها تشکیل شده است. یک ماژول با نام ماژول درون براکت آغاز میشود و تا آغاز ماژول بعدی ادامه مییابد. ماژولها شامل پارامترهایی به فرم name = value هستند.
این فایل خطمحور است -- یعنی هر خط خاتمهیافته با نویسه خط جدید نشاندهنده یک توضیح، نام ماژول یا یک پارامتر است.
تنها نخستین علامت مساوی در یک پارامتر معنادار است. فاصلههای خالی قبل یا بعد از نخستین علامت مساوی نادیده گرفته میشوند. فاصلههای خالی ابتدا، انتها و درونی در نامهای ماژول و پارامتر بیتاثیر هستند. فاصلههای خالی ابتدا و انتهای مقدار پارامتر حذف میشوند. فاصلههای خالی درونی در مقدار پارامتر عیناً حفظ میگردند.
هر خطی که با علامت هش (#) آغاز شود نادیده گرفته میشود، همانند خطوطی که فقط حاوی فاصلههای خالی هستند. (اگر علامت هش پس از هر چیزی جز فاصله خالی آغازین بیاید، به عنوان بخشی از محتوای خط در نظر گرفته میشود.)
هر خطی که به \ ختم شود، به شیوه مرسوم یونیکس در خط بعدی «ادامه» مییابد.
مقادیر پس از علامت مساوی در پارامترها همگی یا رشته هستند (بدون نیاز به نقلقول) یا بولی، که میتوانند به صورت yes/no، 0/1 یا true/false مشخص شوند. بزرگی و کوچکی حروف در مقادیر بولی بیتاثیر است، اما در مقادیر رشتهای حفظ میشود.
راهاندازی دیمن RSYNC (LAUNCHING THE RSYNC DAEMON)
دیمن rsync با مشخص کردن گزینه --daemon برای rsync راهاندازی میشود.
اگر میخواهید از chroot استفاده کنید، به درگاهی با شماره کمتر از ۱۰۲۴ متصل شوید (مانند درگاه پیشفرض ۸۷۳)، یا مالکیت فایل را تنظیم نمایید، دیمن باید با دسترسیهای ریشه (root) اجرا شود. در غیر این صورت، تنها باید دسترسی خواندن و نوشتن روی دادهها، وقایع و فایلهای قفل مناسب را داشته باشد.
میتوانید آن را از طریق inetd، به عنوان یک دیمن مستقل، یا از یک کلاینت rsync از طریق یک شل راه دور راهاندازی کنید. اگر به عنوان یک دیمن مستقل اجرا میشود، کافی است دستور «rsync --daemon» را از یک اسکریپت راهاندازی مناسب اجرا نمایید.
سیستمهایی که از systemd استفاده میکنند میتوانند از فایلهای واحد نمونه در دایرکتوری packaging/systemd درخت منبع استفاده کنند. فایل rsync.service یک دیمن مستقل را با استفاده از rsync --daemon --no-detach اجرا میکند، در حالی که rsync.socket و rsync@.service یک راهاندازی با فعالسازی سوکت را برای اتصالات ورودی نشان میدهند. این فایلها ممکن است برای مطابقت با مسیر rsync نصبشده، چیدمان بستهبندی و سیاست ماژول شما نیاز به تنظیم محلی داشته باشند.
هنگام اجرا از طریق inetd باید خطی مانند این را به /etc/services اضافه کنید:
rsync 873/tcp
و یک تک خط شبیه به این به /etc/inetd.conf:
rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon
مقدار «/usr/bin/rsync» را با مسیری که rsync در سیستم شما در آن نصب شده است جایگزین کنید. سپس باید سیگنال HUP را به inetd ارسال کنید تا فایل پیکربندی خود را دوباره بخواند.
توجه داشته باشید که نباید به دیمن rsync سیگنال HUP بفرستید تا آن را وادار به بازخوانی فایل rsyncd.conf کنید. این فایل با هر اتصال کلاینت دوباره خوانده میشود.
پارامترهای سراسری (GLOBAL PARAMETERS)
نخستین پارامترها در فایل (پیش از هدر [module]) پارامترهای سراسری هستند:
- motd file
- این پارامتر به شما امکان میدهد یک «پیام روز» (MOTD) را برای نمایش به کلاینتها در هر اتصال مشخص کنید. این پیام معمولاً شامل اطلاعات سایت و هرگونه اطلاعیه حقوقی است. پیشفرض، عدم وجود فایل MOTD است. این مقدار میتواند توسط گزینه خط فرمان --dparam=motdfile=FILE در هنگام راهاندازی دیمن لغو شود.
- pid file
- این پارامتر به دیمن rsync میگوید که شناسه فرآیند (PID) خود را در آن فایل بنویسد. rsync فایل را قفل نگه میدارد تا بداند چه زمانی بازنویسی یک فایل موجود ایمن است.
- نام فایل میتواند با گزینه خط فرمان --dparam=pidfile=FILE هنگام راهاندازی دیمن لغو شود.
- port
- میتوانید با تعیین این مقدار، درگاه پیشفرضی را که دیمن در آن به گوش میایستد (پیشفرض ۸۷۳) بازنویسی کنید. اگر دیمن توسط inetd اجرا شود، این مقدار نادیده گرفته میشود و با گزینه خط فرمان --port جایگزین میگردد.
- address
- میتوانید با تعیین این مقدار، آدرس IP پیشفرضی را که دیمن در آن به گوش میایستد بازنویسی کنید. اگر دیمن توسط inetd اجرا شود، این مقدار نادیده گرفته میشود و با گزینه خط فرمان --address جایگزین میگردد.
- socket options
- این پارامتر میتواند برای افرادی که دوست دارند سیستمهای خود را به بالاترین درجه تنظیم دقیق کنند بسیار سرگرمکننده باشد. میتوانید انواع گزینههای سوکت را تنظیم کنید که ممکن است انتقالها را سریعتر (یا کندتر!) کند. برای جزئیات در مورد برخی از گزینههایی که ممکن است بتوانید تنظیم کنید، صفحه راهنمای فراخوانی سیستمی setsockopt() را بخوانید. به طور پیشفرض هیچ گزینه سوکت خاصی تنظیم نشده است. این تنظیمات همچنین میتوانند از طریق گزینه خط فرمان --sockopts مشخص شوند.
- listen backlog
- میتوانید مقدار پیشفرض صف انتظار (backlog) را هنگامی که دیمن به اتصالات گوش میدهد لغو کنید. مقدار پیشفرض آن ۵ است.
همچنین میتوانید هر یک از پارامترهای ماژول را در بخش سراسری فایل پیکربندی بگنجانید، که در این صورت مقدار ارائه شده، مقدار پیشفرض آن پارامتر را بازنویسی خواهد کرد.
میتوانید از ارجاعات به متغیرهای محیطی در مقادیر پارامترها استفاده کنید. پارامترهای رشتهای ارجاعات %VAR% را تا جای ممکن دیرتر گسترش میدهند (زمانی که رشته برای نخستین بار در برنامه استفاده میشود)، که امکان استفاده از متغیرهایی را که rsync در زمان اتصال تنظیم میکند، مانند RSYNC_USER_NAME، فراهم میسازد. پارامترهای غیررشتهای (مانند تنظیمات true/false) هنگام خوانده شدن از فایل پیکربندی گسترش مییابند. اگر متغیری در محیط وجود نداشته باشد، یا اگر دنبالهای از نویسهها ارجاع معتبری نباشد (مانند یک علامت درصد جفتنشده)، نویسههای خام بدون تغییر عبور داده میشوند. این به سازگاری با گذشته و ایمنی کمک میکند (به عنوان مثال گسترش یک %VAR% ناموجود به یک رشته خالی در یک مسیر میتواند منجر به یک مسیر بسیار ناامن شود). امنترین راه برای درج یک % واقعی در یک مقدار، استفاده از %% است.
پارامترهای ماژول (MODULE PARAMETERS)
پس از پارامترهای سراسری، باید تعدادی ماژول تعریف کنید، که هر ماژول یک درخت دایرکتوری را با یک نام نمادین صادر میکند. ماژولها با مشخص کردن نام ماژول در کروشه [module] به دنبال پارامترهای آن ماژول صادر میشوند. نام ماژول نمیتواند حاوی اسلش یا کروشه بسته باشد. اگر نام حاوی فاصلههای خالی باشد، هر دنباله داخلی از فاصلههای خالی به یک فاصله منفرد تبدیل میشود، در حالی که فاصلههای خالی ابتدا یا انتها دور ریخته میشوند.
همچنین یک نام ماژول ویژه با عنوان «[global]» وجود دارد که ماژولی را تعریف نمیکند، بلکه به بافت تنظیمات سراسری بازمیگردد که در آن میتوان پارامترهای پیشفرض را مشخص کرد. از آنجا که هر ماژول تعریفشده مجموعه کامل پارامترهای خود را به عنوان ترکیبی از مقادیر پیشفرضی که در آن موقعیت از فایل پیکربندی تنظیم شدهاند به همراه لیست پارامترهای خود دریافت میکند، استفاده از بخش «[global]» میتواند به حفظ مقادیر پیکربندی مشترک برای چندین ماژول کمک کند.
همانند پارامترهای سراسری، میتوانید از ارجاعات به متغیرهای محیطی در مقادیر پارامترها استفاده کنید. برای جزئیات به آن بخش مراجعه فرمایید.
- comment
- این پارامتر یک رشته توصیفی را مشخص میکند که هنگام دریافت فهرستی از ماژولهای موجود توسط کلاینتها، در کنار نام ماژول نمایش داده میشود. پیشفرض، عدم وجود توضیح است.
- path
- این پارامتر دایرکتوری موجود در سیستم فایل دیمن را برای در دسترس قرار گرفتن در این ماژول مشخص میکند. شما باید این پارامتر را برای هر ماژول در rsyncd.conf تعیین کنید.
- اگر مقدار شامل عنصر «/./» باشد، مسیر در آن نقطه به یک دایرکتوری chroot و یک زیردایرکتوری درون-chroot تقسیم میشود. با این حال، اگر use chroot روی false تنظیم شده باشد، دایرکتوری نقطه اضافی به سادگی از مسیر پاک میشود. نمونهای از این کاربرد عبارت است از:
-
path = /var/rsync/./module1
- این پیکربندی (هنگام chroot کردن) به «/var/rsync» چروت میکند و مسیر درون-chroot را روی «/module1» تنظیم مینماید.
- میتوانید مقدار مسیر را بر اساس یک متغیر محیطی با محصور کردن نام متغیر میان علامتهای درصد قرار دهید. حتی میتوانید به متغیری ارجاع دهید که توسط rsync هنگام اتصال کاربر تنظیم شده است. برای نمونه، این مقدار از نام کاربر احرازشده در مسیر استفاده میکند:
-
path = /home/%RSYNC_USER_NAME%
- اشکالی ندارد اگر مسیر حاوی فاصلههای خالی درونی باشد -- آنها عیناً حفظ خواهند شد (بدین معنی که نباید سعی کنید آنها را گریز دهید). اگر دایرکتوری پایانی شما دارای یک فاصله خالی انتهایی است (و این چیزی نیست که بخواهید آن را اصلاح کنید)، یک اسلش انتهایی به مسیر بیفزایید تا از دست رفتن فاصله خالی انتهایی جلوگیری شود.
- use chroot
- اگر «use chroot» روی true باشد، دیمن rsync پیش از آغاز انتقال فایل با کلاینت، به «path» چروت میکند. این امر مزیت حفاظت بیشتر در برابر حفرههای امنیتی احتمالی پیادهسازی را دارد، اما معایبی از جمله نیاز به دسترسیهای کاربر ارشد، ناتوانی در دنبال کردن پیوندهای نمادینی که مطلق هستند یا در خارج از مسیر ریشه جدید قرار دارند، و پیچیده کردن حفظ کاربران و گروهها بر پایه نام را به همراه دارد (به ادامه مراجعه کنید).
- اگر use chroot تنظیم نشده باشد، پیشفرض تلاش برای فعالسازی chroot است اما در صورت شکست به دیمن اجازه میدهد (پس از ثبت هشدار) ادامه دهد. تنها استثنا زمانی است که path یک ماژول دارای جداکننده chroot به شکل «/./» باشد -- این باعث میشود مقدار تنظیمنشده برای آن ماژول به عنوان true در نظر گرفته شود.
- پیش از rsync 3.2.7، مقدار پیشفرض «true» بود. پیشفرض جدید «تنظیمنشده» راهاندازی دیمن rsync را به عنوان کاربر غیرریشه یا اجرای دیمن در سیستمی که chroot با شکست مواجه میشود آسانتر میکند. تنظیم صریح مقدار روی «true» در rsyncd.conf همواره مستلزم موفقیتآمیز بودن chroot است.
- همچنین امکان مشخص کردن dot-dir در «path» ماژول وجود دارد تا نشان دهد میخواهید به بخش پیشین مسیر chdir کنید و سپس فایلها را از درون بخش پسین مسیر ارائه دهید (با پاکسازی و تغییر شکل پیشفرض پیوندهای نمادین). این کار زمانی مفید است که درون chroot به برخی دایرکتوریهای کتابخانه نیاز دارید (معمولاً برای جستجوی uid و gid) اما نمیخواهید دایرکتوری lib را در بالای مسیر ارائهشده قرار دهید (حتی اگر بتوان آنها را با یک دستورالعمل exclude پنهان کرد). با این حال، انتخاب بهتر برای یک راهاندازی مدرن rsync استفاده از «name converter» و تلاش برای اجتناب کلی از دایرکتوریهای داخلی lib است. همچنین به پارامتر daemon chroot مراجعه کنید که باعث میشود rsync پیش از هرگونه chroot مرتبط با مسیر، به ناحیه chroot اختصاصی خود chroot کند.
- اگر دیمن در حال ارائه دایرکتوری «/» باشد (خواه مستقیماً یا به دلیل chroot شدن به مسیر ماژول)، rsync هیچگونه پاکسازی مسیر یا تغییر شکل (پیشفرض) را انجام نمیدهد.
- هنگامی که مجبور است دسترسی را به یک زیردایرکتوری خاص محدود کند (خواه به دلیل غیرفعال بودن chroot یا داشتن مسیر درون-chroot تنظیمشده)، rsync پیوندهای نمادین را (به طور پیشفرض) تغییر شکل (munge) داده و مسیرها را پاکسازی میکند. کسانی که از پیوندهای نمادین تغییرشکلیافته ناراضی هستند میتوانند تغییر شکل پیوند نمادین را از طریق پارامتر «munge symlinks» غیرفعال کنند؛ در این حالت مقادیر پیوندهای نمادین ورودی در عوض پاکسازی میشوند (به آن پارامتر مراجعه فرمایید).
- هنگامی که rsync در حال پاکسازی مسیرها است، عناصر مسیری «..» را که یک آرگومان را فراتر از سلسلهمراتب ماژول میبرند حلوفصل و حذف میکند. برای مسیر گزینهای که توسط اپراتور ارائه میشود مانند --backup-dir و --compare-dest، اسلش ابتدایی نیز با مسیر ماژول جایگزین میشود (بنابراین یک مسیر مطلق به عنوان ریشهگرفته از دایرکتوری «path» ماژول تفسیر میشود)؛ برای آرگومانهای منبع خود انتقال، یک اسلش ابتدایی صرفاً حذف میشود.
- هنگامی که chroot برقرار است و پارامتر «name converter» تنظیم نشده باشد، پارامتر «numeric ids» به طور پیشفرض فعال خواهد بود (جستجوی نامها را غیرفعال میکند). این بدان معناست که اگر کتابخانههای جستجوی نام را به طور دستی در chroot خود تنظیم کنید (به جای استفاده از مبدل نام)، باید صریحاً numeric ids = false را تنظیم نمایید تا rsync جستجوی نام را انجام دهد.
- اگر منابع کتابخانهای را درون ناحیه chroot ماژول کپی میکنید، باید از آنها از طریق تنظیمات عادی کاربر/گروه یا ACL سیستمعامل خود محافظت کنید (تا مانع از تغییر آنها توسط کاربر ماژول rsync شوید)، و سپس آنها را از دید کاربر از طریق «exclude» پنهان نمایید (نحوه انجام این کار را در توضیحات آن پارامتر ببینید). با این حال، راهاندازی مبدل نام سادهتر و ایمنتر است.
- daemon chroot
- این پارامتر مسیری را مشخص میکند که دیمن پیش از آغاز ارتباط با کلاینتها به آن chroot خواهد کرد. مسیرهای ماژول (و هرگونه تنظیم «use chroot») سپس نسبت به این مسیر خواهند بود. این به شما امکان میدهد انتخاب کنید که آیا میخواهید کل دیمن chroot شود (با این تنظیم)، فقط انتقالها chroot شوند (با «use chroot»)، یا هر دو. به خاطر داشته باشید که ناحیه «daemon chroot» ممکن است برای اجازه دادن به عملکرد دیمن به فایلهای مختلف سیستمعامل/کتابخانه/غیره نیاز داشته باشد. به طور پیشفرض، دیمن بدون هیچگونه chroot اجرا میشود.
- proxy protocol
- هنگامی که این پارامتر فعال است، تمام اتصالات ورودی باید با یک هدر پروتکل پروکسی V1 یا V2 آغاز شوند. اگر هدر یافت نشود، اتصال بسته میشود.
- تنظیم این مقدار روی true مستلزم آن است که یک سرور پروکسی اطلاعات IP مبدا را به rsync هدایت کند، که به شما امکان میدهد اطلاعات مناسب IP/میزبان را ثبت کرده و از محدودیتهای IP کلاینتمحور استفاده کنید. مقدار پیشفرض false به این معنی است که اطلاعات IP مستقیماً از متاداده سوکت به دست میآید. اگر rsync پشت پروکسی نیست، این باید غیرفعال باشد.
- هشدار: استفاده از این گزینه میتواند خطرناک باشد اگر اطمینان حاصل نکنید که تنها پروکسی مجاز به اتصال به درگاه rsync است. اگر اتصالات غیرپروکسی اجازه عبور داشته باشند، کلاینت میتواند از یک rsync دستکاریشده برای جعل هر آدرس IP راه دوری که میخواهد استفاده کند. میتوانید این مورد را با استفاده از قوانینی مانند iptables -uid-owner root (برای دسترسی اکیداً localhost)، قوانین فایروال گوناگون مهار کنید، یا میتوانید احراز هویت با گذرواژه را الزامی نمایید تا هرگونه جعل توسط کاربران دسترسی اضافی اعطا نکند.
- این تنظیم سراسری است. اگر نیاز دارید که برخی ماژولها این را الزامی کنند و برخی دیگر نه، باید چندین فرآیند دیمن rsync را روی درگاههای مختلف راهاندازی نمایید.
- proxy protocol hosts
- این پارامتر سراسری آدرسهای IP همتای سوکت را که مجاز به ارائه هدر proxy protocol هستند فهرست میکند. نحو آن همان قالب نشانهای است که توسط hosts allow استفاده میشود. هنگامی که proxy protocol = true باشد، این لیست باید قبل از اینکه rsync به آدرس کلاینت ارسالشده اعتماد کند، با همتای مستقیم مطابقت داشته باشد.
- name converter
- این پارامتر به شما امکان میدهد برنامهای را مشخص کنید که توسط دیمن rsync برای انجام تبدیل نامها و شناسهها میان کاربران و گروهها اجرا خواهد شد. این اسکریپت پیش از برپایی هرگونه chroot آغاز میشود و با هویت کاربر دیمن (نه کاربر انتقال) اجرا میگردد. میتوانید یک نام مسیر کاملاً واجد شرایط یا یک نام برنامه موجود در مسیر $PATH را مشخص کنید.
- این برنامه میتواند برای انجام جستجوهای عادی کاربر و گروه بدون نیاز به قرار دادن فایلهای اضافی درون ناحیه chroot ماژول استفاده شود یا میتوانید تبدیلهای سفارشی انجام دهید.
- برنامه nameconvert به تمام متغیرهای محیطی که در بخش مربوط به pre-xfer exec شرح داده شدهاند دسترسی دارد. این زمانی مفید است که بخواهید تبدیل را با استفاده از اطلاعات مربوط به ماژول و/یا درخواست کپی سفارشی کنید.
- یک اسکریپت نمونه پایتون در دایرکتوری support به نام «nameconvert» وجود دارد که جستجوهای عادی کاربر و گروه را پیادهسازی میکند. برای سفارشیسازی آن یا استفاده از آن به عنوان راهنما جهت پیادهسازی مبدل خود کاملاً آزادید.
- numeric ids
- فعالسازی این پارامتر، نگاشت کاربران و گروهها را بر اساس نام برای ماژول جاری دیمن غیرفعال میکند. این کار مانع از آن میشود که دیمن تلاش کند هرگونه فایل یا کتابخانه مرتبط با کاربر/گروه را بارگذاری کند. این فعالسازی باعث میشود انتقال رفتاری شبیه به زمانی داشته باشد که کلاینت گزینه خط فرمان --numeric-ids را فرستاده است. به طور پیشفرض، این پارامتر برای ماژولهای chroot فعال و برای ماژولهای غیر-chroot غیرفعال است. همچنین به خاطر داشته باشید که حفظ uid/gid مستلزم آن است که ماژول با هویت root اجرا شود (به «uid» مراجعه کنید) یا «fake super» پیکربندی شده باشد.
- یک ماژول دارای chroot نباید این پارامتر را روی false تنظیم کند، مگر اینکه از برنامه «name converter» استفاده کنید یا اقداماتی انجام داده باشید تا اطمینان حاصل شود که ماژول دارای منابع لازم برای ترجمه نامها است و امکان تغییر آن منابع توسط کاربر وجود ندارد.
- munge symlinks
- این پارامتر به rsync میگوید که تمام پیوندهای نمادین ورودی را به همان روش گزینه خط فرمان --munge-links (که بر دیمن بیتاثیر است) اصلاح کند: مقدار هر پیوند نمادین ذخیرهشده را با رشته «/rsyncd-munged/» پیشوندگذاری میکند. از آنجا که این دایرکتوری معمولاً وجود ندارد، پیوند نمادین تغییرشکلیافته نمیتواند دنبال شود، بنابراین یک پیوند نمادین بارگذاریشده نمیتواند برای خواندن یا نوشتن فایل از طریق آن استفاده شود. در مسیر خروج، این پیشوند حذف میشود، بنابراین کلاینتها مقادیر اصلی پیوند نمادین را مشاهده میکنند. هنگامی که این پارامتر فعال است، rsync در صورتی که «/rsyncd-munged/» از قبل به عنوان یک دایرکتوری یا پیوند نمادین به دایرکتوری در آن وجود داشته باشد، از اجرای ماژول امتناع میورزد. پیشفرض به chroot بستگی دارد. برای یک ماژول chroot ساده -- یعنی «use chroot» روشن باشد و «path» تفکیک «/./» نداشته باشد، به طوری که دیمن مستقیماً به ماژول chroot کند و آن را به عنوان ریشه chroot ارائه دهد -- تغییرشکل به طور پیشفرض غیرفعال است، زیرا خود chroot از خروج پیوند نمادین جلوگیری میکند. در هر حالت دیگر فعال است: هر ماژول غیر-chroot، یا ماژول chroot که «path» آن از تفکیک «/./» برای ارائه یک زیردایرکتوری درونی زیر ریشه chroot استفاده میکند.
- هنگامی که این پارامتر در یک ماژول قابلنوشتن که دسترسی آن به یک زیردایرکتوری محدود است غیرفعال باشد (یعنی «use chroot» خاموش است، یا مسیر درون-chroot برابر با «/» نیست)، پیوند نمادین ورودی پیشوند دریافت نمیکند اما همچنان هنگام ذخیره شدن پاکسازی میشود: اسلش ابتدایی حذف میشود و هرگونه بخش ابتدایی «..» که مقدار را فراتر از ماژول میبرد زدوده میشود، به طوری که مقدار یک پیوند نمادین ذخیرهشده نمیتواند نام مسیری خارج از ماژول را داشته باشد (هنوز میتواند به نام دیگری درون ماژول اشاره کند).
- تغییرشکل تنها مقادیر پیوند نمادین را که ذخیره میشوند تغییر میدهد. اینکه آیا دیمن یک پیوند نمادین از پیش موجود درون ماژول را هنگام حلوفصل مسیر انتقال دنبال میکند یا خیر، موضوعی جداگانه است که توسط تحلیلگر مسیر امن که به طور پیشفرض روشن است مدیریت میشود؛ برای قاعده دقیق و نحوه انصراف از آن، به پارامتر «insecure links» مراجعه کنید.
- هنگام استفاده از پارامتر «munge symlinks» در یک ناحیه chroot که دارای مسیر درون-chroot برابر با «/» است، باید «/rsyncd-munged/» را به تنظیم exclude ماژول اضافه کنید تا کاربر نتواند برای ایجاد آن تلاش کند.
- برای افزودن یا حذف پیشوند «/rsyncd-munged/» روی پیوندهای نمادین توسط خودتان (به عنوان مثال روی پیوندهایی که به صورت محلی درون ماژول ایجاد میکنید)، یک اسکریپت پایتون در دایرکتوری support کد منبع به نام «munge-symlinks» وجود دارد.
- insecure links
- این پارامتر (با پیشفرض «false») کنترل میکند که آیا دیمن مسیرهای حاوی پیوند نمادین خود را با دفاعهای عادی رقابت پیوند نمادین (symlink-race) حلوفصل میکند یا با رفتار موروثی دنبال کردن هر پیوند نمادین.
- هنگامی که false باشد (پیشفرض)، دیمن از دنبال کردن پیوند نمادینی که خود ایجاد نکرده است امتناع میورزد -- پیمایش دایرکتوری و باز کردن محتوای فایلهای ماژول ارائهشده، و مسیرهای ارائهشده توسط اپراتور (--backup-dir، --temp-dir، --partial-dir، دایرکتوریهای مبنای alt-dest، و غیره) همگی با پیمایشی حلوفصل میشوند که تنها زمانی یک جزء پیوند نمادین را دنبال میکند که متعلق به uid 0 یا uid ماژول باشد، و از دنبال کردن پیوند قرار داده شده توسط هر کاربر دیگر امتناع میورزد. یک کلاینت هرگز نمیتواند این را تسهیل کند: کلاینتی که --insecure-links را به دیمن ارسال میکند، درخواستش رد میشود.
- تنظیم این پارامتر روی «true» رفتار پیش از ایمنسازی را منحصراً برای این ماژول بازیابی میکند: دیمن هرگونه پیوند نمادین را در آن مسیرها دنبال مینماید.
- هشدار: فعالسازی «insecure links» آسیبپذیریهای فرار از طریق پیوند نمادین / TOCTOU را که پیشفرض میبندد (از جمله CVE-2026-53797 و CVE-2026-53801) دوباره باز میکند: مهاجمی که بتواند یک پیوند نمادین درون ماژول ایجاد کند -- یا میزبانی را با درخت ارائه شده به اشتراک بگذارد -- میتواند خواندنها و نوشتنهای دیمن را به فایلهای خارج از ماژول هدایت کند. آن را فقط در یک میزبان تکمستأجر، کاملاً ایزوله، یا در غیر این صورت قابلاعتماد فعال کنید که در آن هیچ کاربر محلی غیرقابلاعتمادی نتواند پیوند نمادینی در درخت ارائه شده قرار دهد. این معادل دیمن برای گزینه کلاینت --insecure-links است و تنها برای همان مورد محدود «من ریسک را در محیط ایزوله خود میپذیرم» وجود دارد.
- charset
- این پارامتر نام مجموعه نویسههایی را مشخص میکند که نام فایلهای ماژول در آن ذخیره میشوند. اگر کلاینت از گزینه --iconv استفاده کند، دیمن صرفنظر از مجموعه نویسهای که کلاینت ارسال کرده است، از مقدار پارامتر «charset» استفاده خواهد کرد. این به دیمن اجازه میدهد تا از تبدیل مجموعه نویسه در یک ماژول chroot بدون فایلهای اضافی در ناحیه chroot پشتیبانی کند، و همچنین تضمین مینماید که تبدیل نام به روشی سازگار انجام میشود. اگر پارامتر «charset» تنظیم نشود، گزینه --iconv رد میشود، درست مانند اینکه «iconv» از طریق «refuse options» مشخص شده باشد.
- اگر میخواهید کاربران را مجبور کنید همیشه از --iconv برای یک ماژول خاص استفاده کنند، «no-iconv» را به پارامتر «refuse options» بیفزایید. به خاطر داشته باشید که این کار دسترسی به ماژول شما را به کلاینتهای بسیار جدید rsync محدود خواهد کرد.
- max connections
- این پارامتر به شما امکان میدهد حداکثر تعداد اتصالات همزمانی را که اجازه خواهید داد مشخص کنید. هر کلاینتی که پس از رسیدن به این حد متصل شود، پیامی دریافت میکند که به او میگوید بعداً دوباره تلاش کند. پیشفرض 0 است که به معنای بدون محدودیت است. یک مقدار منفی ماژول را غیرفعال میکند. همچنین به پارامتر «lock file» مراجعه فرمایید.
- log file
- هنگامی که پارامتر «log file» روی یک رشته غیرخالی تنظیم شود، دیمن rsync به جای استفاده از syslog، پیامها را در فایل مشخصشده ثبت میکند. این به ویژه در سیستمهایی (مانند AIX) که در آنها syslog() برای برنامههای chroot کار نمیکند مفید است. فایل پیش از فراخوانی chroot() باز میشود و این امکان را میدهد که در خارج از انتقال قرار گیرد. اگر این مقدار به جای سراسری بر اساس هر ماژول تنظیم شود، لاگ سراسری همچنان حاوی هرگونه شکست احراز هویت یا پیامهای خطای فایل پیکربندی خواهد بود.
- اگر دیمن نتواند فایل مشخصشده را باز کند، به استفاده از syslog بازمیگردد و خطایی در مورد شکست اعلام میکند. (توجه داشته باشید که شکست در باز کردن فایل لاگ مشخصشده قبلاً یک خطای مهلک بود.)
- این تنظیم میتواند با استفاده از گزینههای خط فرمان --log-file=FILE یا --dparam=logfile=FILE لغو شود. اولی تمام پارامترهای فایل لاگ دیمن و تمام تنظیمات ماژول را لغو میکند. دومی فایل لاگ دیمن و پیشفرض تمام ماژولها را تعیین میکند که همچنان به ماژولها امکان میدهد تنظیم پیشفرض را لغو کنند.
- syslog facility
- این پارامتر به شما امکان میدهد نام facility در syslog را برای ثبت پیامها از دیمن rsync مشخص کنید. میتوانید از هر نام استاندارد syslog facility تعریفشده در سیستم خود استفاده نمایید. نامهای متداول عبارتند از auth، authpriv، cron، daemon، ftp، kern، lpr، mail، news، security، syslog، user، uucp، local0، local1، local2، local3، local4، local5، local6 و local7. پیشفرض daemon است. اگر تنظیم «log file» یک رشته غیرخالی باشد (خواه در تنظیمات هر ماژول تنظیم شده باشد یا از تنظیمات سراسری به ارث رسیده باشد)، این تنظیم هیچ تاثیری ندارد.
- syslog tag
- این پارامتر به شما امکان میدهد برچسب syslog را برای استفاده در هنگام ثبت پیامها از دیمن rsync مشخص کنید. پیشفرض «rsyncd» است. این تنظیم در صورتی که تنظیم «log file» یک رشته غیرخالی باشد هیچ تاثیری ندارد.
- برای نمونه، اگر میخواهید نام هر کاربر احرازشده در برچسب syslog گنجانده شود، میتوانید کاری شبیه به این انجام دهید:
-
syslog tag = rsyncd.%RSYNC_USER_NAME%
- max verbosity
- این پارامتر به شما امکان میدهد حداکثر میزان اطلاعات پرگویی را که به دیمن اجازه تولید میدهید کنترل کنید (زیرا اطلاعات به فایل لاگ میروند). پیشفرض ۱ است که به کلاینت اجازه میدهد یک سطح از پرگویی را درخواست کند.
- این امر همچنین بر توانایی کاربر برای درخواست سطوح بالاتر ثبت وقایع --info و --debug تاثیر میگذارد. اگر مقدار حداکثر ۲ باشد، هیچ مقدار info و/یا debug که بالاتر از مقدار تنظیمشده با -vv باشد توسط دیمن در ثبت وقایع آن پذیرفته نمیشود. برای دیدن اینکه چه سطحی از پرگویی را باید برای یک سطح خاص از info/debug بپذیرید، به rsync --info=help و rsync --debug=help مراجعه کنید. برای مثال، برای خروجی اشکالزدایی TIME2 و FLIST3 به max-verbosity 4 نیاز است.
- lock file
- این پارامتر فایلی را برای پشتیبانی از پارامتر «max connections» مشخص میکند. دیمن rsync از قفل رکورد روی این فایل استفاده میکند تا اطمینان یابد که حد مجاز حداکثر اتصالات برای ماژولهایی که فایل قفل را به اشتراک میگذارند نقض نمیشود. پیشفرض /var/run/rsyncd.lock است.
- read only
- این پارامتر تعیین میکند که آیا کلاینتها قادر به بارگذاری فایلها خواهند بود یا خیر. اگر «read only» برابر با true باشد، هرگونه تلاش برای بارگذاری با شکست مواجه میشود. اگر «read only» برابر با false باشد، بارگذاریها در صورتی که دسترسیهای فایل در سمت دیمن اجازه دهند، امکانپذیر خواهد بود. پیشفرض این است که تمام ماژولها فقطخواندنی باشند.
- توجه داشته باشید که «auth users» میتواند این تنظیم را برای هر کاربر بازنویسی کند.
- write only
- این پارامتر تعیین میکند که آیا کلاینتها قادر به دانلود فایلها خواهند بود یا خیر. اگر «write only» برابر با true باشد، هرگونه تلاش برای دانلود شکست میخورد. اگر «write only» برابر با false باشد، دانلودها در صورتی که دسترسیهای فایل در سمت دیمن اجازه دهند امکانپذیر خواهد بود. پیشفرض این است که این پارامتر غیرفعال باشد.
- نکته مفید: احتمالاً میخواهید «refuse options = delete» را برای یک ماژول فقطنوشتنی مشخص کنید.
- open noatime
- هنگامی که روی True تنظیم شود، این پارامتر به دیمن rsync میگوید فایلها را با فلگ O_NOATIME باز کند (در سیستمهایی که از آن پشتیبانی میکنند) تا از تغییر زمان دسترسی (atime) فایلهای در حال انتقال جلوگیری شود. اگر سیستمعامل شما از فلگ O_NOATIME پشتیبانی نکند، rsync بدون صدا این گزینه را نادیده میگیرد. همچنین توجه داشته باشید که برخی از سیستمهای فایل به گونهای سوار میشوند که حتی بدون تنظیم فلگ O_NOATIME از بهروزرسانی atime در دسترسی خواندن جلوگیری کنند.
- هنگامی که روی False تنظیم شود، تضمین میکند که فایلها در سرور با O_NOATIME باز نمیشوند.
- هنگامی که روی Unset (پیشفرض) باشد، کاربر این تنظیم را از طریق --open-noatime کنترل میکند.
- list
- این پارامتر تعیین میکند که آیا این ماژول هنگامی که کلاینت درخواست فهرست ماژولهای موجود را میدهد فهرست شود یا خیر. علاوه بر این، اگر این مقدار false باشد، هنگامی که کلاینتی که توسط «hosts allow» یا «hosts deny» رد شده است تلاش میکند به آن دسترسی پیدا کند، دیمن وانمود میکند که ماژول وجود ندارد. توجه داشته باشید که اگر «reverse lookup» به صورت سراسری غیرفعال باشد اما برای ماژول فعال باشد، جستجوی معکوس حاصل به یک سرور DNS که احتمالاً تحت کنترل کلاینت است، ممکن است همچنان به کلاینت نشان دهد که به یک ماژول موجود برخورد کرده است. پیشفرض، قابلفهرستبندی بودن ماژولها است.
- uid
- این پارامتر نام کاربری یا شناسه کاربری (UID) را مشخص میکند که انتقال فایل به و از آن ماژول باید در هنگام اجرای دیمن به عنوان ریشه با آن هویت انجام شود. در ترکیب با پارامتر «gid»، این امر تعیین میکند که چه دسترسیهای فایلی در دسترس است. پیشفرض هنگام اجرا توسط کاربر ارشد، جابهجایی به کاربر «nobody» سیستم است. پیشفرض برای کاربر غیرارشد، تلاش نکردن برای تغییر کاربر است. همچنین به پارامتر «gid» مراجعه فرمایید.
- متغیر محیطی RSYNC_USER_NAME ممکن است برای درخواست اینکه rsync با هویت کاربر احرازشده اجرا شود استفاده گردد. برای نمونه، اگر میخواهید rsync با همان کاربری اجرا شود که برای احراز هویت rsync دریافت شده است، این تنظیم مفید است:
-
uid = %RSYNC_USER_NAME% gid = *
- gid
- این پارامتر یک یا چند نام/شناسه گروه را مشخص میکند که هنگام دسترسی به ماژول استفاده خواهند شد. نخستین گروه، گروه پیشفرض خواهد بود و هر گروه اضافی به عنوان گروههای مکمل تنظیم میشود. همچنین میتوانید یک «*» را به عنوان نخستین gid در فهرست مشخص کنید که با تمام گروههای عادی برای کاربر انتقال جایگزین خواهد شد (به «uid» مراجعه کنید). پیشفرض هنگام اجرا توسط کاربر ارشد، جابهجایی به گروه «nobody» (یا شاید «nogroup») سیستمعامل شما بدون هیچ گروه مکمل دیگری است. پیشفرض برای کاربر غیرارشد، عدم تغییر صفات گروه است (و در واقع ممکن است سیستمعامل شما به یک کاربر غیرارشد اجازه ندهد تنظیمات گروه خود را تغییر دهد).
- فهرست مشخصشده معمولاً بر اساس فاصلهها و کاماها به نشانهها تقسیم میشود. با این حال، اگر فهرست با کاما آغاز شود، آنگاه تنها بر اساس کاماها تقسیم میگردد، که به نام گروه اجازه میدهد شامل فاصله خالی باشد. در هر دو حالت، هرگونه فاصله خالی ابتدایی و/یا انتهایی از نشانهها حذف شده و نشانههای خالی نادیده گرفته میشوند.
- daemon uid
- این پارامتر uid ای را مشخص میکند که دیمن تحت آن اجرا خواهد شد. دیمن معمولاً به عنوان کاربر root اجرا میشود و هنگامی که این پارامتر تنظیم نشده رها شود، کاربر بدون تغییر باقی میماند. همچنین به پارامتر «uid» مراجعه کنید.
- daemon gid
- این پارامتر gid ای را مشخص میکند که دیمن تحت آن اجرا خواهد شد. دیمن معمولاً به عنوان گروه root اجرا میشود و هنگامی که این پارامتر تنظیم نشده رها شود، گروه بدون تغییر باقی میماند. همچنین به پارامتر «gid» مراجعه کنید.
- fake super
- تنظیم «fake super = yes» برای یک ماژول باعث میشود که سمت دیمن به گونهای عمل کند که گویی گزینه خط فرمان --fake-super مشخص شده است. این امر امکان ذخیره ویژگیهای کامل یک فایل را بدون نیاز به اجرای واقعی دیمن با هویت ریشه فراهم میسازد.
- filter
- دیمن دارای زنجیره فیلتر اختصاصی خود است که تعیین میکند کلاینت مجاز به دسترسی به چه فایلهایی است. این زنجیره به کلاینت فرستاده نمیشود و از هر فیلتری که کلاینت ممکن است مشخص کرده باشد مستقل است. فایلهایی که توسط زنجیره فیلتر دیمن مستثنی شدهاند (فایلهای daemon-excluded) در صورتی که کلاینت سعی در واکشی (pull) آنها داشته باشد، به عنوان ناموجود تلقی میشوند، در صورتی که کلاینت سعی در ارسال (push) آنها داشته باشد با پیام خطا نادیده گرفته میشوند (باعث تحریک کد خروج ۲۳ میشود)، و هرگز از ماژول حذف نمیگردند. میتوانید از فیلترهای دیمن برای جلوگیری از دانلود یا دستکاری فایلهای اداری خصوصی توسط کلاینتها، مانند فایلهایی که ممکن است برای پشتیبانی از ترجمه نام uid/gid بیفزایید، استفاده کنید.
- زنجیره فیلتر دیمن از پارامترهای «filter»، «include from»، «include»، «exclude from» و «exclude» به همان ترتیب اولویت ساخته میشود. الگوهای لنگردار در ریشه ماژول لنگر انداخته میشوند. برای جلوگیری از دسترسی به یک کل زیردرخت، به عنوان مثال «/secret»، شما باید همه چیز را در آن زیردرخت مستثنی کنید؛ سادهترین راه برای انجام این کار با یک الگوی سه ستاره مانند «/secret/***» است.
- زنجیره فیلتر با نام منطقی هر آیتم نسبت به ریشه ماژول مطابقت داده میشود، نه فایل فیزیکی که به آن منتهی میگردد. این یک فیلتر قابلیت دید و دستکاری است، نه یک مرز امنیتی در برابر پیوندهای نمادین: یک پیوند نمادین درون ماژول که نام خودش مستثنی نشده است، همچنان میتواند به یک هدف مستثنیشده دنبال شود (نامی که فیلتر میبیند -- مثلاً «link» -- نام مستثنیشده نیست -- مثلاً «secret»). آنچه یک ماژول قابلنوشتن را از حیلههای پیوند نمادین محافظت میکند پارامتر «munge symlinks» است (که به طور پیشفرض برای یک ماژول قابلنوشتن و غیر-chroot فعال است)، نه این فیلتر؛ برای مهار همتایی که میتواند پیوند نمادین وارد کند یا بپیماید، به exclude/filter اتکا نکنید.
- پارامتر «filter» فهرستی از قوانین فیلتر دیمن جداشده با فاصله را میگیرد، هرچند به اندازه کافی هوشمند است که بداند نباید یک نشانه را در فاصله داخلی یک قانون بشکند (مثلاً «- /foo - /bar» به صورت دو قانون تجزیه میشود). میتوانید یک یا چند قانون فایل ادغام را با استفاده از نحو عادی مشخص کنید. تنها یک پارامتر «filter» میتواند برای یک ماژول مشخص در فایل پیکربندی اعمال شود، بنابراین تمام قوانینی را که میخواهید در یک پارامتر واحد قرار دهید. توجه داشته باشید که قوانین فایل ادغام بر اساس هر دایرکتوری به اندازه قوانین سراسری محافظت ارائه نمیدهند، اما میتوانند برای بهتر کار کردن --delete در طول عملیات دانلود کلاینت استفاده شوند اگر فایلهای ادغام بر اساس دایرکتوری در انتقال گنجانده شوند و کلاینت درخواست استفاده از آنها را بدهد.
- exclude
- این پارامتر فهرستی از الگوهای استثنای دیمن جداشده با فاصله را دریافت میکند. همانند گزینه کلاینت --exclude، الگوها میتوانند با «- » یا «+ » واجد شرایط شوند تا صریحاً استثنا/شمول را نشان دهند. تنها یک پارامتر «exclude» میتواند برای یک ماژول مشخص اعمال شود. برای توضیحی در مورد اینکه فایلهای مستثنیشده چگونه بر دیمن تاثیر میگذارند، به پارامتر «filter» مراجعه فرمایید.
- include
- از یک «include» برای بازنویسی اثرات پارامتر «exclude» استفاده کنید. تنها یک پارامتر «include» میتواند برای یک ماژول معین اعمال شود. برای توضیحی در مورد اینکه فایلهای مستثنیشده چگونه بر دیمن تاثیر میگذارند، به پارامتر «filter» مراجعه کنید.
- exclude from
- این پارامتر نام فایلی را در دیمن مشخص میکند که حاوی الگوهای استثنای دیمن، هر کدام در یک خط است. تنها یک پارامتر «exclude from» میتواند برای یک ماژول مشخص اعمال شود؛ اگر چندین فایل exclude-from دارید، میتوانید آنها را به عنوان یک فایل ادغام در پارامتر «filter» مشخص کنید. برای توضیحی در مورد نحوه تاثیر فایلهای مستثنی بر دیمن، به پارامتر «filter» مراجعه کنید.
- include from
- همتای «exclude from» برای فایلی از الگوهای شمول دیمن است. تنها یک پارامتر «include from» میتواند برای یک ماژول معین اعمال شود. برای توضیحی در مورد نحوه تاثیر فایلهای مستثنی بر دیمن، به پارامتر «filter» مراجعه نمایید.
- incoming chmod
- این پارامتر به شما امکان میدهد مجموعهای از رشتههای chmod جداشده با کاما را مشخص کنید که بر دسترسیهای تمام فایلهای ورودی (فایلهایی که توسط دیمن دریافت میشوند) تاثیر میگذارد. این تغییرات پس از تمام محاسبات دسترسی دیگر رخ میدهد، و حتی زمانی که کلاینت --perms را مشخص نکرده باشد، دسترسیهای پیشفرض مقصد و/یا موجود را بازنویسی میکند. برای اطلاعات درباره قالب این رشته، به توضیحات گزینه --chmod در rsync و صفحه راهنمای chmod(1) مراجعه کنید.
- outgoing chmod
- این پارامتر به شما امکان میدهد مجموعهای از رشتههای chmod جداشده با کاما را مشخص کنید که بر دسترسیهای تمام فایلهای خروجی (فایلهایی که از دیمن به بیرون فرستاده میشوند) تاثیر میگذارد. این تغییرات در آغاز رخ میدهند، و باعث میشوند دسترسیهای ارسالی متفاوت از آنچه در خود سیستم فایل ذخیره شده است به نظر برسند. برای نمونه، میتوانید دسترسی نوشتن گروه را روی سرور غیرفعال کنید در حالی که برای کلاینتها روشن به نظر برسد. برای اطلاعات در مورد قالب این رشته، به توضیحات گزینه --chmod در rsync و صفحه راهنمای chmod(1) مراجعه فرمایید.
- auth users
- این پارامتر فهرستی از قوانین احراز هویت جداشده با کاما و/یا فاصله را مشخص میکند. در سادهترین شکل خود، نامهای کاربری را که مجاز به اتصال به این ماژول هستند فهرست میکنید. این نامهای کاربری نیازی به وجود در سیستم محلی ندارند. قوانین ممکن است حاوی نویسههای عام شل باشند که با نام کاربری ارائهشده توسط کلاینت برای احراز هویت مطابقت داده میشوند. اگر «auth users» تنظیم شده باشد، کلاینت برای اتصال به ماژول با درخواست ارائه نام کاربری و گذرواژه روبهرو خواهد شد (challenge). یک پروتکل احراز هویت چلنج-ریسپانس برای این تبادل استفاده میشود. نامهای کاربری و گذرواژههای متن آشکار در فایل مشخصشده توسط پارامتر «secrets file» ذخیره میشوند. پیشفرض این است که همه کاربران بتوانند بدون گذرواژه متصل شوند (این حالت «rsync ناشناس» نامیده میشود).
- علاوه بر تطبیق نام کاربری، میتوانید تطبیق نام گروه را از طریق یک پیشوند «@» مشخص کنید. هنگام استفاده از تطبیق نام گروه، نام کاربری احرازکننده باید یک کاربر واقعی در سیستم باشد، وگرنه فرض میشود که عضو هیچ گروهی نیست. برای مثال، تعیین «@rsync» در صورتی که کاربر نامبرده عضو گروه rsync باشد، با کاربر احرازکننده مطابقت خواهد داشت.
- سرانجام، گزینهها میتوانند پس از یک دونقطه (:) مشخص شوند. این گزینهها به شما امکان میدهند یک کاربر یا یک گروه را نفی کنید («deny»)، دسترسی را روی «ro» (فقطخواندنی) تنظیم کنید، یا دسترسی را روی «rw» (خواندن/نوشتن) بگذارید. تنظیم یک گزینه ro/rw خاص برای قاعده احراز هویت، تنظیم «read only» ماژول را بازنویسی میکند.
- حتماً قوانین را به ترتیبی قرار دهید که میخواهید مطابقت داده شوند، زیرا بررسی با نخستین کاربر یا گروه مطابق متوقف میشود و این تنها احراز هویتی است که بررسی میگردد. برای مثال:
-
auth users = joe:deny @guest:deny admin:rw @rsync:ro susan joe sam
- در قانون بالا، کاربر joe صرفنظر از هر چیزی از دسترسی منع میشود. هر کاربری که در گروه «guest» باشد نیز دسترسیاش رد میشود. کاربر «admin» در حالت خواندن/نوشتن دسترسی پیدا میکند، اما فقط در صورتی که کاربر admin در گروه «guest» نباشد (زیرا قانون تطبیق کاربر admin در صورتی که کاربر در گروه «guest» باشد هرگز بررسی نخواهد شد). هر کاربر دیگری که در گروه «rsync» باشد دسترسی فقطخواندنی خواهد داشت. در پایان، کاربران susan، joe و sam تنظیم ro/rw ماژول را دریافت میکنند، اما تنها در صورتی که کاربر با یک قانون تطبیق گروه قبلی مطابقت نداشته باشد.
- اگر نیاز دارید نام کاربر یا گروهی را مشخص کنید که درون آن فاصله خالی است، فهرست خود را با یک کاما آغاز کنید تا نشان دهد فهرست تنها باید بر اساس کاماها شکسته شود (هرچند فاصلههای خالی ابتدا و انتها نیز حذف خواهند شد و ورودیهای خالی نادیده گرفته میشوند). برای نمونه:
-
auth users = , joe:deny, @Some Group:deny, admin:rw, @RO Group:ro
- برای آگاهی از نحوه داشتن گذرواژههای اختصاصی کاربر و همچنین گذرواژههای گروهی، به توضیحات secrets file مراجعه کنید. همچنین توضیح میدهد که چگونه کاربر میتواند بسته به اینکه چه قانونی احراز هویت میشود، با استفاده از گذرواژه کاربری خود یا (در صورت وجود) گذرواژه گروهی احراز هویت کند.
- همچنین به بخش با عنوان «USING RSYNC-DAEMON FEATURES VIA A REMOTE SHELL CONNECTION» در rsync(1) برای اطلاعات در مورد نحوه مدیریت نام کاربری در سطح rsyncd.conf که با نام کاربری در سطح شل راه دور هنگام استفاده از شل راه دور برای اتصال به دیمن rsync متفاوت است، مراجعه کنید.
- secrets file
- این پارامتر نام فایلی را مشخص میکند که حاوی جفتهای username:password و/یا @groupname:password مورد استفاده برای احراز هویت این ماژول است. این فایل تنها در صورتی بررسی میشود که پارامتر «auth users» مشخص شده باشد. فایل خطمحور است و در هر خط حاوی یک جفت name:password است. هر خطی که دارای هش (#) به عنوان نخستین نویسه خط باشد، توضیح تلقی شده و نادیده گرفته میشود. گذرواژهها میتوانند حاوی هر نویسهای باشند اما هشدار داده میشود که بسیاری از سیستمهای عامل طول گذرواژههایی را که میتوان در سمت کلاینت تایپ کرد محدود میکنند، بنابراین ممکن است متوجه شوید گذرواژههای طولانیتر از ۸ نویسه کار نمیکنند.
- استفاده از خطوط خاص گروه تنها زمانی مرتبط است که ماژول با استفاده از یک قانون منطبق «@groupname» احراز هویت شود. هنگامی که این اتفاق میافتد، کاربر میتواند از طریق خط «username:password» خود یا خط «@groupname:password» برای گروهی که احراز هویت را راهاندازی کرده است، تایید اعتبار شود.
- این به شما بستگی دارد که چه نوع ورودیهای گذرواژهای را میخواهید بگنجانید: کاربران، گروهها یا هر دو. استفاده از قوانین گروهی در «auth users» در صورتی که نمیخواهید از گذرواژههای مشترک استفاده کنید، نیازی به تعیین گذرواژه گروهی ندارد.
- هیچ پیشفرضی برای پارامتر «secrets file» وجود ندارد، شما باید یک نام انتخاب کنید (مانند /etc/rsyncd.secrets). مگر اینکه «strict modes» غیرفعال شده باشد، فایل نباید توسط «دیگران» قابل خواندن یا نوشتن باشد، و (هنگامی که دیمن به عنوان ریشه اجرا میشود) باید متعلق به root باشد؛ برای بررسی دقیق به «strict modes» مراجعه کنید. اگر فایل یافت نشود یا رد شود، هیچ ورودی برای یک ماژول «auth users» امکانپذیر نخواهد بود.
- auth digest
- این پارامتر حداقل خلاصه پیام (digest) را تعیین میکند که دیمن برای احراز هویت چلنج-ریسپانس یک ماژول «auth users» میپذیرد. خلاصههای موجود، از قویترین به ضعیفترین، عبارتند از sha512، sha256، sha1، md5، md4. دیمن ترجیحیترین خلاصه خود را که در فهرست اعلامشده کلاینت متصل نیز وجود دارد انتخاب میکند (و برای کلاینتی که هیچ کدام را اعلام نکرده است به md5، یا برای پروتکل زیر ۳۰ به md4 بازمیگردد)، بنابراین کلاینتی که فقط خلاصههای ضعیف را اعلام میکند همچنان میتواند یک خلاصه مذاکرهشده ضعیف را تحمیل کند. اگر ضعیفتر از نام پیکربندیشده باشد، اتصال پیش از ارسال چالش رد میشود. مقدار، نام یک خلاصه منفرد است، به عنوان مثال:
-
auth digest = sha256
- که مستلزم sha256 یا sha512 است و تبادل با md5 یا md4 را رد میکند.
- این امر در برابر تنزل خلاصه احراز هویت (auth-digest downgrade) محافظت میکند. همتایی که هیچ فهرست خلاصهای ارسال نمیکند (هر rsync پیش از 3.2.0، از جمله openrsync همراه macOS) باعث میشود دیمن به md5 (یا برای پروتکل زیر ۳۰ به md4) بازگردد، و یک مهاجم در مسیر میتواند مذاکره احراز هویتنشده را بازنویسی کند تا همان انتخاب ضعیف را تحمیل نماید. یک چالش-پاسخ به دام افتاده در برابر یک خلاصه ضعیف، برای حمله جستجوی فراگیر برونخط (offline brute-force) بسیار ارزانتر است، بنابراین سایتی که تمام کلاینتهای آن مدرن هستند میتواند یک خلاصه قوی را الزامی کند. برای مدل کامل تهدید به سند SECURITY.md در rsync مراجعه کنید.
- هیچ پیشفرضی وجود ندارد -- کف تعیین نشده و دیمن هر خلاصهای را که مذاکره شود میپذیرد و سازگاری با کلاینتهای قدیمیتر را حفظ میکند. فعال کردن کف، هر کلاینتی را که نتواند حداقل آن خلاصه را ارائه دهد رد میکند، به ویژه هر rsync قدیمیتر از 3.2.0 (زمانی که خلاصههای SHA اضافه شدند) و openrsync بستهبندیشده macOS، که تنها با md4/md5 احراز هویت میکنند. خلاصههای SHA نیازمند rsync ساختهشده با openssl در هر دو انتها هستند؛ نام بردن از خلاصهای که این ساخت ارائه نمیدهد، تمام ورودها به ماژول را رد میکند (fail-closed).
- مانند سایر پارامترهای احراز هویت، این پارامتر ممکن است بر اساس هر ماژول یا برای پیشفرضی که برای هر ماژول اعمال میشود در بخش سراسری فایل پیکربندی تنظیم شود.
- strict modes
- این پارامتر تعیین میکند که آیا دسترسیهای فایل secrets بررسی شود یا خیر. اگر «strict modes» روی true باشد (پیشفرض)، اگر فایل برای «دیگران» قابل خواندن یا نوشتن باشد (یعنی اگر هر یک از بیتهای دسترسی خواندن یا نوشتن دیگران تنظیم شده باشد)، و هنگامی که دیمن به عنوان ریشه اجرا میشود، اگر فایل متعلق به ریشه نباشد، فایل secrets رد میشود. دسترسیهای گروه و بیت اجرای دیگران بررسی نمیشوند، بنابراین حالتهایی مانند 600 یا 640 پذیرفته میشوند در حالی که 644 (یا هر حالت قابل خواندن/نوشتن توسط دیگران) رد میشود. اگر «strict modes» روی false باشد، هیچ بررسی دسترسی انجام نمیشود. این پارامتر برای سازگاری با اجرای rsync در سیستمعامل ویندوز اضافه شده است.
- hosts allow
- این پارامتر به شما امکان میدهد فهرستی از الگوهای جداشده با کاما و/یا فاصله خالی را مشخص کنید که با نام میزبان و آدرس IP کلاینت متصل مطابقت داده میشوند. اگر هیچ یک از الگوها مطابقت نداشته باشد، اتصال رد میشود.
- هر الگو میتواند در یکی از شش شکل زیر باشد:
- o
- یک آدرس دهدهی نقطهدار IPv4 به فرم a.b.c.d، یا یک آدرس IPv6 به فرم a:b:c::d:e:f. در این حالت آدرس IP ماشین ورودی باید دقیقاً مطابقت داشته باشد.
- o
- یک آدرس/ماسک به فرم ipaddr/n که در آن ipaddr آدرس IP و n تعداد بیتهای یک در ماسک شبکه است. تمام آدرسهای IP که با آدرس IP ماسکشده مطابقت دارند مجاز خواهند بود.
- o
- یک آدرس/ماسک به فرم ipaddr/maskaddr که در آن ipaddr آدرس IP و maskaddr ماسک شبکه با نماد دهدهی نقطهدار برای IPv4، یا مشابه آن برای IPv6 است، به عنوان مثال ffff:ffff:ffff:ffff:: به جای /64. تمام آدرسهای IP که با آدرس IP ماسکشده مطابقت دارند مجاز خواهند بود.
- o
- یک الگوی نام میزبان با استفاده از نویسههای عام. اگر نام میزبان IP متصل (همانطور که توسط جستجوی معکوس تعیین میشود) با نام دارای نویسه عام مطابقت داشته باشد (با استفاده از همان قوانین تطبیق نام فایل یونیکس)، کلاینت مجاز است. این تنها در صورتی کار میکند که «reverse lookup» فعال باشد (پیشفرض).
- o
- یک نام میزبان. یک نام میزبان ساده با DNS معکوس IP متصل (اگر «reverse lookup» فعال باشد)، و/یا IP نام میزبان دادهشده با IP متصل (اگر «forward lookup» فعال باشد، همانطور که به طور پیشفرض هست) مطابقت داده میشود. هرگونه تطابق مجاز خواهد بود.
- o
- یک «@» به دنبال نام یک netgroup، که در صورتی که DNS معکوس IP متصل در netgroup مشخصشده باشد، مطابقت خواهد داشت.
- توجه داشته باشید آدرسهای محلی پیوند IPv6 میتوانند در مشخصات آدرس یک حوزه (scope) داشته باشند:
-
fe80::1%link1 fe80::%link1/64 fe80::%link1/ffff:ffff:ffff:ffff::
- همچنین میتوانید «hosts allow» را با «hosts deny» ترکیب کنید تا استثناهایی را به فهرست انکار خود بیفزایید. هنگامی که هر دو پارامتر مشخص شوند، پارامتر «hosts allow» ابتدا بررسی میشود و یک تطابق باعث میشود کلاینت بتواند متصل شود. سپس یک میزبان غیرمجاز با فهرست «hosts deny» بررسی میشود تا مشخص شود که آیا باید رد شود یا خیر. میزبانی که با هیچ یک از فهرستها مطابقت نداشته باشد مجاز به اتصال است.
- پیشفرض، عدم وجود پارامتر «hosts allow» است، که به این معنی است که تمام میزبانها میتوانند متصل شوند.
- hosts deny
- این پارامتر به شما امکان میدهد فهرستی از الگوهای جداشده با کاما و/یا فاصله خالی را مشخص کنید که با نام میزبان و آدرس IP کلاینتهای متصل مطابقت داده میشوند. اگر الگو مطابقت داشته باشد اتصال رد میشود. برای اطلاعات بیشتر به پارامتر «hosts allow» مراجعه فرمایید.
- پیشفرض، عدم وجود پارامتر «hosts deny» است، به این معنی که تمام میزبانها میتوانند متصل شوند.
- reverse lookup
- کنترل میکند که آیا دیمن یک جستجوی معکوس روی آدرس IP کلاینت انجام دهد تا نام میزبان آن را تعیین کند، که برای بررسیهای «hosts allow» و «hosts deny» و کد گریز «%h» در لاگ استفاده میشود. این به طور پیشفرض فعال است، اما اگر میدانید که جستجو نتیجه مفیدی برنمیگرداند ممکن است بخواهید آن را برای صرفهجویی در زمان غیرفعال کنید، که در این صورت دیمن از نام «UNDETERMINED» استفاده خواهد کرد.
- اگر این پارامتر به طور سراسری فعال باشد (حتی به طور پیشفرض)، rsync به محض اتصال یک کلاینت جستجو را انجام میدهد، بنابراین غیرفعال کردن آن برای یک ماژول مانع از انجام جستجو نمیشود. از این رو، احتمالاً میخواهید آن را به صورت سراسری غیرفعال کرده و سپس برای ماژولهایی که به اطلاعات نیاز دارند فعال نمایید.
- forward lookup
- کنترل میکند که آیا دیمن یک جستجوی رو به جلو روی هر نام میزبان مشخصشده در تنظیم hosts allow/deny انجام دهد یا خیر. به طور پیشفرض این فعال است، که امکان استفاده از یک نام میزبان صریح را فراهم میکند که توسط DNS معکوس IP متصل بازگردانده نمیشود.
- ignore errors
- این پارامتر به rsyncd میگوید که هنگام تصمیمگیری در مورد اجرای فاز حذف انتقال، خطاهای ورودی/خروجی (I/O) را در دیمن نادیده بگیرد. به طور معمول rsync در صورت بروز هرگونه خطای I/O از مرحله --delete صرفنظر میکند تا از حذف فاجعهبار ناشی از کمبود موقت منابع یا سایر خطاهای I/O جلوگیری کند. در برخی موارد این بررسی اثر معکوس دارد، بنابراین میتوانید از این پارامتر برای غیرفعال کردن این رفتار استفاده کنید.
- ignore nonreadable
- این به دیمن rsync میگوید فایلهایی را که توسط کاربر قابل خواندن نیستند کاملاً نادیده بگیرد. این برای آرشیوهای عمومی که ممکن است فایلهای غیرقابلخواندن در میان دایرکتوریها داشته باشند و مدیر سیستم نمیخواهد این فایلها اصلاً دیده شوند مفید است.
- transfer logging
- این پارامتر ثبت وقایع بارگیریها و بارگذاریها را بر اساس هر فایل در قالبی تا حدی شبیه به آنچه دیمنهای ftp استفاده میکنند فعال میسازد. دیمن همیشه انتقال را در پایان ثبت میکند، بنابراین اگر انتقالی متوقف شود، هیچ اشارهای در فایل لاگ نخواهد شد.
- اگر میخواهید خطوط لاگ را سفارشی کنید، به پارامتر «log format» مراجعه فرمایید.
- log format
- این پارامتر به شما امکان میدهد قالبی را که برای ثبت انتقال فایل در هنگام فعال بودن ثبت وقایع انتقال استفاده میشود مشخص کنید. قالب، یک رشته متنی حاوی دنبالههای گریز تکنویسهای تعبیهشده است که با نویسه درصد (%) پیشوندگذاری شدهاند. یک عرض فیلد عددی اختیاری نیز ممکن است بین درصد و نویسه گریز مشخص شود (به عنوان مثال «%-50n %8l %07p»). علاوه بر این، یک یا چند آپوستروف ممکن است پیش از یک گریز عددی مشخص شود تا نشان دهد که مقدار عددی باید برای انسان خواناتر شود. ۳ سطح پشتیبانیشده همانند گزینه خط فرمان --human-readable هستند، هرچند پیشفرض خاموش بودن خوانایی برای انسان است. هر آپوستروف اضافهشده سطح را افزایش میدهد (به عنوان مثال «%''l %'b %f»).
- قالب لاگ پیشفرض «%o %h [%a] %m (%u) %f %l» است، و هنگام استفاده از پارامتر «log file» همواره یک «%t [%p] » در ابتدا قرار میگیرد. (یک اسکریپت perl که این قالب پیشفرض را خلاصه میکند در توزیع کد منبع rsync در زیردایرکتوری «support» با نام rsyncstats گنجانده شده است.)
- دنبالههای گریز تکنویسهای که شناخته میشوند به شرح زیر هستند:
- o
- %a آدرس IP راه دور (تنها برای دیمن موجود است)
- o
- %b تعداد بایتهای واقعاً منتقلشده
- o
- %B بیتهای دسترسی فایل (مانند rwxrwxrwt)
- o
- %c اندازه کل مجموع کنترلی بلوکهای دریافتشده برای فایل مبنا (تنها هنگام ارسال)
- o
- %C مجموع کنترلی کل فایل در صورتی که برای فایل شناخته شده باشد. برای پروتکلها/نسخههای قدیمیتر rsync، مجموع کنترلی نمکسود شده بود (salted)، و بنابراین مقدار مفیدی نیست (و در این حالت نمایش داده نمیشود). برای اینکه مجموع کنترلی برای یک فایل خروجی داده شود، یا گزینه --checksum باید موثر باشد یا فایل باید بدون استفاده از مجموع کنترلی نمکسود انتقال یافته باشد. برای روشی جهت انتخاب الگوریتم به گزینه --checksum-choice مراجعه کنید.
- o
- %f نام فایل (فرم کامل در فرستنده؛ بدون اسلش انتهایی)
- o
- %G شناسه گروهی (gid) فایل (دهدهی) یا «DEFAULT»
- o
- %h نام میزبان راه دور (تنها برای دیمن در دسترس است)
- o
- %i فهرست اقلامی از آنچه در حال بهروزرسانی است
- o
- %l طول فایل به بایت
- o
- %L رشته « -> SYMLINK»، « => HARDLINK»، یا «» (که در آن SYMLINK یا HARDLINK نام فایل است)
- o
- %m نام ماژول
- o
- %M زمان آخرین اصلاح فایل
- o
- %n نام فایل (فرم کوتاه؛ اسلش انتهایی روی دایرکتوری)
- o
- %o عملیات، که «send»، «recv» یا «del.» است (مورد آخر شامل نقطه پایانی است)
- o
- %p شناسه فرآیند (PID) این نشست rsync
- o
- %P مسیر ماژول
- o
- %t تاریخ و زمان جاری
- o
- %u نام کاربری احرازشده یا یک رشته خالی
- o
- %U شناسه کاربری (uid) فایل (دهدهی)
- برای فهرستی از معنای نویسههای خروجی داده شده توسط «%i»، به گزینه --itemize-changes در صفحه راهنمای rsync مراجعه کنید.
- توجه داشته باشید که برخی از خروجیهای ثبتشده در هنگام گفتگو با نسخههای قدیمیتر rsync تغییر میکنند. برای مثال، فایلهای حذفشده پیش از rsync 2.6.4 تنها به عنوان پیامهای پرگو خروجی داده میشدند.
- timeout
- این پارامتر به شما امکان میدهد انتخاب کلاینت را برای مهلت زمانی ورودی/خروجی (I/O timeout) برای این ماژول لغو کنید. با استفاده از این پارامتر میتوانید مطمئن شوید که rsync تا ابد منتظر یک کلاینت مرده نخواهد ماند. مهلت زمانی بر حسب ثانیه مشخص میشود. مقدار صفر به معنای عدم وجود مهلت زمانی است و مقدار پیشفرض است. یک انتخاب خوب برای دیمنهای rsync ناشناس ممکن است ۶۰۰ باشد (که مهلت زمانی ۱۰ دقیقهای را فراهم میآورد).
- refuse options
- این پارامتر به شما امکان میدهد فهرستی از گزینههای خط فرمان rsync جداشده با فاصله را مشخص کنید که توسط دیمن rsync شما رد خواهند شد. میتوانید نام کامل گزینه، مخفف تکحرفی آن، یا یک رشته عام را که با چندین گزینه مطابقت دارد مشخص کنید. از نسخه 3.2.0 به بعد، میتوانید با آغاز یک عبارت با «!»، شرط تطابق را نقیض نمایید.
- هنگامی که گزینهای رد میشود، دیمن پیام خطا را چاپ کرده و خارج میشود.
- برای نمونه، این تنظیم --checksum (-c) و تمام گزینههای مختلف حذف را رد میکند:
-
refuse options = c delete
- دلیل اینکه دستور بالا تمام گزینههای حذف را رد میکند این است که آن گزینهها متضمن --delete هستند، و گزینههای ضمنی دقیقاً مانند گزینههای صریح رد میشوند.
- استفاده از تطبیق نقیض به شما امکان میدهد رد کردنهای خود را پس از یک نویسه عام دقیقاً تنظیم کنید، مانند این:
-
refuse options = delete-* !delete-during
- تطبیق نقیض همچنین میتواند فهرست گزینههای ردشده شما را به فهرست گزینههای پذیرفتهشده تبدیل کند. برای انجام این کار، فهرست را با یک «*» آغاز کنید (برای رد تمام گزینهها) و سپس یک یا چند تطابق نقیض را برای پذیرش مشخص کنید. برای نمونه:
-
refuse options = * !a !v !compress*
- نگران نباشید که «*» گزینههای حیاتی خاصی مانند --dry-run، --server، --no-iconv، --seclude-args و غیره را رد کند. این گزینههای مهم با نویسه عام مطابقت داده نمیشوند، بنابراین باید با نام دقیق خود لغو شوند. برای مثال، اگر انتقالهای iconv را اجباری میکنید، میتوانید از چیزی مانند این استفاده کنید:
-
refuse options = * no-iconv !a !v
- به عنوان یک راهنمای اضافی (از 3.2.0 به بعد)، رد کردن (یا «!refusing») گزینه «a» یا «archive» همچنین بر تمام گزینههایی که گزینه --archive متضمن آن است (-rdlptgoD) تاثیر میگذارد، اما تنها در صورتی که گزینه به طور صریح مطابقت داده شود (نه با استفاده از نویسه عام). اگر میخواهید کار پیچیدهای انجام دهید، میتوانید از «archive*» استفاده کنید تا از این اثر جانبی جلوگیری نمایید، اما به یاد داشته باشید که هیچ کلاینت عادی rsync هرگز گزینه واقعی archive را به سرور ارسال نمیکند.
- به عنوان یک ویژگی ایمنی اضافی، رد کردن «delete» همچنین remove-source-files را هنگامی که دیمن فرستنده است رد میکند؛ اگر دومی را بدون اولی میخواهید، به جای آن «delete-*» را رد کنید زیرا این تمام حالتهای حذف را بدون تاثیر بر --remove-source-files رد میکند. (به خاطر داشته باشید که گزینه --delete کلاینت معمولاً منجر به --delete-during میشود.)
- هنگام خارج کردن گزینههای delete از حالت رد، باید یا «!delete*» را مشخص کنید (تا تمام گزینههای delete پذیرفته شوند) یا مجموعهای محدود را که شامل «delete» است مشخص نمایید، مانند:
-
refuse options = * !a !delete !delete-during
- ... در حالی که این تنظیم هر گزینه delete به جز --delete-after را میپذیرد:
-
refuse options = * !a !delete* delete-after
- یادداشتی درباره رد «compress»: ممکن است بهتر باشد پارامتر «dont compress» دیمن را روی «*» تنظیم کنید و مطمئن شوید که RSYNC_COMPRESS_LIST=zlib در محیط دیمن تنظیم شده است تا فشردهسازی بیصدا غیرفعال شود، به جای اینکه خطایی برگردانید که کلاینت را مجبور به حذف گزینه -z کند.
- اگر در حال لغو رد گزینه compress هستید، اگر میخواهید به گزینه --compress-level نیز اجازه دهید، ممکن است بخواهید «!compress*» را مطابقت دهید.
- توجه داشته باشید که گزینههای «copy-devices» و «write-devices» به طور پیشفرض رد میشوند، اما میتوانند با «!copy-devices» و/یا «!write-devices» صریحاً پذیرفته شوند. گزینههای «log-file» و «log-file-format» اجباراً رد میشوند و پذیرفته نمیشوند.
- در اینجا تمام گزینههایی که با نویسههای عام مطابقت داده نمیشوند آورده شده است:
- o
- --server: برای اینکه rsync اصلاً کار کند الزامی است.
- o
- --rsh، -e: برای انتقال فلگهای سازگاری به سرور الزامی است.
- o
- --out-format: این برای انتقال رفتار خروجی به گیرنده راه دور الزامی است. در حالی که rsync نام مستعار قدیمیتر --log-format را به دلایل سازگاری ارسال میکند، این گزینه نباید با --log-file-format اشتباه گرفته شود.
- o
- --sender: به جای رد کردن این، از پارامتر «write only» استفاده کنید.
- o
- --dry-run، -n: چه کسی میخواهد این را غیرفعال کند؟
- o
- --seclude-args، -s: قدیمیترین روش محافظت از آرگومانها است.
- o
- --from0، -0: پذیرش/رد --files-from را بدون تاثیر بر این اصلاحکننده مفید آسانتر میکند.
- o
- --iconv: این بر اساس پارامتر «charset» به طور خودکار غیرفعال میشود.
- o
- --no-iconv: بیشتر انتقالها از این گزینه استفاده میکنند.
- o
- --checksum-seed: یک گزینه نسبتاً نادر و ایمن است.
- o
- --write-devices: بدون نویسه عام است اما به طور خودکار نیز غیرفعال میشود.
- dont compress
- توجه: این پارامتر در حال حاضر هیچ تاثیری ندارد مگر در یک مورد: اگر روی «*» تنظیم شود، فشردهسازی را برای تمام فایلها به حداقل میرساند یا غیرفعال میکند (برای کسانی که نمیخواهند گزینه --compress را کاملاً رد کنند).
- این پارامتر به شما امکان میدهد نام فایلها را بر اساس الگوهای عام انتخاب کنید که نباید هنگام واکشی فایلها از دیمن فشرده شوند (هیچ پارامتر مشابهی برای مدیریت ارسال فایلها به دیمن وجود ندارد). فشردهسازی میتواند از نظر مصرف CPU پرهزینه باشد، بنابراین معمولاً بهتر است سعی نکنید فایلهایی را که به خوبی فشرده نمیشوند، مانند فایلهایی که از قبل فشرده شدهاند، فشردهسازی کنید.
- پارامتر «dont compress» فهرستی از الگوهای عام غیرحساس به حروف بزرگ و کوچک را که با فاصله جدا شدهاند میپذیرد. هر نام فایل منبع منطبق با یکی از الگوها در طول انتقال تا جای ممکن کمتر فشرده خواهد شد. اگر الگوریتم فشردهسازی سطح «off» داشته باشد، هیچ فشردهسازی برای آن فایلها رخ نمیدهد. اگر الگوریتمی توانایی تغییر سطح در میانه جریان را داشته باشد، برای کاهش مصرف CPU تا جای ممکن به حداقل میرسد.
- برای فهرستی از پسوندهای فایلی که اگر این پارامتر تنظیم نشده باشد به طور پیشفرض نادیده گرفته میشوند، به پارامتر --skip-compress در صفحه راهنمای rsync(1) مراجعه فرمایید.
- early exec, pre-xfer exec, post-xfer exec
- میتوانید دستوری را مشخص کنید که در مراحل اولیه اتصال، یا درست قبل و/یا بعد از انتقال اجرا شود. اگر دستور early exec یا pre-xfer exec کد خطا برگرداند، انتقال پیش از آغاز متوقف میشود. هر خروجی از دستور pre-xfer exec روی stdout (تا چند کیلوبایت) هنگام متوقف شدن به کاربر نمایش داده میشود، اما اگر اسکریپت با موفقیت برگردد نمایش داده نمیشود. برنامههای دیگر نمیتوانند متنی به کاربر ارسال کنند. تمام خروجیها به جز stdout دستور pre-xfer exec به stdout/stderr دیمن مربوطه میروند که معمولاً دور ریخته میشوند. برای مشاهده خروجی دیمن، که میتواند به اشکالزدایی کمک کند، به گزینه --no-detach مراجعه کنید.
- توجه داشته باشید که دستور early exec پیش از آنکه هر بخشی از درخواست انتقال به جز نام ماژول مشخص شود اجرا میگردد. این اسکریپت کمکی میتواند برای راهاندازی سوار کردن دیسک یا رمزگشایی برخی دادهها درون یک دایرکتوری ماژول استفاده شود، اما ممکن است برای جلوگیری از مشکلات همزمانی به استفاده از lock file و max connections نیاز داشته باشید. اگر rsync کلاینت گزینه --early-input=FILE را مشخص کرده باشد، میتواند تا حدود ۵ کیلوبایت داده به stdin اسکریپت اولیه ارسال کند. در غیر این صورت stdin خالی خواهد بود.
- توجه داشته باشید که دستور post-xfer exec حتی در صورتی که یکی از اسکریپتهای دیگر کد خطا برگرداند، همچنان اجرا میشود. با این حال، اگر دستور early exec با شکست مواجه شود، دستور pre-xfer exec اجرا نخواهد شد.
- متغیرهای محیطی زیر تنظیم خواهند شد، هرچند برخی از آنها مخصوص محیط پیش از انتقال (pre-xfer) یا پس از انتقال (post-xfer) هستند:
- o
- RSYNC_MODULE_NAME: نام ماژول در حال دسترسی.
- o
- RSYNC_MODULE_PATH: مسیر پیکربندیشده برای ماژول.
- o
- RSYNC_HOST_ADDR: آدرس IP میزبان دسترسیپیداکرده.
- o
- RSYNC_HOST_NAME: نام میزبان دسترسیپیداکرده.
- o
- RSYNC_USER_NAME: نام کاربر دسترسیپیداکرده (در صورت عدم وجود کاربر خالی است).
- o
- RSYNC_PID: یک شماره یکتا برای این انتقال.
- o
- RSYNC_REQUEST: (تنها در pre-xfer) اطلاعات ماژول/مسیر مشخصشده توسط کاربر. توجه داشته باشید که کاربر میتواند چندین فایل منبع را مشخص کند، بنابراین درخواست میتواند چیزی شبیه به «mod/path1 mod/path2» و غیره باشد.
- o
- RSYNC_ARG#: (تنها در pre-xfer) آرگومانهای پیشدرخواست در این مقادیر شمارهگذاریشده تنظیم میشوند. RSYNC_ARG0 همواره «rsyncd» است، و پس از آن گزینههایی که در RSYNC_ARG1 استفاده شدهاند میآیند و به همین ترتیب. مقداری با «.» وجود خواهد داشت که نشان میدهد گزینهها پایان یافته و آرگومانهای مسیر آغاز شدهاند -- اینها حاوی اطلاعاتی مشابه RSYNC_REQUEST هستند، اما با مقادیر جداشده و نام ماژول حذفشده.
- o
- RSYNC_EXIT_STATUS: (تنها در post-xfer) مقدار خروج سمت سرور. این مقدار 0 برای یک اجرای موفق، یک مقدار مثبت برای خطایی که سرور ایجاد کرده، یا -1 در صورتی که rsync نتواند به درستی خارج شود خواهد بود. توجه داشته باشید که خطایی که در سمت کلاینت رخ میدهد در حال حاضر به سمت سرور ارسال نمیشود، بنابراین این وضعیت خروج نهایی برای کل انتقال نیست.
- o
- RSYNC_RAW_STATUS: (تنها در post-xfer) مقدار خام خروج از waitpid().
- یک ارجاع %VAR% که درون یکی از این دستورات گسترش مییابد، برای زمینه نقلقولی که در آن ظاهر میشود گریز داده میشود، که برای شل واحدی که دستور را اجرا میکند صحیح است. این برای دستوری که شل دومی را آغاز میکند، مانند sh -c '... %RSYNC_USER_NAME% ...' درست نیست: شل بیرونی کاراکترهای گریز را مصرف میکند و شل درونی مقدار را بدون محافظت میبیند. در این صورت مقداری مانند touc? در برابر /usr/bin/ گسترش داده میشود (glob)، بنابراین جایگزینی دیگر داده نیست -- بلکه دستور را انتخاب میکند.
- از آنجا که rsync نمیتواند برای تعداد نامعلومی از پاسهای شل عمل گریز را انجام دهد، مقداری که حامل هر نویسهای باشد که یک شل میتواند روی آن عمل کند، بیدرنگ رد میشود و انتقال متوقف میگردد با:
-
refusing to run shell hook: %VAR% holds a shell metacharacter
- نویسههای ردشده عبارتند از فاصله خالی، نویسههای نقلقول و گسترش ' " ` $ \، جداکنندههای ; & |، تغییرمسیرهای < >، پرانتزها، نویسههای الگوی * ? [ ]، #، !، ~، { }، و هر نویسه کنترلی. برخی از آنها به خودی خود بیضرر هستند و به دلیل کاری که یک شل دوم با آنها انجام میدهد رد میشوند -- ! در موقعیت دستور عمل نقیض را انجام میدهد، بنابراین یک هوک که به عنوان بررسی دسترسی نوشته شده است میتواند از انکار به پذیرش تبدیل شود، و ~ به دایرکتوری خانگی گسترش مییابد.
- این امر در مورد هر مقدار %RSYNC_*%، از جمله مقادیری که خودتان ارائه کردهاید، صدق میکند. به ویژه ماژولی که path آن شامل هر یک از آنها باشد نمیتواند در یکی از این دستورات درج شود: path = /srv/My Backups همراه با دستوری که به %RSYNC_MODULE_PATH% اشاره دارد، تمام انتقالهای آن ماژول را رد خواهد کرد، نه فقط یک انتقال خصمانه را. این محدودیت عمدی است -- rsync نمیتواند فاصله خالی شما را از فاصله مهاجم پس از قرار گرفتن هر دو درون یک رشته تشخیص دهد، و خود path ممکن است از مقدار همتا ساخته شده باشد مانند path = /home/%RSYNC_USER_NAME%.
- اگر در یک هوک به چنین مقداری نیاز دارید، آن را به جای درج مستقیم از طریق محیط عبور دهید: همان نامها به دستور صادر میشوند، بنابراین "$RSYNC_MODULE_PATH" درون اسکریپت شما توسط این بررسی محدود نمیشود. آن را همانطور که نشان داده شده است در آنجا نقلقول کنید -- rsync دیگر در نحوه تقسیم مقدار توسط اسکریپت شما دخالتی ندارد.
- اگرچه این دستورات میتوانند با یک ماژول خاص مرتبط باشند، اما با دسترسیهای کاربری که دیمن را آغاز کرده است (نه تنظیم uid/gid ماژول) بدون هیچگونه محدودیت chroot اجرا میشوند.
- این تنظیمات ۲ متغیر محیطی را گرامی میدارند: از RSYNC_SHELL برای تعیین شلی برای استفاده در هنگام اجرای دستور استفاده کنید (که در غیر این صورت از شل پیشفرض فراخوانی system() شما استفاده میکند)، و از RSYNC_NO_XFER_EXEC برای غیرفعال کردن کامل هر دو گزینه استفاده نمایید.
- temp dir
- دایرکتوری را مشخص میکند که rsync باید برای فایلهای موقت ایجاد شده در طول انتقال فایلهای بهروزرسانیشده استفاده کند. اگر آن دایرکتوری در یک پارتیشن متفاوت باشد، پس از انتقال، فایل به جای unlinked شدن کپی میشود.
- این پارامتر با گزینه --temp-dir برابری میکند، بنابراین لطفاً برای اطلاعات بیشتر به صفحه راهنمای rsync مراجعه کنید.
دستورالعملهای پیکربندی (CONFIG DIRECTIVES)
در حال حاضر دو دستورالعمل پیکربندی در دسترس است که به فایل پیکربندی اجازه میدهد محتویات فایلهای دیگر را در خود بگنجاند: &include و &merge. هر دو امکان ارجاع به یک فایل یا یک دایرکتوری را فراهم میکنند. آنها در نحوه تفکیک محتویات فایل با یکدیگر تفاوت دارند.
دستورالعمل &include با هر فایل به گونهای متمایزتر برخورد میکند، به طوری که هر یک پیشفرضهای فایل والد را به ارث میبرد، تجزیه پارامترها را به عنوان سراسری/پیشفرض آغاز میکند، و پیشفرضها را برای تجزیه بقیه فایل والد بدون تغییر باقی میگذارد.
از سوی دیگر، دستورالعمل &merge با محتویات فایل به گونهای برخورد میکند که گویی صرفاً در محل دستورالعمل درج شده است، و بنابراین میتواند پارامترهایی را در ماژولی که در فایل دیگری آغاز شده است تنظیم کند، میتواند بر پیشفرضهای فایلهای دیگر تاثیر بگذارد و غیره.
هنگامی که یک دستورالعمل &include یا &merge به یک دایرکتوری ارجاع میدهد، تمام فایلهای *.conf یا *.inc (به ترتیب) موجود در آن دایرکتوری را (بدون هیچ پویش بازگشتی)، با مرتبسازی الفبایی فایلها میخواند. بنابراین، اگر دایرکتوری به نام «rsyncd.d» با فایلهای «foo.conf»، «bar.conf» و «baz.conf» درون آن دارید، این دستورالعمل:
&include /path/rsyncd.d
همانند این مجموعه از دستورالعملها خواهد بود:
&include /path/rsyncd.d/bar.conf &include /path/rsyncd.d/baz.conf &include /path/rsyncd.d/foo.conf
با این تفاوت که با اضافه و حذف شدن فایلها از دایرکتوری به طور خودکار تنظیم میشود.
مزیت دستورالعمل &include این است که میتوانید یک یا چند ماژول را در یک فایل جداگانه تعریف کنید بدون اینکه نگران اثرات جانبی ناخواسته میان فایلهای ماژول خودکفا باشید.
مزیت دستورالعمل &merge این است که میتوانید قطعههای پیکربندی را بارگذاری کنید که میتوانند در تعاریف ماژولهای متعدد گنجانده شوند، و همچنین میتوانید مقادیر سراسری را تنظیم کنید که بر اتصالات تاثیر میگذارند (مانند motd file)، یا مقادیر سراسری که بر سایر فایلهای include تاثیر خواهند گذاشت.
برای مثال، این یک فایل /etc/rsyncd.conf مفید است:
port = 873 log file = /var/log/rsync.log pid file = /var/lock/rsync.lock &merge /etc/rsyncd.d &include /etc/rsyncd.d
این هر فایل /etc/rsyncd.d/*.inc را ادغام میکند (برای مقادیر سراسری که باید موثر باقی بمانند)، و سپس هر فایل /etc/rsyncd.d/*.conf را میگنجاند (که ماژولها را بدون هیچگونه تداخل مقادیر سراسری تعریف میکند).
امنیت (SECURITY)
دیمن rsync بخشی از سیستم فایل شما را در معرض کلاینتهای شبکه قرار میدهد، و فرآیند اصلی آن معمولاً به عنوان ریشه اجرا میشود، بنابراین باید به صورت دفاعی پیکربندی شود. موارد زیر یک چکلیست کاربردی است؛ سند SECURITY.md این پروژه مدل تهدید اساسی و ریسکهای باقیمانده بر اساس پلتفرم را شرح میدهد.
- محدود کردن هر ماژول به مسیر خودش.
- پارامتر «use chroot» را فعال بگذارید (پیشفرض تلاش برای chroot است) تا کارگر مربوط به هر اتصال در درون «path» ماژول زندانی شود. در جاهایی که chroot در دسترس نیست rsync همچنان هر مسیر انتقال را حلوفصل میکند تا نتواند از طریق یک والد با پیوند نمادین از ماژول فرار کند، اما chroot مرز قویتری است -- آن را روشن نگه دارید مگر اینکه دلیل خاصی برای عدم انجام آن داشته باشید. یک path = /outer/./inner به /outer چروت میکند در حالی که /inner را به عنوان ریشه ماژول ارائه میدهد."
- کاهش دسترسیها.
- به هر ماژول یک «uid» و «gid» با دسترسی پایین اختصاص دهید تا یک کارگر هرگز فایلها را به عنوان ریشه ارائه ندهد؛ تنها فرآیند اصلی به ریشه نیاز دارد (برای chroot و اتصال به درگاه). ماژولها را روی «read only» نگه دارید مگر اینکه مجبور باشند بارگذاریها را بپذیرند، و «numeric ids» (یا یک «name converter») را ترجیح دهید تا یک فهرست فایل مخرب نتواند فایلها را به یک مالک محلی غیرمنتظره نگاشت کند."
- محدود کردن افرادی که میتوانند متصل شوند.
- قابلیت دسترسی را با «hosts allow» / «hosts deny» محدود کنید، دیمن را به یک «address» خاص متصل نمایید، و از فایروال میزبان استفاده کنید. ماژولی بدون «auth users» برای هر کسی که بتواند به درگاه دسترسی یابد قابل دسترسی است."
- احراز هویت با یک راز و خلاصه قوی.
- ورود به سیستم را با «auth users» به همراه یک «secrets file» که تنها توسط کاربر دیمن قابل خواندن است الزامی کنید (rsync یک فایل بیش از حد باز را رد میکند مگر اینکه «strict modes» غیرفعال باشد)، و از یک راز طولانی با آنتروپی بالا استفاده کنید. برای رد خلاصههای چلنج ضعیف MD4/MD5 که کلاینتهای قدیمی میتوانند مذاکره کنند، کفی با «auth digest» تنظیم کنید (برای نمونه auth digest = sha512)؛ به بخش AUTHENTICATION STRENGTH در زیر مراجعه فرمایید."
- رمزگذاری اتصال.
- پروتکل دیمن احراز هویت میکند اما جریان داده را رمزگذاری نمیکند. یک دیمن متن آشکار را در معرض یک شبکه غیرقابلاعتماد قرار ندهید: آن را با یک پروکسی TLS همراه کنید (به بخش SSL/TLS Daemon Setup در زیر مراجعه کنید) یا آن را روی ssh اجرا نمایید."
- حفظ ایمنی مدیریت پیوندهای نمادین.
- پارامتر «munge symlinks» را در هر ماژول قابلنوشتن فعال بگذارید (این پیشفرض است) تا یک پیوند نمادین بارگذاریشده نتواند عملیات بعدی را به خارج از ماژول هدایت کند. «insecure links = yes» را روی میزبانی که با کاربران محلی غیرقابلاعتماد به اشتراک گذاشته شده است تنظیم نکنید: این کار حفاظتهای فرار از پیوند نمادین دیمن را غیرفعال میکند (آسیبپذیریهای TOCTOU/فرار پیوند نمادین، از جمله CVE-2026-53797 و CVE-2026-53801 را دوباره باز میکند) و تنها در یک میزبان تکمستأجر و کاملاً ایزوله مناسب است."
- رد کردن گزینههایی که نمیخواهید.
- از «refuse options» برای رد گزینههای کلاینت که یک ماژول نباید اجازه دهد استفاده کنید."
قدرت احراز هویت (AUTHENTICATION STRENGTH)
احراز هویت دیمن یک سیستم چالش-پاسخ است که در آن کلاینت خلاصهای از راز مشترک و چالش انتخابی سرور را برمیگرداند. rsync مدرن (3.2.7 و جدیدتر، ساختهشده با openssl) قویترین خلاصهای را که هر دو طرف پشتیبانی میکنند مذاکره میکند -- به طور پیشفرض sha512 -- اما برای سازگاری با گذشته برای کلاینتی که هیچ فهرست خلاصهای اعلام نمیکند به md5 (یا زیر پروتکل ۳۰ به md4) بازمیگردد، و خود مذاکره خلاصه احراز هویت نشده است. دیمنی که میخواهد خلاصه قوی را الزامی کند میتواند «auth digest» را تنظیم کند. برای بهترین محافظت، rsync را روی ssh یا یک انتقال TLS تاییدشده (rsync-ssl) اجرا کنید، که از تبادل در لایه انتقال محافظت میکند، و از یک راز مشترک با آنتروپی بالا استفاده نمایید (که صرفنظر از خلاصه، شکستن آن با جستجوی فراگیر غیرممکن است).
همچنین توجه داشته باشید که پروتکل دیمن rsync در حال حاضر هیچگونه رمزگذاری دادههایی را که در طول اتصال منتقل میشوند ارائه نمیدهد. تنها احراز هویت ارائه میشود. اگر رمزگذاری میخواهید از ssh به عنوان انتقال استفاده کنید.
همچنین میتوانید در صورتی که rsync را پشت یک پروکسی SSL قرار دهید، از رمزگذاری SSL/TLS استفاده نمایید.
راهاندازی دیمن با SSL/TLS (SSL/TLS Daemon Setup)
هنگام راهاندازی دیمن rsync برای دسترسی از طریق SSL/TLS، باید یک پروکسی TCP (مانند haproxy یا nginx) را به عنوان فرانتاند که رمزگذاری را مدیریت میکند پیکربندی نمایید.
- o
- باید دسترسی به درگاه backend-rsyncd را محدود کنید تا تنها به پروکسی اجازه اتصال داده شود. اگر در همان میزبان پروکسی قرار دارد، پیکربندی آن برای شنود تنها روی localhost ایده خوبی است.
- o
- در صورتی که پروکسی شما از ارسال این اطلاعات پشتیبانی میکند، باید روشن کردن پارامتر rsync-daemon با عنوان proxy protocol را در نظر بگیرید. مثالهای زیر فرض میکنند که این مورد فعال است.
یک نمونه پیکربندی haproxy به شرح زیر است:
frontend fe_rsync-ssl bind :::874 ssl crt /etc/letsencrypt/example.com/combined.pem mode tcp use_backend be_rsync backend be_rsync mode tcp server local-rsync 127.0.0.1:873 check send-proxy
یک نمونه پیکربندی پروکسی nginx به شرح زیر است:
stream {
server {
listen 874 ssl;
listen [::]:874 ssl;
ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com/privkey.pem;
proxy_pass localhost:873;
proxy_protocol on; # Requires rsyncd.conf "proxy protocol = true"
proxy_timeout 1m;
proxy_connect_timeout 5s;
}
}
اگر rsyncd باید به طور همزمان به صورت رمزگذاریشده و رمزگذارینشده در دسترس باشد، پروکسی را روی درگاه ۸۷۳ نیز به گوش بنشانید و اجازه دهید هر دو جریان را مدیریت کند.
نمونههای پیکربندی دیمن (DAEMON CONFIG EXAMPLES)
یک فایل ساده rsyncd.conf که اجازه rsync ناشناس را به یک ناحیه ftp در /home/ftp میدهد عبارت است از:
[ftp]
path = /home/ftp
comment = ftp export area
یک مثال پیشرفتهتر عبارت است از:
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
[ftp]
path = /var/ftp/./pub
comment = whole ftp area (approx 6.1 GB)
[sambaftp]
path = /var/ftp/./pub/samba
comment = Samba ftp area (approx 300 MB)
[rsyncftp]
path = /var/ftp/./pub/rsync
comment = rsync ftp area (approx 6 MB)
[sambawww]
path = /public_html/samba
comment = Samba WWW pages (approx 240 MB)
[cvs]
path = /data/cvs
comment = CVS repository (requires authentication)
auth users = tridge, susan
secrets file = /etc/rsyncd.secrets
فایل /etc/rsyncd.secrets چیزی شبیه به این خواهد بود:
tridge:mypass susan:herpass
فایلها (FILES)
/etc/rsyncd.conf یا rsyncd.conf
همچنین ببینید (SEE ALSO)
اشکالات (BUGS)
لطفاً اشکالات را گزارش دهید! سامانه ردیابی اشکالات rsync به صورت برخط در نشانی زیر در دسترس است: https://rsync.samba.org.
نسخه (VERSION)
این صفحه راهنما مربوط به نسخه 3.5.0 از rsync است.
اعتبارات (CREDITS)
نرمافزار rsync تحت مجوز عمومی همگانی گنو (GNU GPL) توزیع میشود. برای جزئیات به فایل COPYING مراجعه کنید.
وبسایت rsync در نشانی زیر در دسترس است: https://rsync.samba.org و پروژه گیتهاب آن در: https://github.com/RsyncProject/rsync.
قدردانیها (THANKS)
با تشکر از Warren Stanley برای ایده اولیه و وصله دیمن rsync. با تشکر از Karsten Thygesen برای پیشنهادات فراوان و مستندسازی!
نویسنده (AUTHOR)
نرمافزار rsync در ابتدا توسط Andrew Tridgell و Paul Mackerras نوشته شده است. افراد زیادی از سراسر جهان به نگهداری و بهبود آن کمک کردهاند.
تشکر ویژه از Wayne Davison که از سال ۲۰۰۴ تا ۲۰۲۴ از rsync نگهداری کرد.
فهرستهای پستی برای پشتیبانی و توسعه در نشانی زیر در دسترس هستند: https://lists.samba.org.
| 13 Aug 2026 | rsyncd.conf from rsync 3.5.0 |