مشاركة عبر


تحميل مشاركات ملفات SMB Azure على عملاء Linux

يمكن تحميل مشاركات ملفات Azure في توزيعات Linux باستخدام عميل SMB kernel.

ينطبق على

نوع مشاركة الملف SMB NFS
مشاركات الملفات القياسية (GPv2)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) ‏‏نعم‬ لا
مشاركات الملفات القياسية (GPv2)، حساب تخزين مكرر جغرافي (GRS) أو حساب تخزين مكرر للمنطقة الجغرافية (GZRS) ‏‏نعم‬ لا
مشاركات الملفات المدفوعة (FileStorage)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) ‏‏نعم‬ لا

البروتوكولات

الطريقة الموصى بها لتحميل مشاركة ملف Azure على Linux هي استخدام SMB 3.1.1. بشكل افتراضي، تتطلب ملفات Azure التشفير أثناء النقل، والذي تدعمه SMB 3.0+‎. تدعم Azure Files أيضا SMB 2.1، والذي لا يدعم التشفير أثناء النقل، ولكن لا يمكنك تحميل مشاركات ملفات Azure مع SMB 2.1 من منطقة Azure أخرى أو محلية لأسباب أمنية. ما لم يتطلب التطبيق الخاص بك على وجه التحديد SMB 2.1، استخدم SMB 3.1.1. تمت إضافة دعم SMB 2.1 إلى Linux kernel الإصدار 3.7، لذلك إذا كنت تستخدم إصدارا من Linux kernel بعد 3.7، فيجب أن يدعم SMB 2.1.

التوزيع SMB 3.1.1 (مستحسن) بروتوكول Server Message Block 3.0
إصدار Linux kernel
  • دعم 3.1.1 الأساسي: 4.17
  • التحميل الافتراضي: 5.0
  • تشفير AES-128-GCM:‏ 5.3
  • تشفير AES-256-GCM: 5.10
  • دعم 3.0 الأساسي: 3.12
  • تشفير AES-128-CCM:‏ 4.11
Ubuntu تشفير AES-128-GCM:‏ 18.04.5 LTS+‎ تشفير AES-128-CCM:‏ 16.04.4 LTS+‎
Red Hat Enterprise Linux (RHEL)
  • الأساسي: 8.0+
  • التحميل الافتراضي: 8.2+
  • تشفير AES-128-GCM:‏ 8.2+
7.5+
دبيان الأساسي: 10+ تشفير AES-128-CCM:‏ 10+
SUSE Linux Enterprise Server تشفير AES-128-GCM:‏ 15 SP2+ تشفير AES-128-CCM:‏12 SP2+

إذا لم يكن توزيع Linux مدرجًا في الجدول أعلاه، يمكنك التحقق من إصدار Linux kernel باستخدام الأمر uname:

uname -r

المتطلبات الأساسية

  • تأكد من تثبيت حزمة cifs-utils. قم بتثبيت أحدث إصدار من حزمة cifs-utils باستخدام مدير الحزمة على توزيع Linux الذي تختاره.

في Ubuntu و Debian، استخدم مدير الحزمة apt :

sudo apt update
sudo apt install cifs-utils

في التوزيعات الأخرى، يمكنك استخدام مدير الحزم المناسب أو التحويل البرمجي من المصدر.

  • أحدث إصدار من واجهة سطر الأوامر Azure‏ (CLI). لمزيد من المعلومات حول كيفية تثبيت Azure CLI، راجع تثبيت Azure CLI وحدد نظام التشغيل الخاص بك. إذا كنت تفضل استخدام الوحدة النمطية Azure PowerShell في PowerShell 6+، يمكنك؛ ومع ذلك، فإن الإرشادات الواردة في هذه المقالة مخصصة ل Azure CLI.

  • تأكد من فتح المنفذ 445: يتصل SMB عبر منفذ TCP 445 - تأكد من أن جدار الحماية أو موفر خدمة الويب لا يمنع منفذ TCP 445 من جهاز العميل. <your-storage-account> استبدل <your-resource-group> ثم قم بتشغيل البرنامج النصي التالي:

    RESOURCE_GROUP_NAME="<your-resource-group>"
    STORAGE_ACCOUNT_NAME="<your-storage-account>"
    
    # This command assumes you have logged in with az login
    HTTP_ENDPOINT=$(az storage account show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $STORAGE_ACCOUNT_NAME \
        --query "primaryEndpoints.file" --output tsv | tr -d '"')
    SMBPATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})
    FILE_HOST=$(echo $SMBPATH | tr -d "/")
    
    nc -zvw3 $FILE_HOST 445
    

    إذا كان الاتصال ناجحًا، يجب أن ترى شيئًا مماثلاً للإخراج التالي:

    Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
    

    إذا لم تتمكن من فتح المنفذ 445 على شبكة شركتك أو تم حظرك من القيام بذلك من قبل موفر خدمة الإنترنت، فيمكنك استخدام اتصال VPN أو ExpressRoute للعمل حول المنفذ 445. لمزيد من المعلومات، راجع اعتبارات الشبكات للوصول المباشر إلى مشاركة ملفات Azure.

