إن نظام ملفات الشبكة (NFS) هو حل تخزين موزع. وهو بروتوكول لنظام الملفات يسمح بتركيب الأدلة البعيدة على الخادم المحلي واستخدامها كما لو كانت تخزينًا محليًا. يتيح NFS لعدة عملاء مشاركة التخزين البعيد. وهو مناسب تمامًا للبيئات التي تتطلب موارد مشتركة بانتظام. تم بناء NFS على نظام ONC RPC (استدعاء الإجراء عن بعد للحوسبة الشبكية المفتوحة). وهو معيار مفتوح محدد في RFC (طلب التعليقات). يتيح ذلك لأي شخص تنفيذ البروتوكول.
في هذا الدليل، سنستعرض خطوات إعداد وتكوين نقطة تركيب NFS على Ubuntu 20.04.
المتطلبات الأساسية
كما يوحي وصف NFS، هناك جزءان لتكوين NFS:
-
المضيف: يقوم بتخزين البيانات فعليًا ومشاركة التخزين مع أنظمة "العميل".
-
العميل: النظام الذي يتصل بـ "المضيف" ويستخدم التخزين البعيد كما لو كان محليًا.
من أجل العرض التوضيحي الخاص بنا، سنستخدم خادمين، كلاهما مكوّن بنظام Ubuntu 20.04. إليك دليل سهل حول كيفية إعداد خادم Ubuntu الخاص بك. طوال هذا الدليل، سيُشار إلى هذه الخوادم باسم المضيف و العميل. لاحظ أن الإجراء الخاص بـ العميل سيكون هو نفسه حتى لو كان هناك أكثر من عميل واحد.
تم تخصيص عناوين IP التالية للخوادم. هذه الخوادم مستضافة بواسطة CloudSigma:
-
host: 31.171.240.79
-
client: 31.171.250.109
تأكد من استبدالها بعناوين IP المناسبة.
تثبيت NFS
يتوفر NFS بسهولة في مستودعات Ubuntu الرسمية. هناك حزم برامج مختلفة لكل من المضيف و العميل .
-
تثبيت NFS على المضيف
على المضيف، نحتاج إلى المكونات التي تجهز الجهاز ليعمل كـ NFS مضيف. وتأتي في شكل الحزمة nfs-kernel-server. يستخدم Ubuntu APT كمدير للحزم. أولاً، افتح الطرفية، وقم بتحديث APT لقاعدة بيانات الحزم:
|
1 |
host$ sudo apt update |

بعد ذلك، قم بتثبيت حزمة nfs-kernel-server. إذا لزم الأمر، APT ستتولى معالجة أي تبعيات إضافية:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
تثبيت NFS على العميل
على نظام العميل، نحتاج إلى وظيفة الاتصال بأدلة المضيف عبر الشبكة. لا يتطلب ذلك وظيفة خادم NFS. على Ubuntu، يتم تضمينها في الحزمة nfs-common. قم بتحديث APT لقاعدة بيانات الحزم:
|
1 |
client$ sudo apt update |

ثم، قم بتثبيت حزمة nfs-common :
|
1 |
$ sudo apt install nfs-common |

الأدلة المشتركة على المضيف
بعد ذلك، سنقوم بمشاركة دليلين منفصلين، لكل منهما تكوين مختلف. سنعرض طريقتين رئيسيتين لعمل نقاط تركيب NFS فيما يتعلق بوصول المستخدم الخارق (superuser). بشكل افتراضي، يتمتع المستخدمون الخارقون بصلاحية تنفيذ أي شيء على النظام بأكمله. ومع ذلك، فإن الأدلة المركبة عبر NFS ليست جزءًا من النظام الذي تم تركيبها عليه. سيرفض خادم NFS تنفيذ أي عملية تتطلب امتيازات المستخدم الخارق. يترجم هذا القيد إلى عدم امتلاك العملاء أي سلطة للكتابة، وإعادة تعيين الملكية، وغيرها من مهام المستخدم الخارق على نقاط تركيب NFS.
من أجل السماح لبعض المستخدمين الموثوقين بتنفيذ هذه المهام على أنظمة الملفات المركبة. ومع ذلك، فإن هذا ينطوي على عنصر من المخاطرة، حيث يمكن لمثل هذا العميل أن يحصل على وصول كامل إلى المضيف. ويمكن التخفيف من ذلك من خلال الإدارة السليمة لأذونات المستخدمين. في نظام Linux، يتحكم ملف sudoers في جميع امتيازات المستخدمين على النظام. لمزيد من المعلومات، يمكنك إلقاء نظرة على برنامجنا التعليمي حول كيفية تكوين ملف Linux sudoers.
-
نقطة تركيب للأغراض العامة
سيكون المثال الأول عبارة عن نقطة تركيب NFS للأغراض العامة مع سلوكيات NFS الافتراضية. في هذا النهج، من الصعب للغاية على العميل تنفيذ إجراءات المستخدم الخارق على نقاط التركيب. هذا النوع من نقاط تركيب NFS شائع الاستخدام لتخزين الملفات، أو الرفع باستخدام نظام إدارة المحتوى (CMS)، أو مشاركة ملفات المشاريع، وما إلى ذلك.
يجب تنفيذ الخطوات التالية على نظام المضيف. أولاً، قم بإنشاء دليل للمشاركة باسم nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

