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.
أداة قوية جداً ولكنه يعاني، منذ الأزل، من قيود كثيرة، معظمها حلت في الإصدار 4 من البروتوكول. ولكن العيب هو أن إعداد الإصدار الأخير من NFS أصعب عندما ترغب باستخدام مزايا الحماية البسيطة مثل المصادقة والتشفير لأنه يعتمد على Kerberos في هذه الأجزاء. وإذا لم تستخدم هذه المزايا عليك الاقتصار على استخدام بروتوكول NFS في الشبكات المحلية الموثوقة فقط لأن البيانات تنتقل عبر الشبكة دون تشفير (يستطيع sniffer التقاطها) كما تعطى صلاحيات الوصول اعتماداً على عنوان IP الخاص بالعميل (الذي يمكن تزويره).

11.4.1. تأمين NFS

إذا لم تكن تستخدم مزايا الأمان التي تعتمد على Kerberos فلا بد أن تضمن أن الأجهزة التي يسمح لها باستخدام NFS هي الوحيدة التي تستطيع الاتصال بمختلف مخدمات RPC اللازمة، لأن البروتوكول البسيط يثق بالمعلومات التي يستقبلها من الشبكة. يجب أن يمنع الجدار الناري أيضاً تزوير عناوين IP ‏(IP spoofing) بحيث لا يسمح لأي جهاز خارجي أن ينتحل شخصية جهاز داخلي، ويجب حصر الوصول إلى المنافذ المعنية بالأجهزة التي يسمح لها بالوصول لمشاركات NFS.
كانت النسخ الأقدم من البروتوكول تتطلب خدمات RPC أخرى التي كانت تستخدم منافذ تتعين ديناميكياً. لحسن الحظ، لم تعد هناك حاجة إلا إلى المنفذ 2049 (لخدمة NFS) والمنفذ 111 (من أجل 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 نموذجياً من منفذ مخصص للمستخدم الجذر (أي أنه أقل من 1024)؛ يمكن رفع هذا القيد باستخدام الخيار 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 syntaxes 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. مدخلة NFS في الملف /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)‎ ‎جميع الخيارات بشيء من التفصيل.