الأذونات

ستقوم جميع البرامج النصية المحملة في هذه المقالة بتحميل مشاركات الملفات باستخدام أذونات الملفات والمجلد الافتراضية 0755 Linux. وهذا يعني القراءة والكتابة والتنفيذ لمالك الملف/الدليل، والقراءة والتنفيذ للمستخدمين في مجموعة المالكين، والقراءة والتنفيذ للمستخدمين الآخرين. استنادا إلى نهج الأمان الخاصة بمؤسستك، قد تحتاج إلى تعيين أذونات أو أو dir_modefile_mode بديلة uid/gid في خيارات التحميل.

لمزيد من المعلومات حول كيفية تعيين الأذونات، راجع رمز Unix. راجع خيارات التحميل للحصول على قائمة بخيارات التحميل.

تحميل مشاركة ملفات Azure عند الطلب من خلال التحميل

عند تحميل مشاركة ملف على نظام تشغيل Linux، يتم تمثيل مشاركة الملفات عن بُعد كمجلد في نظام الملفات المحلي. يمكنك تحميل مشاركات الملفات إلى أي مكان على نظامك. يتم تحميل المثال التالي أسفل المسار /media. يمكنك تغيير هذا إلى المسار المفضل لديك الذي تريده عن طريق تعديل المتغير $MNT_ROOT.

استبدال <resource-group-name><storage-account-name> و<file-share-name> بالمعلومات المناسبة للبيئة الخاصة بك:

RESOURCE_GROUP_NAME="<resource-group-name>"
STORAGE_ACCOUNT_NAME="<storage-account-name>"
FILE_SHARE_NAME="<file-share-name>"

MNT_ROOT="/media"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"

sudo mkdir -p $MNT_PATH

بعد ذلك، قم بتهيئة ملف بيانات الاعتماد عن طريق تشغيل البرنامج النصي التالي.

# Create a folder to store the credentials for this storage account and
# any other that you might set up.
CREDENTIAL_ROOT="/etc/smbcredentials"
sudo mkdir -p "/etc/smbcredentials"

# Get the storage account key for the indicated storage account.
# You must be logged in with az login and your user identity must have
# permissions to list the storage account keys for this command to work.
STORAGE_ACCOUNT_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --query "[0].value" --output tsv | tr -d '"')

# Create the credential file for this individual storage account
SMB_CREDENTIAL_FILE="$CREDENTIAL_ROOT/$STORAGE_ACCOUNT_NAME.cred"
if [ ! -f $SMB_CREDENTIAL_FILE ]; then
    echo "username=$STORAGE_ACCOUNT_NAME" | sudo tee $SMB_CREDENTIAL_FILE > /dev/null
    echo "password=$STORAGE_ACCOUNT_KEY" | sudo tee -a $SMB_CREDENTIAL_FILE > /dev/null
else
    echo "The credential file $SMB_CREDENTIAL_FILE already exists, and was not modified."
fi

# Change permissions on the credential file so only root can read or modify the password file.
sudo chmod 600 $SMB_CREDENTIAL_FILE

الآن يمكنك تحميل مشاركة الملف مع mount الأمر باستخدام ملف بيانات الاعتماد. في المثال التالي، $SMB_PATH يتم ملء الأمر باستخدام اسم المجال المؤهل بالكامل لنقطة نهاية ملف حساب التخزين. راجع خيارات التحميل للحصول على قائمة بخيارات تحميل SMB.

إشعار

بدءًا من الإصدار 5.0 من Linux kernel، يعد SMB 3.1.1 هو البروتوكول الافتراضي المتفاوض عليه. إذا كنت تستخدم إصدارًا من Linux kernel أقدم من 5.0، فحدد vers=3.1.1 في قائمة خيارات التحميل.

# This command assumes you have logged in with az login
HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})$FILE_SHARE_NAME

STORAGE_ACCOUNT_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --query "[0].value" --output tsv | tr -d '"')

