fuse(8) System Manager's Manual fuse(8)

mount.fuse3 - پیکربندی و گزینه‌های سوار کردن برای سیستم‌های فایل FUSE

سامانه FUSE (کوته‌نوشت Filesystem in Userspace یا سیستم فایل در فضای کاربری) یک رابط ساده برای برنامه‌های فضای کاربری است تا یک سیستم فایل مجازی را به هسته لینوکس صادر کنند. همچنین FUSE در پی فراهم کردن روشی امن برای کاربران غیرممتاز است تا پیاده‌سازی‌های سیستم فایل اختصاصی خود را بسازند و سوار کنند.

سیستم فایل درون‌هسته‌ای که درخواست‌ها را به یک فرایند در فضای کاربری هدایت می‌کند.
فرایند فضای کاربری که به درخواست‌های دریافتی از هسته پاسخ می‌دهد.
کتابخانه مشترکی که اکثر سیستم‌های فایل (فضای کاربری) برای ارتباط با FUSE (سیستم فایل هسته) از آن استفاده می‌کنند. همچنین libfuse ابزار کمکی fusermount3 (یا در صورت داشتن نسخه‌های قدیمی‌تر libfuse، ابزار fusermount) را برای مجاز ساختن کاربران غیرممتاز به سوار کردن سیستم‌های فایل ارائه می‌دهد.
کاربری که سیستم فایل را راه‌اندازی کرده و به هسته دستور می‌دهد آن را به یک نقطه سوار کردن مشخص پیوند دهد. این پیوند معمولاً هنگام راه‌اندازی توسط خود سیستم فایل انجام می‌شود. در صورت استفاده از libfuse، این کار با فراخوانی ابزار fusermount3 انجام می‌گیرد.
هر فرایندی که با نقطه سوار کردن تعامل دارد.

برخی از گزینه‌های مربوط به سیاست سوار کردن را می‌توان در فایل /etc/fuse.conf تنظیم کرد. در حال حاضر این گزینه‌ها عبارتند از:

حداکثر تعداد سوار کردن‌های FUSE را که برای کاربران غیرریشه مجاز است تعیین می‌کند. مقدار پیش‌فرض 1000 است.
به کاربران غیرریشه اجازه می‌دهد گزینه‌های سوار کردن allow_other یا allow_root را مشخص کنند (پایین‌تر را ببینید).
این محدودیت‌ها توسط ابزار کمکی fusermount3 اعمال می‌شوند، بنابراین سیستم‌های فایلی که با دسترسی ریشه اجرا می‌شوند می‌توانند از آن‌ها صرف‌نظر کنند.

بیشتر گزینه‌های عمومی سوار کردن که در mount توصیف شده‌اند پشتیبانی می‌شوند (ro، rw، suid، nosuid، dev، nodev، exec، noexec، atime، noatime، sync، async، dirsync). سیستم‌های فایل به‌طور پیش‌فرض با nodev,nosuid سوار می‌شوند، که تنها توسط یک کاربر ممتاز قابل بازنویسی و تغییر است.

این‌ها گزینه‌های اختصاصی سوار کردن FUSE هستند که می‌توان آن‌ها را برای تمامی سیستم‌های فایل مشخص کرد:

این گزینه به هسته دستور می‌دهد تا به‌جای واگذاری تمام بررسی‌های دسترسی به سیستم فایل، بررسی مجوزهای خود را انجام دهد. بررسی توسط هسته علاوه‌بر هرگونه بررسی مجوز توسط سیستم فایل انجام می‌شود و هر دو باید موفقیت‌آمیز باشند تا یک عملیات مجاز شناخته شود. هسته یک بررسی دسترسی استاندارد یونیکس (بر اساس بیت‌های حالت و مالکیت ورودی دایرکتوری، و uid/gid کلاینت) انجام می‌دهد.

این گزینه سوار کردن به‌طور ضمنی فعال می‌شود اگر سیستم فایل در طول مذاکره اولیه قابلیت‌ها هنگام باز کردن توصیف‌گر فایل (fd) دستگاه، پشتیبانی از ACL را فعال کند. در این حالت، هسته هم بررسی دسترسی ACL و هم بررسی مجوز استاندارد یونیکس را انجام می‌دهد.

سیستم‌های فایلی که هیچ‌گونه بررسی دسترسی را پیاده‌سازی نمی‌کنند، عموماً باید این گزینه را به‌صورت داخلی اضافه کنند.

این گزینه تدبیر امنیتی محدودکننده دسترسی به فایل را برای مالک سیستم فایل لغو می‌کند، به‌طوری که همه کاربران (شامل کاربر ریشه) بتوانند به فایل‌ها دسترسی داشته باشند.
حالت دسترسی ریشه سیستم فایل را مشخص می‌کند (در نمایش هشت‌هشتی / اکتال).
یک سیستم فایل مبتنی بر یک دستگاه بلوکی را سوار می‌کند. این یک گزینه نیازمند دسترسی ممتاز است. دستگاه باید با گزینه fsname=NAME مشخص شود.
اندازه بلوک را برای سیستم فایل تنظیم می‌کند. این گزینه تنها برای سوار کردن‌های نوع 'fuseblk' معتبر است. مقدار پیش‌فرض 512 است.

در بیشتر موارد، این گزینه نباید توسط مالک سیستم فایل مشخص شود، بلکه باید به‌صورت داخلی توسط خود سیستم فایل تنظیم گردد.

با این گزینه می‌توان حداکثر اندازه عملیات خواندن را تنظیم کرد. مقدار پیش‌فرض نامحدود است، اما معمولاً هسته محدودیت خود را علاوه‌بر این اعمال می‌کند. مقدار صفر معادل بدون محدودیت است.

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

این گزینه سوار کردن به نفع مذاکره مستقیم روی توصیف‌گر فایل دستگاه (همان‌طور که برای مثال برای حداکثر اندازه عملیات نوشتن انجام می‌شود) منسوخ شده است. در حال حاضر، سیستم‌های فایل مبتنی بر libfuse که مایل به محدود کردن اندازه خواندن هستند، باید از این گزینه سوار کردن استفاده کرده و همان مقدار را مجدداً در گرداننده init() تنظیم نمایند.

توصیف‌گر فایلی که برای ارتباط بین سیستم فایل فضای کاربری و هسته استفاده می‌شود. این توصیف‌گر فایل باید با باز کردن دستگاه FUSE‏ (/dev/fuse) به‌دست آمده باشد.

این گزینه نباید توسط مالک سیستم فایل مشخص شود. این گزینه توسط libfuse تنظیم می‌شود (یا در صورت عدم استفاده از libfuse، باید توسط خود سیستم فایل تنظیم گردد).

group_id=N شناسه عددی uid/gid مالک سوار کردن را مشخص می‌کند.

این گزینه نباید توسط مالک سیستم فایل مشخص شود. این گزینه توسط libfuse تنظیم می‌شود (یا در صورت عدم استفاده از libfuse، باید توسط خود سیستم فایل تنظیم گردد).

منبع سیستم فایل را تنظیم می‌کند (فیلد اول در /etc/mtab). مقدار پیش‌فرض، نام فرایند سیستم فایل است.
نوع سیستم فایل را تنظیم می‌کند (فیلد سوم در /etc/mtab). مقدار پیش‌فرض، نام فرایند سیستم فایل است. اگر هسته از آن پشتیبانی کند، /etc/mtab و /proc/mounts نوع سیستم فایل را به‌صورت fuse.TYPE نمایش خواهند داد.

اگر هسته از زیرنوع‌ها (subtypes) پشتیبانی نکند، فیلد منبع TYPE#NAME خواهد بود، یا اگر گزینه fsname مشخص نشده باشد، فقط TYPE درج می‌شود.

گزینه‌های زیر در واقع به هسته ارسال نمی‌شوند، بلکه توسط libfuse تفسیر می‌گردند. این گزینه‌ها را می‌توان برای تمام سیستم‌های فایلی که از libfuse استفاده می‌کنند تعیین کرد:

این گزینه شبیه به allow_other است، اما دسترسی به فایل فقط به مالک سیستم فایل و کاربر ریشه محدود می‌شود. این گزینه و allow_other مانعة‌الجمع هستند.
این گزینه آزادسازی خودکار نقطه سوار کردن را در صورت پایان یافتن فرایند سیستم فایل به هر دلیلی فعال می‌کند. به‌طور معمول سیستم فایل مسئول آزادسازی نقطه سوار کردن است؛ بدین معنی که اگر سیستم فایل بدون جدا کردن (unmount) قبلی خاتمه یابد، نقطه سوار کردن غیرقابل دسترس خواهد شد.

این گزینه خطرناک است و تنها باید پس از بررسی دقیق خطرات استفاده شود.

جدا کردن خودکار سیستم فایل بدین معناست که در صورت خرابی (crash) سیستم فایل، ممکن است نقطه سوار کردن ناگهان خالی به نظر برسد، که می‌تواند پیامدهای ناخواسته‌ای داشته باشد. به‌عنوان مثال، یک برنامه در حال اجرای پشتیبان‌گیری و آینه‌سازی ممکن است نتیجه بگیرد که تمام داده‌های سیستم فایل حذف شده‌اند و شروع به اعمال این حذف در سیستم پشتیبان / راه دور کند. اگر در عوض نقطه سوار کردن غیرقابل دسترس شود (رفتار پیش‌فرض)، بیشتر برنامه‌ها رفتار درستی نشان می‌دهند (خطا گزارش می‌کنند).

