Product SiteDocumentation Site

11.4. سرور فایل NFS

NFS یا Network File System پروتکلی است که اجازه دسترسی راه‌دور به فایل‌سیستم را از طریق شبکه می‌دهد. تمام سیستم‌های یونیکس می‌توانند با این پروتکل کار کنند؛ زمانی که سیستم‌های ویندوز در میان باشند، باید از Samba استفاده شود.
NFS ابزار بسیار مفیدی است، اما در گذر زمان از محدودیت‌های بسیاری رنج می‌برد، که اکثر آن‌ها با نسخه ۴ پروتکل برطرف شده‌اند. نقطه ضعف آن در پیکربندی آخرین نسخه است چرا که برای استفاده از ویژگی‌های پایه در امنیت مانند احرازهویت و رمزنگاری باید از ابزار Kerberos به این منظور استفاده شود و بدون استفاده از آن‌ها نباید این پروتکل را خارج از شبکه محلی استفاده کرد چرا که داده به صورت رمزنگاری نشده منتقل می‌شود (یک sniffer می‌تواند داده را رهگیری کند) و دسترسی‌ها نیز مبتنی بر نشانی IP درخواست‌کننده صادر می‌شود (که می‌توانند مورد سوءاستفاده قرار بگیرند).

11.4.1. ایمن‌سازی NFS

اگر از ویژگی‌های امنیتی مبتنی بر Kerberos استفاده نمی‌کنید، این نکته حیاتی است که تنها رایانه‌هایی که اجازه استفاده از NFS را دارند بتوانند به سرورهای درخواست RPC متصل شوند، چرا که پروتکل اولیه به داده دریافتی از شبکه اعتماد می‌کند. فایروال نیز باید IP spoofing را مسدود سازد تا رایانه‌ای خارج از شبکه نتواند خود را بجای یکی از اعضای شبکه معرفی کند، همچنین دسترسی به برخی درگاه‌ها نیز باید فقط به رایانه‌های قابل دسترس در NFS محدود شود.
نسخه‌های قدیمی‌تر پروتکل به سرویس‌های دیگری از RPC نیاز دارند که از درگاه‌های انتساب پویا استفاده می‌کنند. خوشبختانه، با نسخه ۴ از NFS، تنها درگاه‌های ۲۰۴۹ (برای NFS) و ۱۱۱ (برای portmapper) مورد نیاز هستند که به سادگی توسط فایروال کنترل می‌شوند.

11.4.2. سرور NFS