sudo mount -t cifs $SMB_PATH $MNT_PATH -o credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks

يمكنك أيضًا تحميل نفس مشاركة ملف Azure إلى نقاط تحميل متعددة إذا رغبت في ذلك.

عند الانتهاء من استخدام مشاركة ملف Azure، استخدم sudo umount $mntPath لإلغاء تحميل المشاركة.

تحميل مشاركات الملفات تلقائيًا

عند تحميل مشاركة ملف على نظام تشغيل Linux، يتم تمثيل مشاركة الملفات عن بُعد كمجلد في نظام الملفات المحلي. يمكنك تحميل مشاركات الملفات إلى أي مكان على نظامك. يتم تحميل المثال التالي أسفل المسار /media. يمكنك تغيير هذا إلى المسار المفضل لديك الذي تريده عن طريق تعديل المتغير $MNT_ROOT.

MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT

لتحميل مشاركة ملف Azure على Linux، استخدم اسم حساب التخزين كاسم مستخدم لمشاركة الملفات، ومفتاح حساب التخزين ككلمة مرور. نظرا لأن بيانات اعتماد حساب التخزين قد تتغير بمرور الوقت، يجب تخزين بيانات الاعتماد لحساب التخزين بشكل منفصل عن تكوين التحميل.

يوضح المثال التالي كيفية إنشاء ملف لتخزين بيانات الاعتماد. تذكّر استبدال <resource-group-name> و<storage-account-name> بالمعلومات المناسبة للبيئة الخاصة بك.

RESOURCE_GROUP_NAME="<resource-group-name>"
STORAGE_ACCOUNT_NAME="<storage-account-name>"

# Create a folder to store the credentials for this storage account and
# any other that you might set up.
CREDENTIAL_ROOT="/etc/smbcredentials"
sudo mkdir -p "/etc/smbcredentials"

# Get the storage account key for the indicated storage account.
# You must be logged in with az login and your user identity must have
# permissions to list the storage account keys for this command to work.
STORAGE_ACCOUNT_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --query "[0].value" --output tsv | tr -d '"')

# Create the credential file for this individual storage account
SMB_CREDENTIAL_FILE="$CREDENTIAL_ROOT/$STORAGE_ACCOUNT_NAME.cred"
if [ ! -f $SMB_CREDENTIAL_FILE ]; then
    echo "username=$STORAGE_ACCOUNT_NAME" | sudo tee $SMB_CREDENTIAL_FILE > /dev/null
    echo "password=$STORAGE_ACCOUNT_KEY" | sudo tee -a $SMB_CREDENTIAL_FILE > /dev/null
else
    echo "The credential file $SMB_CREDENTIAL_FILE already exists, and was not modified."
fi

# Change permissions on the credential file so only root can read or modify the password file.
sudo chmod 600 $SMB_CREDENTIAL_FILE

لتحميل مشاركة ملف تلقائيًا، يمكنك الاختيار بين استخدام تحميل ثابت عبر الأداة المساعدة /etc/fstab أو استخدام تحميل ديناميكي عبر الأداة المساعدة autofs.

التحميل الثابت من خلال /etc/fstab

باستخدام البيئة السابقة، قم بإنشاء مجلد لحساب التخزين/مشاركة الملفات ضمن مجلد التحميل. استبدل <file-share-name> بالاسم المناسب لمشاركة ملف Azure.

FILE_SHARE_NAME="<file-share-name>"

MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH

وأخيرًا، قم بإنشاء سجل في ملف /etc/fstab لمشاركة ملف Azure. في الأمر أدناه، يتم استخدام أذونات ملفات ومجلدات 0755 Linux الافتراضية، مما يعني القراءة والكتابة والتنفيذ للمالك (استنادًا إلى مالك الملف / الدليل على Linux)، والقراءة والتنفيذ للمستخدمين في مجموعة المالك، والقراءة والتنفيذ للآخرين على النظام. قد ترغب في تعيين أذونات بديلة uid و gid أو و file_modedir_mode على التحميل حسب الرغبة. لمزيد من المعلومات حول كيفية تعيين الأذونات، راجع رمز UNIX الرقمي. راجع خيارات التحميل للحصول على قائمة بخيارات تحميل SMB.

تلميح

إذا كنت تريد أن تتمكن حاويات Docker التي تشغل تطبيقات .NET Core من الكتابة إلى مشاركة ملف Azure، فقم بتضمين nobrl في خيارات تحميل SMB لتجنب إرسال طلبات تأمين نطاق البايت إلى الخادم.

HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})$FILE_SHARE_NAME

if [ -z "$(grep $SMB_PATH\ $MNT_PATH /etc/fstab)" ]; then
    echo "$SMB_PATH $MNT_PATH cifs _netdev,nofail,credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks" | sudo tee -a /etc/fstab > /dev/null
else
    echo "/etc/fstab was not modified to avoid conflicting entries as this Azure file share was already present. You might want to double check /etc/fstab to ensure the configuration is as desired."
fi

sudo mount -a

إشعار

بدءًا من الإصدار 5.0 من Linux kernel، يعد SMB 3.1.1 هو البروتوكول الافتراضي المتفاوض عليه. يمكنك تحديد إصدارات بروتوكول بديلة باستخدام خيار تحميل vers (إصدارات البروتوكول هي 3.1.1 و3.0 و2.1).

التحميل الديناميكي باستخدام autofs

لتحميل مشاركة ملف ديناميكيًا باستخدام الأداة المساعدة autofs، قم بتثبيتها باستخدام مدير الحزم على توزيع Linux الذي تختاره.

في توزيعات Ubuntu و Debian، استخدم مدير الحزمة apt :

sudo apt update
sudo apt install autofs

بعد ذلك، قم بتحديث ملفات تكوين autofs. راجع خيارات التحميل للحصول على قائمة بخيارات تحميل SMB.

FILE_SHARE_NAME="<file-share-name>"

HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-$(expr length $HTTP_ENDPOINT))$FILE_SHARE_NAME

echo "$FILE_SHARE_NAME -fstype=cifs,credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks :$SMB_PATH" > /etc/auto.fileshares

echo "/fileshares /etc/auto.fileshares --timeout=60" > /etc/auto.master

الخطوة الأخيرة هي إعادة تشغيل الخدمة autofs.

sudo systemctl restart autofs

خيارات التحميل

يمكنك استخدام خيارات التحميل التالية عند تحميل مشاركات ملفات SMB Azure على Linux.

