بروتوكولات التخزين الشبكي: إعداد NFS و Samba لتبادل الملفات


المقدمة: لماذا نحتاج لبروتوكولات التخزين الشبكي؟

مرحباً يا جماعة! كمهندس أنظمة لينكس، تعرفون أن مشاركة الملفات عبر الشبكة هي أساس أي بنية تحتية محترمة. اليوم، راح نغوص في عالم بروتوكولات التخزين الشبكي ونركز على اثنين من الأبطال: NFS (Network File System) و Samba. كل واحد له استخداماته ومميزاته، وراح نشوف كيف نجهزهم خطوة بخطوة.

1. بروتوكول NFS (Network File System)

NFS هو بروتوكول أصيل في عالم يونكس/لينكس، ممتاز لمشاركة الملفات بين أنظمة لينكس ويونكس الأخرى. بسيط، فعال، وموثوق.

1.1. إعداد خادم NFS (NFS Server)

أولاً، نحتاج تثبيت الحزم اللازمة على الخادم اللي راح يشارك الملفات.

التثبيت (على CentOS/RHEL):

sudo dnf install nfs-utils -y
sudo systemctl enable --now nfs-server rpcbind
sudo systemctl start nfs-server rpcbind

التثبيت (على Debian/Ubuntu):

sudo apt update
sudo apt install nfs-kernel-server -y
sudo systemctl enable --now nfs-server
sudo systemctl start nfs-server

بعد التثبيت، لازم نحدد المجلدات اللي نبي نشاركها. هذا يتم عن طريق ملف exports/etc/.

تكوين المشاركات (Exports):

افتح الملف:

sudo nano /etc/exports

أضف السطر التالي لمشاركة مجلد مثلاً /srv/nfs_share:

/srv/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)

ملاحظة سريعة:

  • 192.168.1.0/24: الشبكة أو المضيفين المسموح لهم بالوصول. تقدر تستخدم IP واحد، نطاق IP، أو حتى اسم مضيف.
  • rw: قراءة وكتابة.
  • sync: الكتابة على القرص تتم بشكل متزامن.
  • no_subtree_check: يحسن الأداء في بعض الحالات، لكن ممكن يكون له آثار أمنية بسيطة في بيئات معينة.

لا تنسى إنشاء المجلد وتغيير صلاحياته:

sudo mkdir -p /srv/nfs_share
sudo chown nobody:nogroup /srv/nfs_share
sudo chmod 777 /srv/nfs_share

بعد التعديل على exports/etc/، لازم تحدث قائمة المشاركات وتفعلها:

sudo exportfs -a
sudo systemctl restart nfs-server

وتأكد من فتح المنافذ اللازمة في جدار الحماية:

sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reload

ملاحظة: إذا كنت تستخدم UFW على Ubuntu/Debian، الأوامر راح تكون مختلفة، مثلاً sudo ufw allow nfs.

1.2. إعداد عميل NFS (NFS Client)

الآن، على الجهاز العميل اللي يبي يوصل للمشاركة.

التثبيت (على CentOS/RHEL):

sudo dnf install nfs-utils -y

التثبيت (على Debian/Ubuntu):

sudo apt update
sudo apt install nfs-common -y

تركيب المشاركة (Mounting the Share):

أول شيء، أنشئ نقطة تحميل (mount point):

sudo mkdir -p /mnt/nfs_share

بعدين، ركب المشاركة:

sudo mount 192.168.1.100:/srv/nfs_share /mnt/nfs_share

ملاحظة: استبدل 192.168.1.100 بعنوان IP لخادم NFS.

للتحقق من التركيب:

df -h /mnt/nfs_share

التركيب التلقائي عند الإقلاع (Automounting):

عشان المشاركة تركب تلقائياً كل مرة يشتغل فيها الجهاز، أضف السطر التالي لملف fstab/etc/:

192.168.1.100:/srv/nfs_share /mnt/nfs_share nfs defaults 0 0

بعد التعديل، تقدر تجرب تركب كل شيء في fstab يدوياً للتأكد:

sudo mount -a

2. بروتوكول Samba (SMB/CIFS)

Samba هو تطبيق مفتوح المصدر لبروتوكول SMB/CIFS، اللي هو بروتوكول مشاركة الملفات الأساسي في أنظمة ويندوز. هذا يخليه الخيار الأمثل لمشاركة الملفات بين أنظمة لينكس وويندوز.

2.1. إعداد خادم Samba (Samba Server)

نفس الشيء، نبدأ بالتثبيت.

التثبيت (على CentOS/RHEL):

sudo dnf install samba samba-client samba-common -y
sudo systemctl enable --now smb nmb
sudo systemctl start smb nmb

التثبيت (على Debian/Ubuntu):

sudo apt update
sudo apt install samba samba-client -y
sudo systemctl enable --now smbd nmbd
sudo systemctl start smbd nmbd

ملف التكوين الرئيسي لـ Samba هو smb.conf/etc/samba/.

تكوين المشاركات (Shares):

افتح الملف:

