mount.cifs, mount.smb3(8) System Manager's Manual mount.cifs, mount.smb3(8)

mount.cifs - سوار کردن سیستم‌های فایل شبکه بر پایه cifs یا smb3

mount.cifs {service} {mount-point} [-o options]

این ابزار بخشی از مجموعه cifs-utils است.

دستور mount.cifs یک سیستم فایل CIFS یا SMB3 را از طریق لینوکس سوار (mount) می‌کند. معمولاً با استفاده از گزینه "-t cifs"; به طور غیرمستقیم توسط دستور mount(8) فراخوانی می‌شود. این دستور فقط در لینوکس کار می‌کند و هسته باید از سیستم فایل cifs پشتیبانی کند. پروتکل SMB3 جانشین پروتکل CIFS (SMB) است و توسط اکثر سرورهای ویندوز، Azure (فضای ابری)، مک‌ها و بسیاری از سرورهای تجاری دیگر و تجهیزات ذخیره‌سازی متصل به شبکه (NAS) و همچنین سرور متن‌باز پرکاربرد Samba پشتیبانی می‌شود.

دستور mount.smb3 تنها سیستم فایل SMB3 را سوار می‌کند. معمولاً با استفاده از گزینه "-t smb3"; به طور غیرمستقیم توسط دستور mount(8) فراخوانی می‌شود. نوع سیستم فایل smb3 در هسته نسخه 4.18 و بالاتر اضافه شده است. این ابزار عملکردی مشابه mount.cifs دارد، به جز اینکه نوع سیستم فایل را smb3 ارسال می‌کند.

ابزار mount.cifs نام UNC (منبع به اشتراک‌گذاشته شده شبکه) مشخص‌شده به عنوان service را (با نحو //server/share که در آن "server" نام سرور یا آدرس IP و "share" نام اشتراک است) به دایرکتوری محلی mount-point متصل می‌کند.

گزینه‌های mount.cifs به صورت فهرستی از جفت‌های key=value که با کاما از هم جدا شده‌اند مشخص می‌شوند. ارسال گزینه‌هایی غیر از موارد فهرست‌شده در اینجا نیز امکان‌پذیر است، به شرطی که ماژول هسته سیستم فایل cifs (cifs.ko) از آن‌ها پشتیبانی کند. گزینه‌های ناشناخته سوار کردن cifs که به کد هسته cifs vfs ارسال شوند در گزارش‌های ثبت هسته (kernel log) ثبت خواهند شد.

دستور mount.cifs باعث می‌شود که cifs vfs ریسه‌ای به نام cifsd اجرا کند. پس از سوار شدن، این ریسه تا زمان پیاده‌سازی منبع سوار شده (معمولاً از طریق ابزار umount) در حال اجرا باقی می‌ماند.

دستور mount.cifs -V نسخه ابزار کمکی cifs mount را نمایش می‌دهد.

دستور modinfo cifs نسخه ماژول cifs را نمایش می‌دهد.

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

نسخه‌های پیشین mount.cifs امکان تعیین نام کاربری به صورت user%password یا workgroup/user یا workgroup/user%password را نیز می‌دادند تا گذرواژه و workgroup به عنوان بخشی از نام کاربری مشخص شوند. پشتیبانی از این قالب‌های جایگزین نام کاربری منسوخ شده است و دیگر نباید استفاده شوند. کاربران باید از گزینه‌های تفکیک‌شده password= و domain= برای تعیین این مقادیر استفاده کنند. اگرچه برخی نسخه‌های ماژول هسته cifs گزینه user= را به عنوان مخفف این گزینه می‌پذیرند، استفاده از آن ممکن است برنامه استاندارد mount را به این اشتباه بیندازد که این یک سوار کردن غیر ریشه (non-superuser) است. بنابراین توصیه می‌شود از نام کامل گزینه username= استفاده شود.

گذرواژه CIFS را مشخص می‌کند. اگر این گزینه ارائه نشود، متغیر محیطی PASSWD استفاده می‌شود. اگر گذرواژه به طور مستقیم یا غیرمستقیم از طریق آرگومانی به mount مشخص نشود، mount.cifs درخواست گذرواژه خواهد کرد، مگر اینکه گزینه guest مشخص شده باشد.

توجه داشته باشید که گذرواژه‌ای که حاوی کاراکتر جداکننده باشد (یعنی کاما ',') در خط فرمان به درستی تجزیه نمی‌شود. با این حال، همان گذرواژه اگر در متغیر محیطی PASSWD یا از طریق فایل اطلاعات هویتی (credentials) تعریف شود یا در اعلان گذرواژه وارد شود، به درستی خوانده خواهد شد.

یک گذرواژه جایگزین برای کمک به چرخش گذرواژه مشخص می‌کند. اگر این گزینه ارائه نشود، متغیر محیطی PASSWD2 استفاده می‌شود. اگر password2 به طور مستقیم یا غیرمستقیم از طریق آرگومانی به mount مشخص نشود، mount.cifs برای password2 درخواستی نخواهد کرد.

توجه داشته باشید که اگر password2 حاوی کاراکتر جداکننده باشد (یعنی کاما ',') در خط فرمان به درستی تجزیه نمی‌شود. با این حال، همان password2 اگر در متغیر محیطی PASSWD2 یا از طریق فایل اطلاعات هویتی (در ادامه را ببینید) تعریف شود، به درستی خوانده خواهد شد.

فایلی را مشخص می‌کند که حاوی نام کاربری و/یا گذرواژه و اختیاری گذرواژه جایگزین و/یا نام workgroup است. قالب فایل به صورت زیر است:
username=value
password=value
password2=value
domain=value

این روش به قرار دادن گذرواژه‌ها به صورت متن خام در یک فایل مشترک مانند /etc/fstab ترجیح داده می‌شود. حتماً از هر فایل اطلاعات هویتی به درستی محافظت کنید.

شناسه کاربری (uid) مالک تمامی فایل‌ها یا دایرکتوری‌های سیستم فایل سوار شده را در صورتی که سرور اطلاعات مالکیت را ارائه ندهد، تنظیم می‌کند. می‌توان آن را به صورت نام کاربری یا یک uid عددی مشخص کرد. در صورت عدم تعیین، مقدار پیش‌فرض uid 0 است. ابزار کمکی mount.cifs برای پشتیبانی از تعیین uid به شکل غیر عددی باید نسخه 1.10 یا بالاتر باشد. برای اطلاعات بیشتر بخش مالکیت و دسترسی‌های فایل و دایرکتوری را در ادامه ببینید.
به کلاینت دستور می‌دهد هرگونه uid ارائه‌شده توسط سرور برای فایل‌ها و دایرکتوری‌ها را نادیده بگیرد و همیشه مالک را برابر با مقدار گزینه uid= قرار دهد. برای اطلاعات بیشتر بخش مالکیت و دسترسی‌های فایل و دایرکتوری را در ادامه ببینید.
شناسه کاربری (uid) مالک حافظه موقت اطلاعات هویتی (credentials cache) را تعیین می‌کند. این گزینه عمدتاً با sec=krb5 کاربرد دارد. مقدار پیش‌فرض، uid واقعی فرایندی است که سوار کردن را انجام می‌دهد. تنظیم این پارامتر باعث می‌شود فراخوانی upcall به دنبال حافظه موقت اعتباری متعلق به آن کاربر بگردد.
شناسه گروهی (gid) مالک تمامی فایل‌ها یا دایرکتوری‌های سیستم فایل سوار شده را در صورتی که سرور اطلاعات مالکیت را ارائه ندهد، تنظیم می‌کند. می‌توان آن را به صورت نام گروه یا یک gid عددی مشخص کرد. در صورت عدم تعیین، مقدار پیش‌فرض gid 0 است. ابزار کمکی mount.cifs برای پشتیبانی از تعیین gid به شکل غیر عددی باید نسخه 1.10 یا بالاتر باشد. برای اطلاعات بیشتر بخش مالکیت و دسترسی‌های فایل و دایرکتوری را در ادامه ببینید.
به کلاینت دستور می‌دهد هرگونه gid ارائه‌شده توسط سرور برای فایل‌ها و دایرکتوری‌ها را نادیده بگیرد و همیشه مالک گروهی را برابر با مقدار گزینه gid= قرار دهد. برای اطلاعات بیشتر بخش مالکیت و دسترسی‌های فایل و دایرکتوری را در ادامه ببینید.
شناسه‌های uid/gid را از SID ویژه استخراج می‌کند به جای اینکه آن را نگاشت کند. برای اطلاعات بیشتر بخش مالکیت و دسترسی‌های فایل و دایرکتوری را در ادامه ببینید.
شماره پورتی را تعیین می‌کند که کلاینت سعی خواهد کرد روی آن با سرور CIFS ارتباط برقرار کند. اگر این مقدار مشخص شود، به دنبال یک اتصال موجود با این پورت می‌گردد و در صورت وجود، از آن استفاده می‌کند. اگر اتصالی وجود نداشته باشد، سعی می‌کند یک اتصال جدید روی آن پورت ایجاد کند. در صورت شکست اتصال، خطا برمی‌گرداند. اگر این مقدار مشخص نشود، به دنبال اتصال موجود روی پورت 445 یا 139 می‌گردد. اگر چنین اتصالی وجود نداشته باشد، ابتدا سعی می‌کند روی پورت 445 متصل شود و در صورت عدم موفقیت، روی پورت 139 تلاش می‌کند. در صورت شکست هر دو، خطا برمی‌گرداند.
هنگام سوار کردن روی سرورها از طریق پورت 139، نام مبدأ RFC1001 را مشخص می‌کند که برای نشان دادن ماشین netbios کلاینت در طول مقداردهی اولیه نشست netbios استفاده می‌شود.
مشابه netbiosname است، به جز اینکه نام netbios سرور را به جای کلاینت مشخص می‌کند. اگرچه برای سوار کردن روی سرورهای جدیدتر به ندرت مورد نیاز است، اما این گزینه برای اتصال به برخی سرورهای قدیمی‌تر (مانند OS/2 یا Windows 98 و Windows ME) لازم است، زیرا هنگام اتصال روی پورت 139، بر خلاف اکثر سرورهای جدید، از نام پیش‌فرض سرور پشتیبانی نمی‌کنند. نام سرور می‌تواند تا 15 کاراکتر باشد و معمولاً با حروف بزرگ نوشته می‌شود.
اگر سرور از افزونه‌های یونیکس CIFS پشتیبانی نکند، حالت پیش‌فرض فایل را لغو می‌کند.
اگر سرور از افزونه‌های یونیکس CIFS پشتیبانی نکند، حالت پیش‌فرض دایرکتوری‌ها را لغو می‌کند.
آدرس IP مقصد را مشخص می‌کند. اگر بخش نام سرور در نام UNC درخواستی قابل تفکیک و حل باشد، این گزینه به طور خودکار تنظیم می‌شود، بنابراین به ندرت نیاز به تعیین توسط کاربر دارد.
دامنه (workgroup) کاربر را مشخص می‌کند. اگر دامنه‌ای داده نشود، دامنه خالی استفاده خواهد شد. از domainauto برای حدس خودکار دامنه سروری که به آن متصل می‌شوید استفاده کنید.
هنگام استفاده از احراز هویت NTLM و عدم ارائه دامنه از طریق domain، دامنه را از چالش NTLM سرور حدس می‌زند. این رفتار در هسته‌های قدیمی‌تر از 2.6.36 حالت پیش‌فرض بود.
برای گذرواژه درخواستی مطرح نمی‌کند.
مجموعه نویسه (Charset) مورد استفاده برای تبدیل نام‌های محلی مسیر به یونیکد و برعکس. در صورتی که سرور از آن پشتیبانی کند، یونیکد به طور پیش‌فرض برای نام‌های مسیر شبکه استفاده می‌شود. اگر iocharset مشخص نشود، nls_default تعیین‌شده در زمان ساخت هسته کلاینت محلی استفاده خواهد شد. اگر سرور از یونیکد پشتیبانی نکند، این پارامتر بی‌استفاده می‌ماند.
سوار کردن به صورت فقط‌خواندنی.
سوار کردن به صورت خواندن و نوشتن.
اگر افزونه‌های یونیکس CIFS با سرور مورد توافق قرار گیرد، کلاینت تلاش می‌کند شناسه مؤثر uid و gid فرایند محلی را روی فایل‌ها، دایرکتوری‌ها و دستگاه‌های تازه ایجادشده تنظیم کند (create, mkdir, mknod). اگر افزونه‌های یونیکس CIFS مورد توافق قرار نگیرد، برای فایل‌ها و دایرکتوری‌های تازه ایجادشده، به جای استفاده از uid و gid پیش‌فرضی که در زمان سوار کردن مشخص شده، uid و gid فایل جدید را به صورت محلی ذخیره موقت می‌کند، به این معنی که با بارگذاری مجدد اینود (یا زمانی که کاربر اشتراک را مجدداً سوار کند)، uid فایل می‌تواند تغییر کند.
کلاینت تلاش نخواهد کرد uid و gid را روی فایل‌ها، دایرکتوری‌ها و دستگاه‌های تازه ایجادشده تنظیم کند (create, mkdir, mknod) که منجر می‌شود سرور uid و gid را روی مقادیر پیش‌فرض قرار دهد (معمولاً uid سروری کاربری که اشتراک را سوار کرده است). واگذاری تعیین uid و gid به سرور (به جای کلاینت) حالت پیش‌فرض است. اگر افزونه‌های یونیکس CIFS مورد توافق قرار نگیرد، uid و gid فایل‌های جدید به صورت uid (و gid) سوارکننده یا پارامتر uid (و gid) مشخص‌شده در زمان سوار کردن نمایش داده خواهد شد.
کلاینت بررسی دسترسی‌ها را انجام می‌دهد (بررسی vfs_permission برای uid و gid فایل در برابر حالت و عملیات درخواستی). توجه داشته باشید که این علاوه بر بررسی معمول ACL روی ماشین مقصد است که توسط نرم‌افزار سرور انجام می‌شود. بررسی دسترسی کلاینت به طور پیش‌فرض فعال است.
کلاینت بررسی دسترسی‌ها را انجام نمی‌دهد. این می‌تواند فایل‌های روی این نقطه سوار کردن را در معرض دسترسی سایر کاربران در سیستم کلاینت محلی قرار دهد. معمولاً تنها زمانی نیاز است که سرور از افزونه‌های یونیکس CIFS پشتیبانی کند، اما شناسه‌های UID/GID در سیستم کلاینت و سرور به اندازه کافی مطابقت نداشته باشند تا اجازه دسترسی توسط کاربری که سوار کردن را انجام داده صادر شود. توجه داشته باشید که این گزینه بر بررسی معمول ACL روی ماشین مقصد که توسط نرم‌افزار سرور انجام می‌شود (بررسی ACL سرور در برابر نام کاربری ارائه‌شده در زمان سوار کردن) تأثیری نمی‌گذارد.
به سرور دستور می‌دهد مالکیت و دسترسی‌ها را در حافظه نگهداری کند که نمی‌توانند روی سرور ذخیره شوند. این اطلاعات می‌توانند در هر زمانی (هرگاه اینود از حافظه موقت پاک شود) ناپدید شوند، بنابراین اگرچه ممکن است به اجرای برخی برنامه‌ها کمک کند، اما رفتار آن تا حدی غیرقابل اطمینان است. برای اطلاعات بیشتر بخش مالکیت و دسترسی‌های فایل و دایرکتوری را در ادامه ببینید.
حالت حافظه موقت (Cache mode). برای جزئیات بخش سازگاری حافظه موقت را در ادامه ببینید. مقادیر مجاز عبارتند از:
  • none - داده‌های فایل اصلاً ذخیره موقت نشوند
  • strict - پروتکل CIFS/SMB2 دقیقاً رعایت شود
  • loose - قواعد سهل‌گیرانه ذخیره‌سازی موقت مجاز باشد

مقدار پیش‌فرض در هسته‌های قدیمی‌تر از 3.7 برابر با loose بود. از هسته 3.7 مقدار پیش‌فرض strict است.

از سرور درخواست نکن هنگام fsync() عمل تخلیه (flush) را انجام دهد. برخی سرورها به طور پیش‌فرض نوشتن‌های بدون بافر انجام می‌دهند که در این حالت عمل تخلیه زائد است. در بارهای کاری که کلاینت تعداد زیادی ترکیب نوشتن کوچک + fsync انجام می‌دهد و تأخیر شبکه بسیار بیشتر از تأخیر سرور است، این گزینه ۲ برابر بهبود عملکرد به همراه دارد. این گزینه همچنین در سناریوهایی که عملکرد بر سازگاری ارجحیت دارد، انتخاب خوبی است.
(پیش‌فرض) در SMB2 و بالاتر، کلاینت اغلب مجبور است ریشه اشتراک (مسیر خالی) را در نقاط مختلف در طول سوار کردن، اعتبارسنجی مجدد مسیر و فراخوانی سیستمی statfs(2) باز کند. این گزینه ترافیک رفت و برگشت زائد (باز و بسته کردن‌ها) را به سادگی با نگه‌داشتن دستگیره (handle) دایرکتوری ریشه پس از یک بار باز شدن کاهش می‌دهد.
ذخیره‌سازی موقت دستگیره دایرکتوری ریشه اشتراک را غیرفعال می‌کند.
حداکثر تعداد دایرکتوری‌های ذخیره‌شده در حافظه موقت به ازای هر اشتراک. دایرکتوری‌ها در صورتی به صورت محلی ذخیره موقت می‌شوند که اجاره‌ای (lease) توسط سرور اعطا شده باشد، که با کاهش ترافیک شبکه، عملکرد را بهبود می‌بخشد.

به طور پیش‌فرض، max_cached_dirs روی 16 تنظیم شده است و می‌تواند مقادیری بین 0 و حداکثر مقدار 2^32 - 1 داشته باشد.

مدت زمانی (به میلی‌ثانیه) که سرور باید دستگیره را پس از یک جابه‌جایی در هنگام بروز خطا (failover) در انتظار اتصال مجدد کلاینت رزرو نگه دارد. هنگام سوار کردن با گزینه resilienthandles یا persistenthandles، یا زمانی که استفاده از آن‌ها توسط سرور درخواست شده باشد (اشتراک‌های دسترسی مداوم)، این پارامتر مقدار پیش‌فرض وقفه دستگیره سرور (که برای اکثر سرورها 120 ثانیه است) را لغو می‌کند.
شناسه pid فرایندی را که فایلی را باز کرده است به هر عملیات خواندن یا نوشتن روی آن فایل فوروارد می‌کند. این از شکست برنامه‌هایی مانند wine(1) در خواندن و نوشتن در صورت استفاده از سبک قفل اجباری brlock جلوگیری می‌کند.
شش کاراکتر از هفت کاراکتر رزرو شده را (نه بک‌اسلش، بلکه شامل کاراکترهای دونقطه، علامت سوال، خط عمودی pipe، ستاره، بزرگتر و کوچکتر) به محدوده بازنگاشت (بالای 0xF000) تبدیل می‌کند، که همچنین به کلاینت CIFS اجازه می‌دهد فایل‌های ایجادشده با این کاراکترها را توسط Services for Unix ویندوز شناسایی کند. این همچنین هنگام سوار کردن به اکثر نسخه‌های Samba مفید است (که ایجاد و باز کردن فایل‌هایی را که نامشان حاوی هر یک از این هفت کاراکتر باشد ممنوع می‌کند). اگر سرور از یونیکد روی شبکه پشتیبانی نکند، این گزینه هیچ اثری ندارد. لطفاً توجه داشته باشید که فایل‌های ایجادشده با گزینه سوار کردن mapchars ممکن است در صورت سوار شدن اشتراک بدون آن گزینه قابل دسترسی نباشند.
(پیش‌فرض) هیچ‌یک از این هفت کاراکتر را تبدیل نمی‌کند.
کاراکترهای رزرو شده را مشابه mapchars تبدیل می‌کند، اما از نگاشت متعلق به "Services For Mac" مایکروسافت استفاده می‌کند. این گزینه علاوه بر این، علامت نقل قول دوگانه و یک نقطه یا فاصله انتهایی را نیز بازنگاشت می‌کند.
در حال حاضر پیاده‌سازی نشده است.
(پیش‌فرض) در حال حاضر پیاده‌سازی نشده است.
برنامه‌ای که به فایلی روی سیستم فایل سوار شده cifs دسترسی دارد، در صورت خرابی و توقف سرور متوقف (hang) خواهد شد.
(پیش‌فرض) برنامه‌ای که به فایلی روی سیستم فایل سوار شده cifs دسترسی دارد، در صورت خرابی و توقف سرور متوقف نمی‌شود و خطاها را به برنامه کاربر بازمی‌گرداند.
عملیات POSIX ACL را حتی اگر سرور از آن‌ها پشتیبانی کند، مجاز نمی‌داند.

کلاینت CIFS می‌تواند POSIX ACLها را روی سرورهای Samba نسخه 3.0.10 و بالاتر دریافت و تنظیم کند (getfacl, setfacl). تنظیم POSIX ACLها نیازمند فعال بودن هر دو گزینه CONFIG_CIFS_XATTR و سپس CONFIG_CIFS_POSIX در گزینه‌های پیکربندی CIFS در زمان ساخت ماژول cifs است. پشتیبانی از POSIX ACL می‌تواند برای هر سوار کردن به طور جداگانه با مشخص کردن noacl غیرفعال شود.

این گزینه برای نگاشت CIFS/NTFS ACL به/از بیت‌های دسترسی لینوکس، نگاشت SIDها به/از UIDها و GIDها، و دریافت و تنظیم توصیف‌کننده‌های امنیتی (Security Descriptors) استفاده می‌شود.

برای اطلاعات بیشتر بخش مربوط به CIFS/NTFS ACL، نگاشت SID/UID/GID، توصیف‌کننده‌های امنیتی را ببینید.

دسترسی به فایل توسط این کاربر باید با تنظیم پرچم قصد پشتیبان‌گیری (backup intent) انجام شود. باید نام یا شناسه به عنوان آرگومان ارائه شود؛ مقادیر پیش‌فرضی وجود ندارد.

برای جزئیات بیشتر بخش دسترسی به فایل‌ها با هدف پشتیبان‌گیری را ببینید.

دسترسی به فایل توسط کاربرانی که عضو این گروه هستند باید با تنظیم پرچم قصد پشتیبان‌گیری انجام شود. باید نام یا شناسه به عنوان آرگومان ارائه شود؛ مقادیر پیش‌فرضی وجود ندارد.

برای جزئیات بیشتر بخش دسترسی به فایل‌ها با هدف پشتیبان‌گیری را ببینید.

درخواست تطبیق نام مسیر بدون حساسیت به حروف کوچک و بزرگ (حساسیت به حروف حالت پیش‌فرض است، اگر سرور از آن پشتیبانی کند).
مترادف nocase.
حالت امنیتی. مقادیر مجاز عبارتند از:
  • none - تلاش برای اتصال به عنوان کاربر تهی (بدون نام)
  • krb5 - استفاده از احراز هویت کربروس نسخه 5
  • krb5i - استفاده از احراز هویت کربروس و فعال‌سازی اجباری امضای بسته‌ها
  • ntlm - استفاده از درهم‌سازی گذرواژه NTLM
  • ntlmi - استفاده از درهم‌سازی گذرواژه NTLM و اجبار امضای بسته‌ها
  • ntlmv2 - استفاده از درهم‌سازی گذرواژه NTLMv2
  • ntlmv2i - استفاده از درهم‌سازی گذرواژه NTLMv2 و اجبار امضای بسته‌ها
  • ntlmssp - استفاده از درهم‌سازی گذرواژه NTLMv2 کپسوله‌شده در پیام خام NTLMSSP
  • ntlmsspi - استفاده از درهم‌سازی گذرواژه NTLMv2 کپسوله‌شده در پیام خام NTLMSSP و اجبار امضای بسته‌ها

مقدار پیش‌فرض در نسخه‌های اصلی هسته قبل از نسخه 3.8 برابر با sec=ntlm بود. در نسخه 3.8، مقدار پیش‌فرض به sec=ntlmssp تغییر یافت.

اگر سرور در طول مذاکره پروتکل نیاز به امضا داشته باشد، ممکن است به طور خودکار فعال شود. همچنین در صورتی که در /proc/fs/cifs/SecurityFlags فعال شده باشد، امضای بسته‌ها ممکن است به صورت خودکار فعال شود.

درخواست رمزنگاری در لایه SMB. الگوریتم رمزنگاری استفاده‌شده AES-128-CCM است. نیازمند SMB3 یا بالاتر است (گزینه vers را ببینید).
حداقل اندازه (به بایت) پاسخ خواندن رمزنگاری‌شده که در آن کلاینت رمزگشایی را به یک ریسه کارگر مجزا واگذار می‌کند. این زمانی کار می‌کند که تعداد درخواست‌های در جریان بیشتر از 1 باشد.

رمزگشایی پاسخ‌های خواندن رمزنگاری‌شده بزرگ می‌تواند از نظر محاسباتی سنگین باشد و زمانی که چندین خواندن در جریان هستند، واگذاری کار می‌تواند عملکرد را بهبود بخشد.

مقدار پیش‌فرض esize=0 است، به این معنی که تمام پاسخ‌های خواندن رمزنگاری‌شده بدون واگذاری رمزگشایی می‌شوند و می‌توان آن را تا حداکثر اندازه بافر تنظیم کرد که می‌تواند از 8192 تا 130048 بایت متغیر باشد، و پیش‌فرض آن 16384 بایت است.

اتصال مستقیم به سرور با استفاده از SMB Direct از طریق یک آداپتور RDMA. نیازمند SMB3 یا بالاتر است (گزینه vers را ببینید).
فعال‌سازی دستگیره‌های ارتجاعی (resilient handles). در صورت پشتیبانی سرور، فایل‌های بازشده را پس از اتصال‌های مجدد حفظ می‌کند. نیازمند SMB2.1 است (گزینه vers را ببینید).
(پیش‌فرض) غیرفعال‌سازی دستگیره‌های ارتجاعی.
فعال‌سازی دستگیره‌های پایدار (persistent handles). در صورت پشتیبانی سرور، فایل‌های بازشده را پس از اتصال‌های مجدد حفظ می‌کند. دستگیره‌های پایدار همچنین در میان سرورهای یک کلاستر معتبر هستند و ضمانت‌های قوی‌تری نسبت به دستگیره‌های ارتجاعی دارند. نیازمند SMB3 یا بالاتر است (گزینه vers را ببینید).
(پیش‌فرض) غیرفعال‌سازی دستگیره‌های پایدار.
سوار کردن یک تصویر لحظه‌ای (snapshot) مشخص از اشتراک راه دور. time باید یک عدد صحیح مثبت باشد که تصویر لحظه‌ای درخواستی را مشخص می‌کند (بر حسب واحدهای 100 نانوثانیه‌ای که از 1 ژانویه 1601 سپری شده است، یا به عنوان جایگزین می‌تواند در قالب GMT مشخص شود، مانند @GMT-2019.03.27-20.52.19). در هسته لینوکس از نسخه 4.19 به بعد پشتیبانی می‌شود.
عدم ارسال درخواست‌های قفل محدوده بایتی (byte range lock) به سرور. این برای برنامه‌های خاصی که با قفل‌های محدوده بایتی اجباری سبک cifs دچار مشکل می‌شوند ضروری است (و اکثر سرورهای cifs هنوز از درخواست قفل‌های محدوده بایتی مشورتی پشتیبانی نمی‌کنند).
عدم استفاده از قفل‌های POSIX حتی در صورت دردسترس بودن از طریق افزونه‌های یونیکس. همیشه از قفل‌های اجباری سبک cifs استفاده کن.
بررسی اجاره‌های (leases) ذخیره‌شده موقت به صورت محلی به جای استعلام از سرور.
عدم درخواست lease/oplock هنگام باز کردن فایل در سرور. این کار ذخیره‌سازی موقت محلی عملیات‌های IO، قفل محدوده بایتی و متاداده‌های خواندن را خاموش می‌کند (برای جزئیات بیشتر درباره ذخیره‌سازی موقت متاداده، گزینه actimeo را ببینید). نیازمند SMB2 و بالاتر است (گزینه vers را ببینید).
هنگامی که افزونه‌های یونیکس CIFS یا SMB3 مورد توافق قرار نگرفته باشد، تلاش می‌کند فایل‌های دستگاه و fifoها را در قالبی سازگار با Services for Unix (SFU) ایجاد کند. علاوه بر این، بیت‌های 10-12 حالت را از طریق ویژگی گسترش‌یافته SETFILEBITS (همان‌طور که SFU انجام می‌دهد) بازیابی می‌کند. در آینده، 9 بیت پایینی حالت نیز با استفاده از پرس‌وجوی توصیف‌کننده امنیت (ACL) شبیه‌سازی خواهد شد. [توجه: نیازمند نسخه 1.39 یا بالاتر از CIFS VFS است. برای شناسایی پیوندهای نمادین و امکان ایجاد آن‌ها در قالبی سازگار با SFU، نسخه 1.40 یا بالاتر ماژول هسته CIFS VFS لازم است.]
فعال‌سازی پشتیبانی از پیوندهای نمادین Minshall+French (پیوند http://wiki.samba.org/index.php/UNIX_Extensions#Minshall.2BFrench_symlinks را ببینید). این گزینه در صورت تعیین همزمان با گزینه sfu نادیده گرفته می‌شود. پیوندهای نمادین Minshall+French حتی در صورتی که سرور از افزونه‌های یونیکس CIFS پشتیبانی کند استفاده می‌شوند.
فاصله زمانی ارسال درخواست‌های echo به سرور روی یک اتصال بیکار را تنظیم می‌کند. این تنظیم همچنین بر زمان لازم برای پایان مهلت اتصال به سرور بدون پاسخ تأثیر می‌گذارد. در اینجا n فاصله echo بر حسب ثانیه است. اتصال مجدد در سه برابر مقدار echo_interval تعیین‌شده برای سرور بدون پاسخ رخ می‌دهد. اگر این گزینه داده نشود، مقدار پیش‌فرض 60 ثانیه استفاده می‌شود. حداقل مقدار قابل تنظیم 1 ثانیه و حداکثر می‌تواند تا 600 ثانیه باشد.
استفاده از شماره‌های اینود (شناسه‌های پایدار و یکتای فایل) بازگردانده‌شده توسط سرور به جای تولید خودکار شماره‌های اینود موقت روی کلاینت. اگرچه شماره‌های اینود سرور تشخیص فایل‌های دارای پیوند سخت (hardlinked) را آسان‌تر می‌کند (زیرا شماره‌های اینود یکسانی خواهند داشت) و شماره‌های اینود ممکن است پایدار باشند (که برای برخی نرم‌افزارها مفید است)، اما سرور تضمین نمی‌کند که در صورت اشتراک‌گذاری چندین سوار سمت سرور تحت یک اشتراک واحد، شماره‌های اینود یکتا باشند (زیرا اگر چندین سیستم فایل زیر یک دایرکتوری سطح بالاتر به اشتراک گذاشته شده سوار شده باشند، شماره‌های اینود روی سرورها ممکن است یکتا نباشد). توجه داشته باشید که همه سرورها از بازگرداندن شماره‌های اینود سرور پشتیبانی نمی‌کنند، هرچند سرورهایی که از افزونه‌های یونیکس CIFS پشتیبانی می‌کنند و سرورهای Windows 2000 و بعد از آن معمولاً از این ویژگی پشتیبانی می‌کنند (البته نه لزوماً در هر سیستم فایل محلی سرور). اگر سرور از بازگرداندن شماره‌های اینود یا معادل آن پشتیبانی نکند، پارامتر تأثیری ندارد. این رفتار به طور پیش‌فرض فعال است.
کلاینت به جای استفاده از شماره‌های واقعی سرور، خودش شماره‌های اینود را تولید می‌کند.

برای اطلاعات بیشتر بخش شماره‌های اینود را ببینید.

(پیش‌فرض) فعال‌سازی افزونه‌های یونیکس برای این سوار کردن. نیازمند CIFS (vers=1.0) یا SMB3.1.1 (vers=3.1.1) و سروری است که از آن‌ها پشتیبانی کند.
غیرفعال‌سازی افزونه‌های یونیکس برای این سوار کردن. این گزینه می‌تواند برای خاموش کردن چندین تنظیم به طور همزمان مفید باشد. این شامل POSIX aclها، قفل‌های POSIX، مسیرهای POSIX، پشتیبانی از پیوند نمادین و دریافت uid/gid/mode از سرور است. این همچنین می‌تواند برای دور زدن یک باگ در سروری که از افزونه‌های یونیکس پشتیبانی می‌کند مفید باشد.

برای اطلاعات بیشتر بخش شماره‌های اینود را ببینید.

اجازه ندادن به getfattr/setfattr برای دریافت/تنظیم xattrها، حتی اگر سرور از آن پشتیبانی کند. حالت پیش‌فرض فعال بودن پشتیبانی از xattr است.
ارجاعات سیستم فایل توزیع‌شده (DFS) را دنبال نکن. عملیات ورودی/خروجی روی فایلی که در سرور ذخیره نشده است به جای اتصال شفاف به سرور مقصد، با شکست مواجه می‌شود.
استفاده از اندازه ثابت برای بافرهای سوکت recv/send هسته.
در صورتی که سیستم از قبل از طریق یک نقطه سوار کردن موجود به سرور متصل است، سعی در استفاده مجدد از سوکت‌ها نکن. این کار باعث می‌شود کلاینت بدون توجه به اتصالات قبلی، همیشه یک اتصال جدید به سرور برقرار کند. این می‌تواند در شبیه‌سازی اتصال چند کلاینت به یک سرور مفید باشد، زیرا هر نقطه سوار کردن از یک سوکت TCP متفاوت استفاده خواهد کرد.
ارسال داده روی سوکت با استفاده از عملیات‌های غیرمسدودکننده (پرچم MSG_DONTWAIT).
حداکثر مقدار داده‌ای که هسته در یک درخواست خواندن طلب می‌کند بر حسب بایت. حداکثر اندازه‌ای که سرورها می‌پذیرند معمولاً برای گویش‌های SMB3 یا بالاتر 8 مگابایت است. مقدار پیش‌فرض درخواستی هنگام سوار کردن 4 مگابایت است. قبل از هسته 4.20، مقدار پیش‌فرض درخواستی 1 مگابایت بود. قبل از گویش SMB2.1، حداکثر مقدار معمولاً 64 کیلوبایت بود.
حداکثر مقدار داده‌ای که هسته در یک درخواست نوشتن ارسال می‌کند بر حسب بایت. حداکثر اندازه‌ای که سرورها می‌پذیرند معمولاً برای گویش‌های SMB3 یا بالاتر 8 مگابایت است. مقدار پیش‌فرض درخواستی هنگام سوار کردن 4 مگابایت است. قبل از هسته 4.20، مقدار پیش‌فرض درخواستی 1 مگابایت بود. قبل از گویش SMB2.1، حداکثر مقدار معمولاً 64 کیلوبایت بود.
لغو اندازه بلوک پیش‌فرض (1 مگابایت) گزارش‌شده روی فایل‌های SMB3 (نیازمند نسخه هسته 5.1 یا بالاتر). قبل از نسخه 5.1 هسته، اندازه بلوک همیشه به جای 1 مگابایت به عنوان 16 کیلوبایت گزارش می‌شد (و قابل پیکربندی نبود) که می‌تواند به عملکرد ابزارهایی مانند cp و scp (به ویژه برای I/O بدون ذخیره موقت) که بر اساس اندازه بلوک اینود درباره اندازه خواندن و نوشتن مورد استفاده برای کپی فایل تصمیم می‌گیرند، آسیب برساند. bsize نباید کمتر از 16 کیلوبایت یا بیشتر از 16 مگابایت باشد.
حداکثر اعتباری که کلاینت SMB2 می‌تواند داشته باشد. پیش‌فرض 32000 است. باید عددی بین 20 و 60000 تنظیم شود.
فعال‌سازی ذخیره‌سازی موقت دیسک محلی با استفاده از FS-Cache برای CIFS. این گزینه می‌تواند برای بهبود عملکرد در پیوندهای کند، سرور با بار کاری سنگین و/یا شبکه‌ای که خواندن از دیسک در آن سریع‌تر از خواندن از سرور (روی شبکه) است، مفید باشد. این همچنین می‌تواند بر مقیاس‌پذیری تأثیر مثبت بگذارد زیرا تعداد فراخوانی‌ها به سرور کاهش می‌یابد. اما توجه داشته باشید که ذخیره‌سازی موقت محلی برای همه بارهای کاری مناسب نیست، به عنوان مثال بارهای کاری از نوع یک‌بار-خواندن (read-once). بنابراین باید قبل از استفاده از این گزینه، شرایط/بار کاری را به دقت بررسی کنید. در حال حاضر، ذخیره‌سازی موقت دیسک محلی برای فایل‌های CIFS بازشده به صورت فقط‌خواندنی فعال است.

NOTE: این ویژگی فقط در هسته‌های جدیدی موجود است که با گزینه پیکربندی هسته CONFIG_CIFS_FSCACHE ساخته شده باشند. همچنین باید دیمن cachefilesd را نصب کرده و در حال اجرا داشته باشید تا حافظه موقت عملیاتی شود.

هنگام دسترسی به سرور، دسترسی‌های کاربر را به اطلاعات هویتی مجزا نگاشت می‌کند. به طور پیش‌فرض، سوار کردن‌های CIFS هنگام دسترسی به یک اشتراک تنها از یک مجموعه واحد از اطلاعات هویتی کاربر (اطلاعات هویتی زمان سوار کردن) استفاده می‌کنند. با این گزینه، هر زمان که کاربر جدیدی به نقطه سوار دسترسی پیدا کند، کلاینت در عوض یک نشست جدید با سرور با استفاده از اطلاعات هویتی آن کاربر ایجاد می‌کند. دسترسی‌های بعدی توسط آن کاربر نیز از همان اطلاعات هویتی استفاده خواهند کرد. از آنجا که هسته نمی‌تواند درخواست گذرواژه کند، سوار کردن‌های multiuser محدود به سوارهایی هستند که از گزینه‌های sec= که نیازی به گذرواژه ندارند استفاده می‌کنند.

با این تغییر، برای سرور ممکن است که اعمال دسترسی‌ها را مدیریت کند، بنابراین این گزینه به طور ضمنی به معنی noperm نیز هست. علاوه بر این، هنگامی که افزونه‌های یونیکس در حال استفاده نباشند و مدیر سیستم مالکیت را با استفاده از گزینه‌های uid= یا gid= لغو نکرده باشد، مالکیت فایل‌ها به عنوان کاربر فعلی که به اشتراک دسترسی دارد ارائه می‌شود.

مدت زمانی (به ثانیه) که کلاینت CIFS ویژگی‌های یک فایل یا دایرکتوری را قبل از درخواست اطلاعات ویژگی از سرور در حافظه موقت نگه می‌دارد. در طول این دوره، تغییراتی که روی سرور رخ می‌دهد تا زمانی که کلاینت دوباره سرور را بررسی نکند، ناشناخته باقی می‌ماند.

به طور پیش‌فرض، مهلت زمانی حافظه موقت ویژگی روی 1 ثانیه تنظیم شده است. این به معنای فراخوانی‌های مکرر روی شبکه به سرور برای بررسی تغییر ویژگی‌ها است که می‌تواند بر عملکرد تأثیر بگذارد. با این گزینه، کاربران می‌توانند بسته به نیازهای بار کاری، بین عملکرد و صحت متاداده‌های حافظه موقت تعادل برقرار کنند. زمان‌های کوتاه‌تر به معنای سازگاری بهتر حافظه موقت است، اما تعداد فراخوانی‌ها به سرور را افزایش می‌دهد. زمان‌های طولانی‌تر به معنای کاهش تعداد فراخوانی‌ها به سرور اما سازگاری سهل‌گیرانه‌تر حافظه موقت است. مقدار actimeo یک عدد صحیح مثبت است که می‌تواند مقادیری بین 0 و حداکثر مقدار تنظیم‌شده 2^30 * HZ (فرکانس وقفه تایمر) داشته باشد. تنظیم آن روی 0 ذخیره‌سازی موقت را غیرفعال می‌کند.

حداکثر زمانی (به ثانیه) که کلاینت CIFS ویژگی‌های یک فایل معمولی را قبل از درخواست اطلاعات جدید ویژگی از سرور، در حافظه موقت نگه می‌دارد. اگر این گزینه مشخص نشود، مقدار acregmax برابر با مقدار actimeo تنظیم خواهد شد؛ برای جزئیات بیشتر actimeo را ببینید.
حداکثر زمانی (به ثانیه) که کلاینت CIFS ویژگی‌های یک دایرکتوری را قبل از درخواست اطلاعات جدید ویژگی از سرور، در حافظه موقت نگه می‌دارد. اگر این گزینه مشخص نشود، مقدار acdirmax برابر با مقدار actimeo تنظیم خواهد شد؛ برای جزئیات بیشتر actimeo را ببینید.
فضای نامی را تعیین می‌کند که فراخوانی‌های upcall از سیستم فایل SMB باید در آن مدیریت شوند. مقادیر مجاز عبارتند از:

- mount - حل upcallها به فضای نام میزبان.
- app - حل upcallها در فضای نام ریسه فراخواننده (برنامه).

مقدار پیش‌فرض app است. این گزینه در محیط‌هایی مانند Kubernetes مفید است، جایی که ممکن است سوار کردن توسط یک پاد گرداننده از طرف برنامه‌ای که در یک کانتینر مجزا اجرا می‌شود انجام شود. این اطمینان حاصل می‌کند که اطلاعات هویتی کربروس و سایر داده‌های ویژه کاربر در فضای نام صحیح قابل دسترسی هستند. با مشخص کردن app، فراخوانی‌های upcall می‌توانند در فضای نام برنامه حل شوند و از استفاده از اطلاعات هویتی صحیح اطمینان حاصل شود. mount اجازه حل در فضای نام میزبان را می‌دهد، که ممکن است زمانی لازم باشد که اطلاعات هویتی یا پیکربندی‌ها در خارج از کانتینر مدیریت شوند.

این گزینه ویژگی multichannel (چندکاناله) را فعال می‌کند. Multichannel یک ویژگی پروتکل SMB3 است که به کلاینت اجازه می‌دهد چندین اتصال انتقال به یک سرور SMB برقرار کرده و آن‌ها را در یک نشست احراز هویت شده واحد SMB متصل کند. این ویژگی تحمل خطا را افزایش می‌دهد و با توزیع ترافیک در چندین اتصال، توان عملیاتی را بالا می‌برد. با این گزینه سوار کردن، پیش‌فرض در صورت پشتیبانی سرور از multichannel استفاده از دو کانال است. پارامتر max_channels می‌تواند در صورت تمایل به استفاده از بیش از دو کانال مشخص شود.
این گزینه هنگام استفاده از ویژگی multichannel کاربرد دارد. گزینه max_channels به کاربر امکان می‌دهد تعداد اتصالات انتقالی را که باید بین کلاینت و سرور برقرار شود تا سقف 16 مشخص کند. استفاده از این گزینه به طور ضمنی ویژگی multichannel را فعال می‌کند. اگر گزینه max_channels مشخص نشود، ویژگی multichannel به طور پیش‌فرض از 2 اتصال استفاده می‌کند.
حداکثر زمانی (به ثانیه) که کلاینت CIFS ارسال دستور نهایی بستن SMB3 را زمانی که کلاینت اجاره دستگیره (handle lease) روی فایل دارد، به تعویق می‌اندازد.

به طور پیش‌فرض، closetimeo روی 1 ثانیه تنظیم شده است و می‌تواند مقادیری بین 0 و حداکثر مقدار 2^30 * HZ داشته باشد.

اگر افزونه‌های یونیکس روی یک اشتراک فعال باشند، کلاینت معمولاً به نام فایل‌ها اجازه می‌دهد هر کاراکتری به جز '/' را در مؤلفه نام مسیر داشته باشند و از اسلش رو به جلو به عنوان جداکننده نام مسیر استفاده خواهد کرد. این گزینه مانع از تلاش کلاینت برای توافق بر سر استفاده از نام‌های مسیر به سبک posix با سرور می‌شود.
معکوس noposixpaths.
ویژگی آزمایشی (EXPERIMENTAL FEATURE) فشرده‌سازی پیام‌های روی شبکه را برای سوارهای SMB 3.1.1 یا بالاتر فعال می‌کند. در صورتی که compress روشن باشد و vers روی نسخه‌ای کمتر از 3.1.1 تنظیم شده باشد، سوار کردن با شکست مواجه می‌شود.
نسخه پروتکل SMB. مقادیر مجاز عبارتند از:
  • 1.0 - پروتکل کلاسیک CIFS/SMBv1.
  • 2.0 - پروتکل SMBv2.002. این پروتکل ابتدا در Windows Vista Service Pack 1 و Windows Server 2008 معرفی شد. توجه داشته باشید که نسخه اولیه منتشرشده Windows Vista با گویش کمی متفاوت (2.000) ارتباط برقرار می‌کرد که پشتیبانی نمی‌شود.
  • 2.1 - پروتکل SMBv2.1 که در Microsoft Windows 7 و Windows Server 2008R2 معرفی شد.
  • 3.0 - پروتکل SMBv3.0 که در Microsoft Windows 8 و Windows Server 2012 معرفی شد.
  • 3.02 یا 3.0.2 - پروتکل SMBv3.0.2 که در Microsoft Windows 8.1 و Windows Server 2012R2 معرفی شد.
  • 3.1.1 یا 3.11 - پروتکل SMBv3.1.1 که در Microsoft Windows 10 و Windows Server 2016 معرفی شد.
  • 3 - نسخه پروتکل SMBv3.0 و بالاتر.
  • default - تلاش می‌کند بر سر بالاترین نسخه SMB2+ پشتیبانی‌شده توسط هر دو طرف کلاینت و سرور توافق کند.

اگر هیچ گویشی هنگام سوار کردن مشخص نشود، vers=default استفاده می‌شود. برای بررسی Dialect به /proc/fs/cifs/DebugData مراجعه کنید.

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

حالت پیش‌فرض از نسخه v4.13.5 این است که کلاینت و سرور بر سر بالاترین نسخه ممکن بزرگتر یا مساوی با 2.1 توافق کنند. در هسته‌های قبل از v4.13، مقدار پیش‌فرض 1.0 بود. برای هسته‌های بین v4.13 و v4.13.5 مقدار پیش‌فرض 3.0 است.

به سیستم اجازه می‌دهد هر گزینه ناشناخته سوار کردنی را که پس از این گزینه می‌آید نادیده بگیرد، به جای اینکه سوار کردن به طور کامل با شکست مواجه شود.
اطلاعات اشکال‌زدایی بیشتری را برای سوار کردن چاپ می‌کند. توجه داشته باشید که این پارامتر باید قبل از -o مشخص شود. به عنوان مثال:
mount -t cifs //server/share /mnt --verbose -o user=username

به طور کلی ترجیح داده می‌شود از اسلش‌های رو به جلو (/) به عنوان جداکننده در نام‌های سرویس استفاده شود. آن‌ها به عنوان "جداکننده جهانی" در نظر گرفته می‌شوند زیرا معمولاً اجازه قرارگیری در داخل مؤلفه‌های مسیر در ماشین‌های ویندوز را ندارند و کلاینت می‌تواند آن‌ها را بدون قید و شرط به بک‌اسلش (\) تبدیل کند. برعکس، کاراکترهای بک‌اسلش توسط POSIX مجاز هستند تا بخشی از یک مؤلفه مسیر باشند و نمی‌توان آن‌ها را به همان روش به طور خودکار تبدیل کرد.

ابزار mount.cifs در هر جایی که قادر باشد تلاش می‌کند بک‌اسلش‌ها را به اسلش‌های رو به جلو تبدیل کند، اما نمی‌تواند این کار را در هیچ مؤلفه مسیری پس از sharename انجام دهد.

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

هنگامی که افزونه‌های یونیکس غیرفعال هستند و گزینه سوار کردن serverino فعال است، هیچ راهی برای دریافت شماره اینود سرور وجود ندارد. کلاینت معمولاً UniqueID تخصیص‌یافته توسط سرور را روی یک شماره اینود نگاشت می‌کند.

توجه داشته باشید که UniqueID مقداری متفاوت از شماره اینود سرور است. مقدار UniqueID در محدوده کل سرور یکتا است و اغلب بزرگتر از ۲ به توان ۳۲ است. این مقدار اغلب باعث می‌شود برنامه‌هایی که با LFS (پشتیبانی از فایل‌های بزرگ) کامپایل نشده‌اند، خطای EOVERFLOW در glibc را صادر کنند زیرا این مقدار در فیلد ساختار مقصد جا نمی‌شود. اکیداً توصیه می‌شود برنامه‌های خود را با پشتیبانی LFS (یعنی با -D_FILE_OFFSET_BITS=64) کامپایل کنید تا از این مشکل جلوگیری شود. همچنین می‌توانید از گزینه سوار کردن noserverino برای تولید شماره‌های اینود کوچکتر از ۲ به توان ۳۲ روی کلاینت استفاده کنید. اما ممکن است نتوانید پیوندهای سخت را به درستی تشخیص دهید.

در یک سیستم فایل شبکه مانند CIFS یا NFS، کلاینت باید با این واقعیت کنار بیاید که فعالیت در سایر کلاینت‌ها یا سرور می‌تواند محتویات یا ویژگی‌های یک فایل را بدون آگاهی کلاینت تغییر دهد. یک راه برای مقابله با چنین مشکلی این است که الزامی شود تمام دسترسی‌های فایل مستقیماً به سرور بروند. با این حال این کار مانع عملکرد مطلوب است، بنابراین اکثر پروتکل‌ها مکانیزمی دارند که به کلاینت اجازه می‌دهد داده‌ها را به صورت محلی در حافظه موقت ذخیره کند.

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

کلاینت cifs از pagecache هسته برای ذخیره موقت داده‌های فایل استفاده می‌کند. هرگونه ورودی/خروجی (I/O) که از طریق pagecache انجام شود عموماً تراز صفحه‌ای (page-aligned) دارد. این می‌تواند در صورت ترکیب با قفل‌های محدوده بایتی مشکل‌ساز شود زیرا قفل‌گذاری ویندوز اجباری است و می‌تواند مانع از رخ دادن خواندن‌ها و نوشتن‌ها شود.

گزینه cache=none به این معنی است که کلاینت هرگز از حافظه موقت برای خواندن‌ها و نوشتن‌های عادی استفاده نمی‌کند. همیشه برای برآوردن یک درخواست خواندن یا نوشتن مستقیماً به سرور دسترسی پیدا می‌کند.

گزینه cache=strict به این معنی است که کلاینت تلاش خواهد کرد پروتکل CIFS/SMB2 را به طور دقیق دنبال کند. یعنی حافظه موقت تنها زمانی مورد اعتماد است که کلاینت یک oplock داشته باشد. هنگامی که کلاینت oplock ندارد، از حافظه موقت عبور کرده و برای برآوردن درخواست خواندن یا نوشتن مستقیماً به سرور دسترسی پیدا می‌کند. با انجام این کار، کلاینت از مشکلات مربوط به قفل‌های محدوده بایتی اجتناب می‌کند. علاوه بر این، قفل‌های محدوده بایتی زمانی که کلاینت oplock دارد روی کلاینت ذخیره موقت می‌شوند و هنگامی که آن oplock فراخوانی مجدد شود به سرور ارسال (push) می‌شوند.

گزینه cache=loose به کلاینت اجازه می‌دهد از قواعد پروتکل سهل‌گیرانه‌تری استفاده کند که گاهی اوقات می‌تواند عملکرد بهتری را به بهای از دست رفتن سازگاری حافظه موقت ارائه دهد. دسترسی به فایل همیشه شامل pagecache می‌شود. هنگامی که یک oplock یا lease نگه داشته نشده باشد، کلاینت تلاش می‌کند بلافاصله پس از نوشتن در یک فایل، حافظه موقت را تخلیه کند. توجه داشته باشید که این تخلیه لزوماً قبل از بازگشت فراخوانی سیستمی write رخ نمی‌دهد.

در مورد خواندن بدون داشتن یک oplock، کلاینت تلاش می‌کند به طور دوره‌ای ویژگی‌های فایل را بررسی کند تا اطمینان حاصل کند که آیا تغییر کرده است یا خیر و آیا حافظه موقت ممکن است دیگر معتبر نباشد. این سازوکار بسیار شبیه به سازوکاری است که NFSv2/3 برای سازگاری حافظه موقت استفاده می‌کند، اما به ویژه در CIFS مشکل‌ساز است. ویندوز در به‌روزرسانی فیلد LastWriteTime که کلاینت برای تأیید این موضوع استفاده می‌کند کاملاً "تنبل" عمل می‌کند. نتیجه این است که cache=loose می‌تواند زمانی که چندین خواننده و نویسنده روی فایل‌های یکسان کار می‌کنند، باعث فساد داده‌ها شود.

به همین دلیل، هنگامی که چندین کلاینت به یک مجموعه یکسان از فایل‌ها دسترسی دارند، استفاده از cache=strict توصیه می‌شود. این کار با پیروی دقیق‌تر از پروتکل‌های CIFS/SMB2 به حذف مشکلات سازگاری حافظه موقت کمک می‌کند.

همچنین توجه داشته باشید که صرف نظر از اینکه چه مدل حافظه موقتی استفاده می‌شود، کلاینت همیشه از pagecache برای مدیریت فایل‌های نگاشت‌شده با mmap استفاده خواهد کرد. نوشتن روی فایل‌های نگاشت‌شده با mmap تنها زمانی تضمین می‌شود که به سرور تخلیه شود که msync() فراخوانی شود، یا در هنگام close().

مقدار پیش‌فرض در هسته‌های قبل از 3.7 برابر با loose بود. از 3.7، پیش‌فرض strict است.

این گزینه برای کار با اشیاء فایلی استفاده می‌شود که توصیف‌کننده‌های امنیتی (Security Descriptors) و CIFS/NTFS ACL را به جای UID، GID، بیت‌های دسترسی فایل و POSIX ACL به عنوان مدل احراز هویت کاربر دارند. این رایج‌ترین مدل احراز هویت برای سرورهای CIFS است و همان مدلی است که توسط ویندوز استفاده می‌شود.

پشتیبانی از این قابلیت نیازمند ساخته شدن ماژول هسته cifs با هر دو گزینه CONFIG_CIFS_XATTR و CONFIG_CIFS_ACL فعال است. از لینوکس 5.3، گزینه CONFIG_CIFS_ACL دیگر وجود ندارد زیرا پشتیبانی از CIFS/NTFS ACL همیشه در ماژول هسته cifs تعبیه شده است.

اکثر هسته‌های توزیع‌ها قبلاً این گزینه‌ها را به طور پیش‌فرض فعال کرده‌اند، اما همچنان می‌توانید فعال بودن آن‌ها را با دستور زیر بررسی کنید:

cat /lib/modules/$(uname -r)/build/.config

همچنین، در صورتی که هسته با CONFIG_IKCONFIG_PROC پیکربندی شده باشد:

zcat /proc/config.gz

یک CIFS/NTFS ACL با استفاده از الگوریتم مشخص‌شده در سند مایکروسافت TechNet زیر به بیت‌های دسترسی فایل نگاشت می‌شود:

http://technet.microsoft.com/en-us/library/bb463216.aspx

به منظور نگاشت SIDها به/از UIDها و GIDها، موارد زیر الزامی است:

  • یک upcall هسته به ابزار cifs.idmap که از طریق request-key.conf(5) تنظیم شده باشد
  • پشتیبانی از winbind یا sssd که از طریق nsswitch.conf(5) پیکربندی شده باشد

لطفاً برای اطلاعات بیشتر به صفحات راهنمای مربوطه cifs.idmap(8)، winbindd(8) و sssd(8) مراجعه کنید.

توصیف‌کننده‌های امنیتی برای یک شیء فایل را می‌توان با استفاده از ویژگی گسترش‌یافته به نام system.cifs_acl مستقیماً دریافت و تنظیم کرد. توصیف‌کننده‌های امنیتی ارائه‌شده از طریق این رابط، تکه‌داده‌های خام ("raw" blobs) هستند و به یک ابزار فضای کاربری برای تجزیه و قالب‌بندی یا سرهم کردن آن نیاز دارند، مانند getcifsacl(1) و setcifsacl(1) به ترتیب.

برخی از نکاتی که باید هنگام استفاده از این گزینه سوار کردن در نظر بگیرید:

  • ممکن است به دلیل درخواست‌های اضافی برای دریافت و تنظیم توصیف‌کننده‌های امنیتی، تأخیر بیشتری در هنگام مدیریت متاداده وجود داشته باشد.
  • نگاشت بین CIFS/NTFS ACL و بیت‌های دسترسی فایل POSIX ناقص است و ممکن است برخی از اطلاعات ACL در این تبدیل از بین بروند.
  • اگر upcall به cifs.idmap به درستی تنظیم نشده باشد یا winbind یا sssd پیکربندی نشده و در حال اجرا نباشد، نگاشت شناسه با شکست مواجه خواهد شد. در این صورت، uid و gid به مقادیر اشتراک یا در صورت تعیین، به مقادیر گزینه‌های سوار کردن uid و/یا gid تغییر خواهند کرد.

برای یک کاربر در سرور، دسترسی مورد نظر به یک فایل با مجوزها و حقوق مرتبط با آن فایل تعیین می‌شود. این کار معمولاً با استفاده از مالکیت و ACL انجام می‌شود. برای کاربری که حق دسترسی به یک فایل را ندارد، همچنان امکان دسترسی به آن فایل برای یک هدف خاص یا مشخص با اعطای حقوق ویژه وجود دارد. یکی از اهداف خاص، دسترسی به یک فایل با هدف پشتیبان‌گیری یا بازیابی است، یعنی قصد پشتیبان‌گیری (backup intent). حق دسترسی به یک فایل با قصد پشتیبان‌گیری معمولاً می‌تواند با عضویت آن کاربر در گروه داخلی Backup Operators اعطا شود. بنابراین، هنگامی که این کاربر تلاش می‌کند فایلی را با قصد پشتیبان‌گیری باز کند، درخواست باز کردن با تنظیم بیت FILE_OPEN_FOR_BACKUP_INTENT به عنوان یکی از CreateOptions ارسال می‌شود.

به عنوان مثال، در یک سرور ویندوز، کاربری به نام testuser، نمی‌تواند این فایل را با چنین توصیف‌کننده امنیتی باز کند:

REVISION:0x1
CONTROL:0x9404
OWNER:Administrator
GROUP:Domain Users
ACL:Administrator:ALLOWED/0x0/FULL

اما کاربر testuser، اگر عضوی از گروه Backup Operators شود، می‌تواند فایل را با قصد پشتیبان‌گیری باز کند.

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

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

پروتکل اصلی CIFS اطلاعات مالکیت یونیکس یا حالت (mode) را برای فایل‌ها و دایرکتوری‌ها ارائه نمی‌دهد. به همین دلیل، فایل‌ها و دایرکتوری‌ها عموماً متعلق به هر مقداری که گزینه‌های uid= یا gid= تنظیم شده باشند به نظر می‌رسند، و مجوزهای آن‌ها روی مقادیر پیش‌فرض file_mode و dir_mode برای سوار کردن تنظیم خواهد شد. تلاش برای تغییر این مقادیر از طریق chmod/chown موفقیت‌آمیز بازمی‌گردد اما هیچ اثری نخواهد داشت.

هنگامی که کلاینت و سرور بر سر افزونه‌های یونیکس توافق می‌کنند، به فایل‌ها و دایرکتوری‌ها uid، gid و mode ارائه‌شده توسط سرور اختصاص می‌یابد. از آنجا که سوارهای CIFS عموماً تک‌کاربره هستند و بدون توجه به اینکه چه کاربری به سوار دسترسی دارد، از همان اطلاعات هویتی استفاده می‌شود، فایل‌ها و دایرکتوری‌های تازه ایجادشده عموماً مالکیتی متناسب با هر اطلاعات هویتی که برای سوار کردن اشتراک استفاده شده بود، دریافت می‌کنند.

اگر uidها و gidهای مورد استفاده در کلاینت و سرور مطابقت نداشته باشند، گزینه‌های forceuid و forcegid ممکن است مفید باشند. با این حال توجه داشته باشید که هیچ گزینه متناظری برای نادیده گرفتن حالت (mode) وجود ندارد. مجوزهای اختصاص داده شده به یک فایل هنگامی که forceuid یا forcegid در حال اعمال هستند ممکن است دسترسی‌های واقعی را منعکس نکنند.

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

همچنین امکان لغو کامل بررسی دسترسی‌ها در کلاینت از طریق گزینه noperm وجود دارد. بررسی‌های دسترسی سمت سرور را نمی‌توان نادیده گرفت. بررسی‌های دسترسی انجام‌شده توسط سرور همیشه با اطلاعات هویتی مورد استفاده برای سوار کردن اشتراک مطابقت خواهد داشت، و نه لزوماً با کاربری که به اشتراک دسترسی دارد.

متغیر USER ممکن است حاوی نام کاربری فردی باشد که برای احراز هویت در سرور استفاده می‌شود. این متغیر می‌تواند برای تنظیم هر دو نام کاربری و گذرواژه با استفاده از قالب username%password استفاده شود.

متغیرهای PASSWD و PASSWD2 ممکن است به ترتیب حاوی گذرواژه و گذرواژه جایگزین فرد استفاده‌کننده از کلاینت باشند.

متغیرهای PASSWD_FILE و PASSWD2_FILE ممکن است به ترتیب حاوی مسیر فایلی باشند که password یا password2 از آن خوانده می‌شود. در هر مورد یک خط ورودی خوانده شده و به عنوان گذرواژه استفاده می‌شود.

این دستور فقط توسط کاربر ریشه (root) قابل استفاده است، مگر اینکه با پرچم setuid نصب شده باشد که در این صورت پرچم‌های سوار کردن noexec و nosuid فعال می‌شوند. هنگامی که به عنوان یک برنامه setuid نصب می‌شود، این برنامه از قواعد تعیین‌شده توسط برنامه mount برای سوارهای کاربر پیروی می‌کند، با این محدودیت اضافه که کاربران باید قبل از سوار کردن بتوانند با دستور chdir() وارد نقطه سوار کردن شوند تا بتوانند روی آن عملیات سوار کردن را انجام دهند.

برخی ابزارهای کلاینت samba مانند smbclient(8) به پارامترهای پیکربندی سمت کلاینت موجود در smb.conf احترام می‌گذارند. بر خلاف آن ابزارهای کلاینت، mount.cifs فایل smb.conf را به طور کامل نادیده می‌گیرد.

سازوکار اصلی برای اعمال تغییرات پیکربندی و خواندن اطلاعات اشکال‌زدایی برای cifs vfs از طریق سیستم فایل /proc لینوکس است. در دایرکتوری /proc/fs/cifs فایل‌های پیکربندی و فایل‌های شبه‌سیستمی گوناگونی وجود دارند که می‌توانند اطلاعات اشکال‌زدایی و آمار عملکرد را نمایش دهند. گزینه‌های راه‌اندازی دیگری مانند حداکثر اندازه بافر و تعداد بافرها وجود دارد که فقط در زمان بارگذاری ماژول cifs vfs هسته (ماژول cifs.ko) قابل تنظیم هستند. این موارد را می‌توان با اجرای ابزار modinfo روی فایل cifs.ko مشاهده کرد که گزینه‌هایی را که می‌توان در زمان نصب ماژول (بارگذاری گرداننده دستگاه) به cifs ارسال کرد، فهرست می‌کند. برای اطلاعات بیشتر فایل هسته fs/cifs/README را ببینید. هنگام پیکربندی ردیابی پویا (trace-cmd) توجه داشته باشید که فهرست رویدادهای SMB3 که می‌توانند فعال شوند را می‌توان در آدرس زیر مشاهده کرد: /sys/kernel/debug/tracing/events/cifs

استفاده از SMB2.1 یا بالاتر (از جمله جدیدترین گویش SMB3.1.1) برای بهبود امنیت توصیه می‌شود و SMB1 دیگر به طور پیش‌فرض در زمان سوار کردن درخواست نمی‌شود. گویش‌های قدیمی مانند CIFS (SMB1 یعنی vers=1.0) امنیت بسیار ضعیف‌تری دارند. استفاده از CIFS (SMB1) می‌تواند با دستور modprobe cifs disable_legacy_dialects=y غیرفعال شود.

سوار کردن با استفاده از مشخصات URL برای CIFS در حال حاضر پشتیبانی نمی‌شود.

فایل اطلاعات هویتی (credentials) نام‌های کاربری یا گذرواژه‌هایی را که دارای فاصله در ابتدا هستند مدیریت نمی‌کند.

توجه داشته باشید که پاسخ معمول به گزارش یک باگ، پیشنهاد آزمایش نسخه جدیدتر در وهله اول است. بنابراین لطفاً ابتدا این کار را امتحان کنید، و همیشه نسخه‌های نرم‌افزارهای مرتبط را هنگام گزارش باگ‌ها درج کنید (حداقل: mount.cifs (دستور mount.cifs -V را امتحان کنید)، هسته (فایل /proc/version را ببینید) و نوع سروری که تلاش می‌کنید با آن ارتباط برقرار کنید).

این صفحه راهنما برای نسخه 2.18 از سیستم فایل cifs vfs (تقریباً هسته لینوکس 5.0) معتبر است.

cifs.upcall(8), getcifsacl(1), setcifsacl(1)

فایل‌های Documentation/filesystems/cifs.txt و fs/cifs/README در درخت کد منبع هسته لینوکس ممکن است حاوی گزینه‌ها و اطلاعات بیشتری باشند.

Steve French

نگه‌دارنده cifs vfs در لینوکس Steve French است. نگه‌دارنده مجموعه ابزارهای فضای کاربری cifs-utils آقای Pavel Shilovsky است. لیست پستی Linux CIFS Mailing list مکان ترجیحی برای طرح پرسش‌ها در رابطه با این برنامه‌ها است.