خيار التحميل القيمة الموصى بها الوصف
username= Storage account name إلزامي لمصادقة NTLMv2.
password= المفتاح الأساسي لحساب التخزين إلزامي لمصادقة NTLMv2.
password2= مفتاح حساب التخزين الثانوي يوصى به في حالة عدم استدارة مفتاح التوقف عن العمل.
mfsymlinks غير متوفر الطريقة المستحسنة. يفرض التحميل لدعم الارتباطات الرمزية، ما يسمح للتطبيقات مثل git باستنساخ المستودعات باستخدام symlinks.
actimeo= 30-60 الطريقة المستحسنة. الوقت (بالثوان) الذي يقوم فيه عميل CIFS بالتخزين المؤقت لسمات ملف أو دليل قبل أن يطلب معلومات السمة من خادم. يمكن أن يؤدي استخدام قيمة أقل من 30 ثانية إلى تدهور الأداء لأن ذاكرة التخزين المؤقت للسمات للملفات والدلائل تنتهي صلاحيتها بسرعة كبيرة. نوصي بالإعداد actimeo بين 30 و60 ثانية.
nosharesock غير متوفر اختياري. يفرض على العميل دائما إجراء اتصال جديد بالخادم حتى إذا كان لديه اتصال موجود بتحميل SMB. يمكن أن يؤدي هذا إلى تحسين الأداء، حيث ستستخدم كل نقطة تحميل مأخذ توصيل TCP مختلف. في بعض الحالات، nosharesock يمكن أن يؤدي إلى تدهور الأداء بسبب عدم التخزين المؤقت للملف نفسه عند فتحه من مجموعتين من نفس العميل.
max_channels= 4 يوصى به عند استخدام SMB Multichannel. تحديد الحد الأقصى لعدد القنوات (اتصالات الشبكة) لمشاركة الملف. إذا كنت تستخدم SMB Multichannel وتجاوز عدد القنوات أربع قنوات، سيؤدي ذلك إلى ضعف الأداء.
remount غير متوفر إعادة تحميل مشاركة الملف وتغيير خيارات التحميل إذا تم تحديدها. استخدم مع password2 الخيار في الحالات التي تريد فيها تحديد كلمة مرور بديلة لإصلاح كلمة مرور منتهية الصلاحية بعد التحميل الأصلي.
nobrl غير متوفر يوصى به في سيناريوهات العميل الفردي عندما تكون التأمينات الاستشارية مطلوبة. لا تدعم Azure Files التأمينات الاستشارية، ويمنع هذا الإعداد إرسال طلبات تأمين نطاق البايت إلى الخادم.
snapshot= time تحميل لقطة محددة من مشاركة الملف. يجب أن يكون الوقت عددا صحيحا موجبا يحدد اللقطة المطلوبة (بوحدات 100 نانو ثانية انقضت منذ 1 يناير 1601، أو بدلا من ذلك يمكن تحديدها بتنسيق GMT على سبيل المثال @GMT-2024.03.27-20.52.19). .
closetimeo= 5 تكوين مهلة الإغلاق المؤجلة (معالجة ذاكرة التخزين المؤقت) بالثوان، أو تعطيلها عن طريق الإعداد إلى 0. الافتراضي هو 5 ثوان.
nostrictsync غير متوفر لا تطلب من الخادم مسح على fsync(). تقوم بعض الخوادم بإجراء عمليات كتابة غير مخزنة مؤقتا بشكل افتراضي، وفي هذه الحالة يكون المسح زائدا عن الحاجة. يمكن أن يحسن هذا الخيار أداء أحمال العمل حيث يقوم العميل بتنفيذ الكثير من مجموعات الكتابة + fsync الصغيرة وحيث يكون زمن انتقال الشبكة أعلى بكثير من زمن انتقال الخادم.
multiuser غير متوفر تعيين وصول المستخدم إلى بيانات الاعتماد الفردية عند الوصول إلى الخادم. بشكل افتراضي، تستخدم عمليات تحميل CIFS مجموعة واحدة فقط من بيانات اعتماد المستخدم (بيانات اعتماد التحميل) عند الوصول إلى مشاركة. باستخدام هذا الخيار، يقوم العميل بدلا من ذلك بإنشاء جلسة عمل جديدة مع الخادم باستخدام بيانات اعتماد المستخدم كلما وصول مستخدم جديد إلى التحميل. كما ستستخدم عمليات الوصول الإضافية من قبل هذا المستخدم بيانات الاعتماد هذه. نظرا لأن النواة لا يمكنها المطالبة بكلمات المرور، تقتصر عمليات التحميل متعددة المستخدم على عمليات التحميل باستخدام sec= الخيارات التي لا تتطلب كلمات مرور.
cifsacl غير متوفر يستخدم هذا الخيار لتعيين CIFS/NTFS ACLs من/إلى بتات أذونات Linux، وتعيين SIDs من/إلى UIDs وGIDs، والحصول على واصفات الأمان وتعيينها. مدعوم فقط لمصادقة NTLMv2.
idsfromsid,modefromsid غير متوفر يوصى به عندما يحتاج العميل إلى القيام بالتخويل المفروض من قبل العميل. تمكين أذونات نمط Unix. يعمل فقط عندما تكون UIDs/GIDs موحدة عبر جميع العملاء. مدعوم فقط لمصادقة NTLMv2.
sec= krb5 مطلوب لمصادقة Kerberos. لتمكين وضع أمان Kerberos، قم بتعيين sec=krb5. يجب حذف اسم المستخدم وكلمة المرور عند استخدام هذا الخيار. يجب أن يكون عميل Linux منضما إلى المجال. راجع تمكين مصادقة Active Directory عبر SMB لعملاء Linux.
uid= 0 اختياري. تعيين uid الذي سيمتلك جميع الملفات أو الدلائل على نظام الملفات المحملة عندما لا يوفر الخادم معلومات الملكية. يمكن تحديده إما على أنه اسم مستخدم أو uid رقمي. عند عدم التحديد، يكون الافتراضي هو 0.
gid= 0 اختياري. تعيين gid الذي سيمتلك جميع الملفات أو الدلائل على نظام الملفات المحملة عندما لا يوفر الخادم معلومات الملكية. يمكن تحديده إما على أنه اسم مجموعة أو دخيل رقمي. عند عدم التحديد، يكون الافتراضي هو 0.
file_mode= غير متوفر اختياري. إذا كان الخادم لا يدعم ملحقات CIFS Unix، فإن هذا يتجاوز وضع الملف الافتراضي.
dir_mode= غير متوفر اختياري. إذا كان الخادم لا يدعم ملحقات CIFS Unix، فإن هذا يتجاوز الوضع الافتراضي للدلائل.
handletimeout= غير متوفر اختياري. الوقت (بالمللي ثانية) الذي يجب على الخادم حجز مقبض الملف له بعد تجاوز الفشل في انتظار العميل لإعادة الاتصال.

الخطوات التالية

لمزيد من المعلومات حول استخدام مشاركات ملفات SMB Azure مع Linux، راجع: