Product SiteDocumentation Site

11.4. سرور فایل NFS

NFS (Network File System) is a protocol allowing remote access to a filesystem through the network. All Unix systems can work with this protocol.
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 باید نصب گردد؛ این بسته شامل اسکریپت‌های راه‌اندازی اولیه است.
The NFS server configuration file(s), /etc/exports and /etc/exports.d/, lists the directories that are made available over the network (exported). For each NFS share, only the given list of machines is granted access. More fine-grained access control can be obtained with a few options. The syntax for this file is quite simple:
/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) تنظیم صریح آن توصیه می‌شود.
In order to not give root access to the filesystem to any NFS client, all queries appearing to come from a root user are considered by the server as coming from the nobody user. This behavior corresponds to the root_squash option, and is enabled by default. The no_root_squash option, which disables this behavior, is risky and should only be used in controlled environments. If all users should be mapped to the user nobody, use all_squash. The anonuid=uid and anongid=gid options allow specifying another fake user to be used instead of UID/GID 65534 (which corresponds to user nobody and group nogroup).
در NFSv4، شما می‌تواند با استفاده از گزینه sec سطح امنیتی مورد نظر خود را مشخص کنید: sec=sys گزینه پیشفرض است که ویژگی خاصی را شامل نمی‌شود، sec=krb5 تنها احرازهویت را فعال می‌کند، sec=krb5i محافظت از جامعیت داده را می‌افزاید و sec=krb5p کامل‌ترین سطح امنیتی است که شامل محافظت از حریم شخصی می‌باشد (همراه با رمزنگاری). برای این منظور نیاز به یک راه‌اندازی آماده از Kerberos دارد (این سرویس در این کتاب پوشش داده نمی‌شود).
گزینه‌های دیگری نیز وجود دارند؛ آن‌ها در صفحه راهنمای exports(5) مستندسازی شده‌اند.

11.4.3. برنامه NFS

As with other filesystems, integrating an NFS share into the system hierarchy requires mounting (and the nfs-common package). Since this filesystem has its peculiarities, a few adjustments were required in the syntax of the mount command and the /etc/fstab file.

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

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

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

arrakis.internal.falcot.com:/shared /srv/shared nfs4 rw,nosuid 0 0
The entry described above mounts, at system startup, the NFS directory /shared/ from the arrakis server into the local /srv/shared/ directory. Read-write access is requested (hence the rw parameter). The nosuid option is a protection measure that wipes any setuid or setgid bit from programs stored on the share. If the NFS share is only meant to store documents, another recommended option is noexec, which prevents executing programs stored on the share. Note that on the server, the shared directory is below the NFSv4 root export (for example /export/shared), it is not a top-level directory.
صفحه راهنمای nfs(5) به توضیح تمام گزینه‌های بکار رفته در آن می‌پردازد.