این قابلیت همچنین ممکن است به دلیل شرایط رقابتی (race conditions) به‌طور تصادفی سیستم فایل اشتباهی را پیاده کند. به‌عنوان مثال، اگر سیستم فایل دیگری زیر همان نقطه سوار کردن متصل شده باشد، یا اگر سیستم فایل جدیدی پس از خرابی فرایند FUSE متصل شود، ممکن است به‌طور تصادفی جدا گردد.

در حال حاضر، این گزینه ایجاب می‌کند که سیستم فایل با nodev و nosuid نیز سوار شود (حتی زمانی که توسط کاربر ریشه سوار شده باشد). این محدودیت ممکن است در آینده برداشته شود.

گزینه‌های زیر در واقع به هسته ارسال نمی‌شوند، بلکه توسط libfuse تفسیر می‌گردند. این گزینه‌ها تنها برای سیستم‌های فایلی قابل تعیین هستند که از API سطح‌بالای libfuse استفاده می‌کنند:

این گزینه تخلیه حافظه موقت (کش) محتویات فایل را در هر open(2) غیرفعال می‌کند. این گزینه فقط باید روی سیستم‌های فایلی فعال شود که داده‌های فایل در آن‌ها هرگز به‌صورت خارجی (نه از طریق سیستم فایل سوارشده FUSE) تغییر نمی‌کنند. بنابراین برای سیستم‌های فایل شبکه‌ای و سایر سیستم‌های فایل «واسط» مناسب نیست.

نکته: اگر این گزینه (و همچنین direct_io) مشخص نشده باشد، داده‌ها پس از فراخوانی open(2) همچنان کش می‌شوند، بنابراین یک فراخوانی سیستمی read(2) همیشه یک عملیات خواندن جدید را آغاز نخواهد کرد.

این گزینه جایگزینی برای kernel_cache است. به‌جای نگه‌داشتن بی‌قیدوشرط داده‌های کش‌شده، اگر زمان تغییر یا اندازه فایل از زمان آخرین باز شدن آن تغییر کرده باشد، داده‌های کش‌شده هنگام open(2) باطل می‌شوند.
بیت‌های دسترسی تعیین‌شده توسط سیستم فایل در st_mode را لغو و بازنویسی می‌کند. بیت‌های دسترسی حاصل، بیت‌هایی هستند که در مقدار ماسک (که در نمایش هشت‌هشتی/اکتال ارائه شده) وجود ندارند. از fmask و dmask (به‌ترتیب) می‌توان برای کنترل جداگانه بیت‌های دسترسی فایل‌ها و پوشه‌ها استفاده کرد. مقدار umask توسط گزینه‌های منفرد fmask و dmask بازنویسی می‌شود.
فیلد st_uid تعیین‌شده توسط سیستم فایل را بازنویسی می‌کند (N عددی است).
فیلد st_gid تعیین‌شده توسط سیستم فایل را بازنویسی می‌کند (N عددی است).
مهلت زمانی به ثانیه که در طی آن جستجوهای نام در کش ذخیره می‌شوند. مقدار پیش‌فرض 1.0 ثانیه است. برای تمام گزینه‌های مهلت زمانی، امکان ارائه کسر ثانیه نیز وجود دارد (مانند entry_timeout=2.8).
مهلت زمانی به ثانیه که در طول آن یک جستجوی منفی (یافت‌نشده) در کش نگهداری می‌شود. این بدان معناست که اگر فایلی وجود نداشت (جستجو منجر به بازگشت ENOENT شد)، جستجو تنها پس از پایان این مهلت دوباره انجام می‌شود و تا آن زمان فرض می‌شود فایل/پوشه وجود ندارد. مقدار پیش‌فرض 0.0 ثانیه است، به این معنی که کش کردن جستجوهای منفی غیرفعال است.
مهلت زمانی به ثانیه که طی آن ویژگی‌های فایل/پوشه در کش ذخیره می‌شوند. مقدار پیش‌فرض 1.0 ثانیه است.
مهلت زمانی به ثانیه که طی آن ویژگی‌های فایل به منظور بررسی اینکه آیا auto_cache باید داده‌های فایل را هنگام باز کردن پاکسازی کند در کش نگهداری می‌شوند. مقدار پیش‌فرض برابر با مقدار attr_timeout است.
به‌طور معمول، libfuse اینودها را فقط تا زمانی به مسیرها اختصاص می‌دهد که هسته از آن‌ها آگاه باشد. با این گزینه، اینودها در عوض حداقل برای T ثانیه (یا در مورد noforget، به اندازه تمام طول عمر سیستم فایل) اختصاص داده می‌شوند. این امر به حافظه بیشتری نیاز خواهد داشت، اما ممکن است هنگام استفاده از برنامه‌هایی که از شماره اینودها استفاده می‌کنند ضروری باشد.
ماژول‌ها را به پشته سیستم فایل اضافه می‌کند. ماژول‌ها به همان ترتیبی که مشخص شده‌اند در پشته قرار می‌گیرند (push می‌شوند)، به‌طوری که سیستم فایل اصلی در پایین‌ترین سطح پشته قرار می‌گیرد.