sudo nano /etc/samba/smb.conf

أضف قسم جديد في نهاية الملف لمشاركة مجلد مثلاً /srv/samba_share:

[PublicShare]
    comment = Public Samba Share
    path = /srv/samba_share
    browsable = yes
    writable = yes
    guest ok = yes
    read only = no

ملاحظة سريعة:

  • [PublicShare]: اسم المشاركة اللي راح تظهر للمستخدمين.
  • path: المسار الفعلي للمجلد على الخادم.
  • browsable = yes: تظهر المشاركة في قائمة الشبكة.
  • writable = yes: تسمح بالكتابة.
  • guest ok = yes: تسمح بالوصول كضيف بدون كلمة مرور (غير آمن للبيانات الحساسة).

لا تنسى إنشاء المجلد وتعيين الصلاحيات المناسبة:

sudo mkdir -p /srv/samba_share
sudo chmod -R 0777 /srv/samba_share
sudo chown -R nobody:nogroup /srv/samba_share

ولو كنت تستخدم SELinux (على CentOS/RHEL)، لازم تعدل السياق الأمني للمجلد:

sudo semanage fcontext -a -t samba_share_t "/srv/samba_share(/.*)?"
sudo restorecon -Rv /srv/samba_share

إضافة مستخدمين لـ Samba:

إذا ما تبي وصول ضيف، تقدر تحدد مستخدمين معينين. أول شيء، لازم يكون المستخدم موجود في نظام لينكس، بعدين تضيفه لـ Samba.

sudo adduser sambauser
sudo smbpasswd -a sambauser

راح يطلب منك كلمة مرور للمستخدم في Samba. بعدين، ممكن تحتاج تعدل إعدادات المشاركة في smb.conf عشان تسمح لهذا المستخدم فقط:

[PrivateShare]
    comment = Private Samba Share
    path = /srv/private_samba_share
    valid users = sambauser
    writable = yes
    browsable = no

بعد أي تعديل على smb.conf، لازم تعيد تشغيل خدمات Samba:

sudo systemctl restart smb nmb # RHEL/CentOS
sudo systemctl restart smbd nmbd # Debian/Ubuntu

وتأكد من فتح المنافذ في جدار الحماية:

sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

2.2. إعداد عميل Samba (Linux Client)

على جهاز لينكس العميل، نحتاج حزم samba-client أو cifs-utils.

التثبيت (على CentOS/RHEL):

sudo dnf install samba-client cifs-utils -y

التثبيت (على Debian/Ubuntu):

sudo apt update
sudo apt install samba-client cifs-utils -y

تركيب المشاركة (Mounting the Share):

أنشئ نقطة تحميل:

sudo mkdir -p /mnt/samba_share

بعدين، ركب المشاركة. إذا كانت مشاركة ضيف (guest share):

sudo mount -t cifs //192.168.1.100/PublicShare /mnt/samba_share -o guest

إذا كانت مشاركة تتطلب مستخدم وكلمة مرور:

sudo mount -t cifs //192.168.1.100/PrivateShare /mnt/samba_share -o username=sambauser,password=YourPassword

ملاحظة: استبدل 192.168.1.100 بعنوان IP لخادم Samba، و YourPassword بكلمة المرور الفعلية. يفضل استخدام ملف credentials لتجنب كشف كلمة المرور في سطر الأوامر أو fstab.

التركيب التلقائي عند الإقلاع (Automounting):

أضف السطر التالي لملف fstab/etc/. لمشاركة ضيف:

//192.168.1.100/PublicShare /mnt/samba_share cifs guest,uid=1000,gid=1000 0 0

لمشاركة تتطلب مستخدم وكلمة مرور (باستخدام ملف credentials):

أنشئ ملف credentials (مثلاً /etc/samba/credentials/private.cred) واملأه كالتالي:

username=sambauser
password=YourPassword

تأكد من تأمين ملف الـ credentials:

sudo chmod 600 /etc/samba/credentials/private.cred

ثم أضف السطر التالي لـ fstab/etc/:

//192.168.1.100/PrivateShare /mnt/samba_share cifs credentials=/etc/samba/credentials/private.cred,uid=1000,gid=1000 0 0

جرب التركيب اليدوي للتأكد:

sudo mount -a

2.3. الوصول إلى مشاركة Samba من Windows

على جهاز ويندوز، ببساطة افتح مستكشف الملفات واكتب مسار الشبكة في شريط العنوان:

\\192.168.1.100\PublicShare

أو

\\192.168.1.100\PrivateShare

راح يطلب منك اسم المستخدم وكلمة المرور إذا كانت المشاركة خاصة.

الخاتمة

وهكذا يا رفاق، نكون غطينا أساسيات إعداد NFS و Samba. NFS هو نجمك للمشاركات بين أنظمة لينكس، بينما Samba هو جسرك الذهبي لعالم ويندوز. تذكر دائمًا أهمية الأمان وتكوين الصلاحيات بشكل صحيح. استمتعوا بمشاركة الملفات!