إزالة SMB 1 على Linux
تقوم العديد من المنظمات ومقدمي خدمات الإنترنت (ISPs) بحجب المنفذ الذي يستخدمه SMB للاتصال، المنفذ 445. تنبع هذه الممارسة من الإرشادات الأمنية حول الإصدارات القديمة والمستهترة من بروتوكول SMB. على الرغم من أن SMB 3.x هو بروتوكول آمن على الإنترنت، إلا أن الإصدارات القديمة من SMB، وخاصة SMB 1 ليست كذلك. يتم تضمين SMB 1، المعروف أيضًا باسم CIFS (نظام ملفات الإنترنت الشائع)، مع العديد من توزيعات Linux.
SMB 1 هو بروتوكول قديم وغير فعال وغير آمن. الخبر السار هو أن ملفات Azure لا تدعم SMB 1، وبدءًا من Linux kernel version 4.18، يتيح Linux تعطيل SMB 1. نوصي دائمًا بشدة بتعطيل SMB 1 على عملاء Linux قبل استخدام مشاركات ملفات SMB في الإنتاج.
حالة توزيع Linux
بدءا من Linux kernel 4.18، تكشف وحدة SMB kernel، التي تسمى لأسباب قديمة، عن معلمة وحدة نمطية جديدة (غالبا ما يشار إليها باسم cifsparm بواسطة وثائق خارجية مختلفة)، تسمى disable_legacy_dialects. على الرغم من تقديمه في Linux kernel 4.18، إلا أن بعض البائعين قاموا بإعادة هذا التغيير إلى Kernels القديمة التي يدعمونها. للتسهيل، يُبين الجدول التالي تفاصيل توفر معلمة الوحدة هذه على توزيعات Linux الشائعة.
| التوزيع | يمكن تعطيل SMB 1 |
|---|---|
| Ubuntu 14.04-16.04 | لا |
| Ubuntu 18.04 | نعم |
| Ubuntu 19.04+ | نعم |
| Debian 8-9 | لا |
| Debian 10+ | نعم |
| Fedora 29+ | نعم |
| CentOS 7 | لا |
| CentOS 8+ | نعم |
| Red Hat Enterprise Linux 6.x-7.x | لا |
| Red Hat Enterprise Linux 8 | نعم |
| openSUSE Leap 15.0 | لا |
| openSUSE Leap 15.1+ | نعم |
| openSUSE Tumbleweed | نعم |
| SUSE Linux Enterprise 11.x-12.x | لا |
| SUSE Linux Enterprise 15 | لا |
| SUSE Linux Enterprise 15.1 | لا |
يمكنك التحقق لمعرفة ما إذا كان توزيع Linux خاصتك يدعم معلمة الوحدة disable_legacy_dialects من خلال الأمر التالي:
sudo modinfo -p cifs | grep disable_legacy_dialects
يجب أن يخرج هذا الأمر الرسالة التالية:
disable_legacy_dialects: To improve security it may be helpful to restrict the ability to override the default dialects (SMB2.1, SMB3 and SMB3.02) on mount with old dialects (CIFS/SMB1 and SMB2) since vers=1.0 (CIFS/SMB1) and vers=2.0 are weaker and less secure. Default: n/N/0 (bool)
إزالة SMB 1
قبل تعطيل SMB 1، تأكد من أن وحدة SMB غير محملة حاليًا على نظامك (يحدث هذا تلقائيًا إذا قمت بتركيب مشاركة SMB). يمكنك القيام بذلك باستخدام الأمر التالي، والذي يجب ألا ينتج عنه أي شيء إذا لم يتم تحميل SMB:
lsmod | grep cifs
لإلغاء تحميل الوحدة، قم أولاً بإلغاء تثبيت جميع مشاركات SMB (باستخدام الأمر umount كما هو موضح أعلاه). يمكنك التعرف على جميع مشاركات SMB المثبتة على نظامك باستخدام الأمر التالي:
mount | grep cifs
بمجرد إلغاء تحميل جميع مشاركات ملفات SMB، سيكون من الآمن إلغاء تحميل الوحدة النمطية. يمكنك القيام بذلك باستخدام الأمر modprobe :
sudo modprobe -r cifs
يمكنك تحميل الوحدة يدويًا مع تفريغ SMB 1 باستخدام الأمر modprobe:
sudo modprobe cifs disable_legacy_dialects=Y
أخيرًا، يمكنك التحقق من تحميل وحدة SMB مع المعلمة من خلال النظر إلى المعلمات المحملة في /sys/module/cifs/parameters:
cat /sys/module/cifs/parameters/disable_legacy_dialects
لتعطيل SMB 1 باستمرار على التوزيعات القائمة على Ubuntu و Debian، يجب عليك إنشاء ملف جديد (إذا لم يكن لديك بالفعل خيارات مخصصة لوحدات أخرى) يسمى /etc/modprobe.d/local.conf مع الإعداد. يمكنك القيام بذلك باستخدام الأمر التالي:
echo "options cifs disable_legacy_dialects=Y" | sudo tee -a /etc/modprobe.d/local.conf > /dev/null
يمكنك التحقق من أن هذا قد نجح عن طريق تحميل وحدة SMB:
sudo modprobe cifs
cat /sys/module/cifs/parameters/disable_legacy_dialects
الخطوات التالية
راجع هذه الروابط للحصول على مزيد من المعلومات حول ملفات Azure: