Product SiteDocumentation Site

11.4. مخدم الملفات NFS

NFS ‏(Network File System) هو بروتوكول يسمح بالوصول البعيد لنظم الملفات عبر الشبكة. تستطيع جميع نظم يونكس العمل مع هذا البروتوكول؛ لكن إذا دخلت نظم ويندوز على الصورة فلا بدَّ من استخدام Samba بدلاً منه.
أداة قوية جداً ولكنه يعاني، منذ الأزل، من قيود كثيرة، معظمها حلت في الإصدار 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)، يُفضّل استخدام خيار صريح.
يعتبر المخدم جميع الطلبات التي تبدو أنها واردة من المستخدم الجذر على أنها ترد من المستخدم nobody، وذلك في سبيل عدم منح صلاحيات الجذر على نظام الملفات لأي عميل NFS. هذا السلوك يوافق الخيار root_squash، وهو مُفعّل افتراضياً. أما الخيار no_root_squash، الذي يُعطّل هذا السلوك، فهو خطر ويجب استخدامه فقط في البيئات المسيطر عليها. يسمح الخياران anonuid=uid وanongid=gid بتحديد مستخدم زائف آخر لاستخدامه بدلاً من UID/GID 65534 (التي توافق المستخدم nobody والمجموعة nogroup).
في NFSv4، يمكنك إضافة الخيار sec لتحديد مستوى الحماية الذي تريد: sec=sys هو الافتراضي وليس له خصائص أمنية مميزة، أما المستوى sec=krb5 فيفعل المصادقة فقط، والمستوى sec=krb5i يضيف التحقق من سلامة المعلومات المنقولة، والمستوى sec=krb5p هو أكمل المستويات حيث يتضمن حماية الخصوصية (عبر تشفير البيانات). سوف تحتاج لإعداد Kerberos حتى تعمل هذه المستويات (هذه الخدمة غير مشروحة في هذا الكتاب).
هناك خيارات أخرى متاحة؛ وهي موثّقة في صفحة الدليل exports(5)‎.

11.4.3. عميل NFS

كما في نظم الملفات الأخرى، يجب ربط (mount) مشاركات NFS في شجرة ملفات النظام لمدجها معها. بما أن نظام الملفات هذا له خصوصياته، فقد أضيفت بعض التعديلات على صيغة الأمر mount والملف /etc/fstab.

مثال 11.22. الربط اليدوي باستخدام الأمر mount

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

مثال 11.23. مدخلة NFS في الملف /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)‎ ‎جميع الخيارات بشيء من التفصيل.