این گزینه‌ها توسط mount.fuse3 تفسیر می‌شوند و بنابراین تنها هنگام سوار کردن یک سیستم فایل از طریق mount.fuse3 در دسترس هستند (مانند سوار کردن از طریق دستور عمومی mount(1) یا /etc/fstab). گزینه‌های پشتیبانی‌شده عبارتند از:

قبل از اجرای فرایند سیستم فایل FUSE، به کاربر USER و گروه اصلی آن تغییر هویت می‌دهد. برای اینکه این گزینه کار کند، mount.fuse3 باید توسط کاربر ریشه یا با اختیارات CAP_SETUID و CAP_SETGID اجرا شود.
آماده‌سازی توصیف‌گر فایل FUSE و سوار کردن سیستم فایل را پیش از اجرای فرایند سیستم فایل FUSE انجام می‌دهد. mount.fuse3 برای انجام این کار به مجوزهای ممتاز نیاز دارد، یعنی باید به عنوان ریشه یا حداقل با CAP_SYS_ADMIN و CAP_SETPCAP اجرا شود. این گزینه فرایند سیستم فایل را کاملاً بدون امتیاز (عادی) اجرا می‌کند؛ یعنی پرچم‌های capabilities(7) و prctl(2) به‌گونه‌ای تنظیم می‌شوند که امتیازات نتوانند مجدداً کسب شوند (مثلاً از طریق باینری‌های setuid یا fscaps). این کار خطر ناشی از به خطر افتادن فرایند سیستم فایل FUSE توسط داده‌های مخرب سیستم فایل را کاهش می‌دهد.

ماژول‌ها پشتیبانی از پشته‌سازی سیستم فایل را برای API سطح‌بالا فراهم می‌کنند. ماژول‌های سیستم فایل می‌توانند درون libfuse گنجانده شده یا از یک شیء اشتراکی (shared object) بارگیری شوند.

تبدیل مجموعه نویسه نام فایل را انجام می‌دهد. گزینه‌ها عبارتند از:

مجموعه نویسه مبدأ برای تبدیل (برای فهرستی از مقادیر ممکن، iconv -l را ببینید). مقدار پیش‌فرض UTF-8 است.
مجموعه نویسه مقصد برای تبدیل. مقدار پیش‌فرض بر اساس محلی‌سازی (locale) جاری تعیین می‌شود.

یک دایرکتوری مشخص را به ابتدای هر مسیر اضافه می‌کند. گزینه‌ها عبارتند از:

دایرکتوری‌ای که به تمام مسیرها پیشوند می‌شود. این گزینه اجباری است.
پیوندهای نمادین مطلق را به نسبی تبدیل می‌کند.
پیوندهای نمادین مطلق را به نسبی تبدیل نمی‌کند. این حالت پیش‌فرض است.

برنامه fusermount3 با مجوز set-user-gid به گروه fuse نصب شده است. این کار برای آن انجام شده تا به کاربران عضو گروه fuse اجازه دهد پیاده‌سازی‌های سیستم فایل اختصاصی خود را سوار کنند. با این حال، برای جلوگیری از رفتارهای مخرب توسط کاربران نابکار، باید محدودیت‌هایی وجود داشته باشد. در حال حاضر این محدودیت‌ها عبارتند از:

1.
کاربر تنها می‌تواند روی نقطه اتصالی عمل سوار کردن را انجام دهد که مجوز نوشتن روی آن را داشته باشد.
2.
نقطه اتصال یک دایرکتوری دارای بیت چسبان (sticky bit) که متعلق به کاربر نیست نباشد (همان‌طور که معمولاً پوشه /tmp این‌گونه است).
3.
هیچ کاربر دیگری (شامل کاربر ریشه) نتواند به محتویات سیستم فایل سوارشده دسترسی پیدا کند.

سیستم‌های فایل FUSE با استفاده از دستور fusermount3(1) جدا می‌شوند (fusermount3 -u mountpoint).

پروژه FUSE در حال حاضر توسط Nikolaus Rath <Nikolaus@rath.org> نگهداری می‌شود.

نویسنده اصلی FUSE، Miklos Szeredi <mszeredi@inf.bme.hu> است.

این صفحه راهنما در ابتدا توسط Bastien Roucaries <roucaries.bastien+debian@gmail.com> برای توزیع دبیان گنو/لینوکس (Debian GNU/Linux) نوشته شده است.

fusermount3(1) fusermount(1) mount(8) fuse(4)