بما أنه تم إنشاء الدليل باستخدام sudo صلاحية، سيكون المالك هو root:
|
1 |
$ ls -la /var/nfs/general |

كإعداد افتراضي، سيقوم NFS بترجمة أي عملية root من جانب العميل إلى nobody:nogroup بيانات الاعتماد لتدابير أمنية. وللاتساق، قم بتغيير ملكية الدليل لتطابق بيانات الاعتماد:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
الدليل الرئيسي
المثال الثاني هو جعل الدليل الرئيسي للمستخدم host متاحًا للعملاء. يمكن للمسؤولين الموثوقين من العملاء المحددين الوصول لإدارة المستخدمين بسهولة. الـ /home الدليل موجود افتراضيًا، لذا لا داعي لإنشاء أي دليل. أما بالنسبة لصلاحيات الدليل، فلا داعي لإجراء أي تغييرات لأنها ستسبب مشاكل أكثر من الفوائد.
تكوين صادرات NFS
تم الآن إنشاء الأدلة المراد مشاركتها. بعد ذلك، يجب تكوين NFS لإتاحتها للعملاء. يستخدم NFS ملف تكوين لتتبع الأدلة التي يجب مشاركتها. افتح ملف تكوين NFS التالي في محرر النصوص الذي تختاره:
|
1 |
host$ sudo nano /etc/exports |

يصف قسم التعليقات في الملف بنية الصيغة العامة للتكوين. باختصار، يجب الإعلان عن أي دليل بالتنسيق التالي:
|
1 |
$ <directory> <client>(<option_1>,<option_2>,...,<option_N>) |
بالنسبة للدليلين اللذين قررنا مشاركتهما، سيبدو التكوين كالتالي. يحتوي كلا الدليلين على خيارات التكوين نفسها تقريبًا:
|
1 2 3 |
host$/var/nfs/general 31.171.250.221(rw,sync,no_subtree_check) host$ /home 31.171.250.221(rw,sync,no_root_squash,no_subtree_check) |

إليك تحليل سريع لخيارات التكوين:
-
rw: يُمنح العميل صلاحية القراءة والكتابة على وحدة التخزين.
-
sync: يجبر NFS على كتابة التغييرات على القرص قبل الرد. يوفر هذا تجربة أكثر استقرارًا واتساقًا. سيعكس الرد الحالة الفعلية لوحدة التخزين البعيدة. ومع ذلك، ستكون عمليات الملفات أبطأ.
-
no_subtree_check: يمنع التحقق من الشجرة الفرعية (subtree checking). إذا لم يتم تعطيله، فسيتم إجبار المضيفين على التحقق من وجود الملف في الشجرة المصدرة لكل طلب فردي من العميل. يمكن أن يؤدي هذا إلى العديد من المشاكل، على سبيل المثال، إعادة تسمية ملف أثناء استخدام العميل له. في معظم الحالات، يكون تعطيل التحقق من الشجرة الفرعية هو الخيار الأفضل.
-
no_root_squash: كما ذكرنا سابقًا، سيقوم NFS بترجمة أي طلب من مستخدم root البعيد إلى مستخدم غير متميز. هذه ميزة أمنية مقصودة لمنع الوصول غير المرغوب فيه إلى النظام المضيف. ومع ذلك، فإن استخدام هذا الخيار سيعطل هذا السلوك.
احفظ ملف التكوين واخرج من المحرر. لتطبيق التغييرات، أعد تشغيل خادم NFS:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
ضبط جدار الحماية
بالنسبة لأي خادم، يعد التكوين الصحيح لجدار الحماية أمرًا ضروريًا. بافتراض أنك قمت بـ تكوين خادم Ubuntu 20.04 الخاص بك وفقًا لذلك، يجب أن يكون جدار الحماية UFW نشطًا. إنه جدار حماية بسيط ولكنه قوي يأتي مع معظم توزيعات Linux. للمبتدئين، إليك دليل سريع يشرح UFW، وكيفية عمله، والاستخدام الشائع لـ UFW مع الأمثلة.
بشكل افتراضي، سيقوم جدار الحماية بحظر أي حركة مرور واردة وصادرة. لضمان إمكانية اتصال خادم NFS وتبادل حركة المرور بشكل صحيح، نحتاج إلى إضافة استثناء لبروتوكول NFS. أولاً، تحقق من حالة جدار الحماية. سيقوم أيضًا بطباعة جميع القواعد الحالية:
|
1 |
host$ sudo ufw status |

كما نرى، يُسمح فقط بحركة مرور SSH إلى النظام. نحتاج إلى إضافة استثناء للسماح بحركة مرور NFS.
في معظم الحالات، يوصى بشدة باستخدام القاعدة الأكثر تقييدًا والتي لا تزال تسمح بحركة المرور اللازمة. لذلك، سنسمح فقط للعميل (العملاء) المحددين بالاتصال بالمضيف:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

بعد ذلك، تحقق من حالة جدار الحماية مرة أخرى:
|
1 |
host$ sudo ufw status |

إنشاء نقطة التحميل
الخادم جاهز الآن للسماح لنظام client بالاتصال ببروتوكول NFS. بعد ذلك، يتعين علينا إعداد client. للوصول إلى وحدة التخزين البعيدة، يجب تحميلها محليًا على client. بالنسبة لنقطة التحميل، يوصى باستخدام دليل فارغ مخصص.
بالنسبة لوحدتي التخزين البعيدتين، قم بإنشاء نقطتي تحميل منفصلتين:
|
1 |
client$ sudo mkdir -pv /nfs/general |

|
1 |
client$ sudo mkdir -pv /nfs/home |

الآن بعد أن أصبحت نقاط التحميل جاهزة، تحتاج إلى تحميل وحدات التخزين البعيدة:
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
يمكننا التحقق مما إذا كانت عمليات التحميل ناجحة. تحقق من قائمة جميع وحدات التخزين المحملة:
|
1 |
client$ df -h |

ها قد تم الأمر! تم تحميل وحدات التخزين البعيدة بنجاح. يمكننا أيضًا التحقق من استخدام المساحة باستخدام الأمر التالي:
|
1 |
client$ du -sh /nfs/home |

اختبار الوصول إلى NFS
حتى الآن، تم تحميل وحدات التخزين البعيدة بشكل صحيح. ومع ذلك، لن يكون هناك أي فائدة إذا لم يتمكن العميل من قراءة/كتابة البيانات على وحدة التخزين البعيدة. للتحقق، قم بإنشاء ملف وهمي على نقطة (نقاط) تحميل NFS. هنا، سيتم إنشاء الملف بامتياز root لاختبار ما إذا كانت التكوينات الخاصة بـ root تعمل بشكل صحيح:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
بعد ذلك، تحقق من ملكية الملف:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

كما نرى، يقوم NFS بترجمة مالك الملف إلى nobody:nogroup. الـ /var/nfs/ general لديه ملكية لـ nobody:nogroup، لذلك يقوم NFS بترجمة ملكية الملف. حان الوقت لاختبار تحميل NFS الآخر:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
تحقق من وجود الملف وملكيته:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

في هذه الحالة، لم يقم NFS بترجمة ملكية الملف. تم تكوين هذا العميل ليكون قادرًا على تنفيذ الإجراءات الإدارية. علاوة على ذلك، فإن دليل host الأصلي /home ليس لديه الملكية لـ nobody:nogroup.
حيل إضافية
-
التحميل عند بدء التشغيل
حتى الآن، كان علينا تحميل وحدة تخزين NFS يدويًا على دليل محلي. إذا لم يتم إلغاء تحميلها، فستستمر عمليات تحميل NFS حتى يعاد تشغيل النظام. إذا تم استخدام وحدة تخزين NFS بانتظام، فإن التحميل اليدوي يصبح مملًا للغاية. في حالة وجود عمليات تحميل NFS متعددة، فمن غير العملي تحميلها يدويًا واحدة تلو الأخرى.
باستخدام ملف /etc/fstab، يمكننا أتمتة العملية. أثناء بدء التشغيل، سيقوم هذا البرنامج النصي تلقائيًا بتحميل وحدات تخزين NFS على نقاط التحميل المستهدفة. افتح الملف في محرر نصوص:
|
1 |
client$ sudo nano /etc/fstab |

أضف السطور التالية لتحميل وحدات التخزين البعيدة للنظام المضيف:
|
1 2 3 |
client$ 31.171.240.236:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 client$31.171.240.236:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 |

احفظ البرنامج النصي وأغلق محرر النصوص. عند بدء التشغيل التالي، سيقوم Linux تلقائيًا بتحميل وحدات التخزين البعيدة. لاحظ أن النظام قد يستغرق بعض الوقت لبدء التشغيل أثناء اتصاله وتحميله لوحدات التخزين.
-
إلغاء تحميل وحدة تخزين NFS
إذا لم تعد وحدة التخزين البعيدة ضرورية، فإن إلغاء تحميل وحدات التخزين سيؤدي إلى إزالتها من نظام العميل. ومع ذلك، قبل إلغاء التحميل، تأكد من عدم وجود أي تطبيق/برنامج نصي يستخدم وحدة التخزين البعيدة. يشبه إلغاء تحميل نقاط NFS إلغاء تحميل أي نقاط أخرى. في هذه الحالة، قم بإلغاء تحميل /nfs/home و /nfs/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/عام |

ثم، تحقق من الإجراء:
|
1 |
العميل$ df -h |

أفكار ختامية
في هذا الدليل، قمنا بإنشاء خادم NFS واستعرضنا بعض أساسيات المشاركة عن بُعد باستخدام NFS. إذا كنت مهتمًا بتطبيق NFS في بيئة إنتاجية، فضع في اعتبارك أن بروتوكول NFS غير مشفر. قد يثير هذا بعض المخاوف الأمنية، على سبيل المثال، هجمات رجل في المنتصف (man-in-the-middle).
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.