سرور NFS بخشی از کرنل لینوکس است؛ در کرنل‌های فراهم شده توسط دبیان به صورت یک افزونه کرنل درآمده است. اگر سرور NFS در زمان راه‌اندازی به صورت خودکار باید اجرا گردد، بسته nfs-kernel-server باید نصب گردد؛ این بسته شامل اسکریپت‌های راه‌اندازی اولیه است.
فایل پیکربندی سرور NFS، /etc/exports، دایرکتوری‌های قابل دسترس در شبکه را فهرست می‌کند (exported). برای هر اشتراک NFS، تنها فهرست مشخص شده از رایانه‌ها قادر به دسترسی هستند. کنترل دسترسی بهتری با استفاده از گزینه‌های پیکربندی آن ممکن است. شیوه نگارش این فایل بسیار ساده است:
/directory/to/share machine1(option1,option2,...) machine2(...) ...
نکته اینکه در NFSv4، تمام دایرکتوری‌های صادر شده باید بخشی از یک ساختار سلسله‌مراتبی باشند که ریشه آن باید توسط گزینه‌های fsid=0 و fsid=root صادر و شناسایی شده باشد.
هر رایانه می‌تواند با استفاده از نام DNS یا نشانی IP شناسایی شود. مجموعه‌ای از رایانه‌ها نیز می‌توانند یا با شیوه نگارش *.falcot.com یا با محدوده نشانی IP به صورت 192.168.0.0/255.255.255.0 یا 192.168.0.0/24 شناسایی شوند.
دایرکتوری‌های به صورت فقط-خواندنی در حالت پیشفرض قرار می‌گیرند (یا با گزینه ro). گزینه rw اجازه دسترسی خواندنی-نوشتنی را می‌دهد. برنامه‌های NFS معمولا از درگاه مختص به root استفاده می‌کنند (به عبارت دیگر، زیر ۱۰۲۴)؛ این محدودیت با استفاده از گزینه insecure می‌تواند برداشته شود (گزینه secure به صورت ضمنی درج می‌شود اما برای خوانایی بیشتر می‌تواند استفاده شود).
به صورت پیشفرض، سرور تنها زمانی به پرس و جوی NFS پاسخ می‌دهد که عملیات فعلی دیسک تمام شده باشد (گزینه sync)؛ این کار می‌تواند با استفاده از گزینه async غیرفعال گردد. نوشتن‌های غیر-همزمان می‌تواند اندکی عملکرد کلی را بهبود ببخشد، اما قابلیت اعتماد را نیز کاهش می‌دهند چرا که خطر از دست دادن داده زمانی که سرور بین فعالیت‌های تایید نوشتن روی دیسک و انجام واقعی آن متوقف شود، وجود دارد. از زمانی که مقدار پیشفرض آن اخیرا تغییر کرده است (در مقایسه با مقداری قدیمی آن در NFS) تنظیم صریح آن توصیه می‌شود.
به منظور حذف دسترسی root به فایل‌سیستم اشتراکی از طرف NFS، تمام پرس و جوهایی که از طرف کاربر root دریافت شوند به عنوان کاربر nobody در نظر گرفته می‌شوند. این عملکرد مبتنی بر گزینه root_squash است، که به صورت پیشفرض فعال می‌باشد. گزینه no_root_squash، که این عملکرد را غیرفعال می‌کند، خطرناک بوده و تنها در محیط‌های کنترل شده باید استفاده گردد. گزینه‌های anonuid=uid و anongid=gid امکان استفاده از یک کاربر و گروه ساختگی را بجای شناسه‌کاربری/گروه ۶۵۵۳۴ را می‌دهند (که منطبق با کاربر nobody و گروه nogroup است).
در NFSv4، شما می‌تواند با استفاده از گزینه sec سطح امنیتی مورد نظر خود را مشخص کنید: sec=sys گزینه پیشفرض است که ویژگی خاصی را شامل نمی‌شود، sec=krb5 تنها احرازهویت را فعال می‌کند، sec=krb5i محافظت از جامعیت داده را می‌افزاید و sec=krb5p کامل‌ترین سطح امنیتی است که شامل محافظت از حریم شخصی می‌باشد (همراه با رمزنگاری). برای این منظور نیاز به یک راه‌اندازی آماده از Kerberos دارد (این سرویس در این کتاب پوشش داده نمی‌شود).
گزینه‌های دیگری نیز وجود دارند؛ آن‌ها در صفحه راهنمای exports(5) مستندسازی شده‌اند.

11.4.3. برنامه NFS

مانند سایر فایل‌سیستم‌ها، یکپارچه‌سازی یک اشتراک NFS درون یک فایل‌سیستم نیازمند اتصال آن است. از آنجا که این فایل‌سیستم ویژگی‌های خود را دارد، برخی تنظیمات در رابطه با دستور mount و فایل /etc/fstab مورد نیاز هستند.

مثال 11.22. اتصال دستی با استفاده از دستور mount

          # mount -t nfs4 -o rw,nosuid arrakis.internal.falcot.com:/shared /srv/shared

مثال 11.23. اتصال خودکار با درج در فایل /etc/fstab

arrakis.internal.falcot.com:/shared /srv/shared nfs4 rw,nosuid 0 0
دستور بالا، هنگام راه‌اندازی سیستم، دایرکتوری NFS /shared/ را از سرور arrakis به دایرکتوری محلی /srv/shared/ متصل می‌کند. دسترسی خواندنی-نوشتنی درخواست شده است (پارامتر rw). گزینه nosuid یک مقیاس امنیتی است که بیت setuid یا setgid را از برنامه‌های اجرایی در محل اشتراک حذف می‌کند. اگر قرار بود از اشتراک NFS تنها برای ذخیره‌سازی اسناد استفاده می‌شد، گزینه توصیه شده دیگر noexec است، که از اجرای برنامه‌ها در فضای اشتراکی جلوگیری می‌کند. نکته اینکه در سرور، دایرکتوری shared زیر دایرکتوری اصلی NFSv4 (برای نمونه، /export/shared) قرار دارد، از این رو یک دایکتوری سطح-بالا به حساب نمی‌آید.
صفحه راهنمای nfs(5) به توضیح تمام گزینه‌های بکار رفته در آن می‌پردازد.