Linux‘ta SMB Azure dosya paylaşımını bağlama

Dikkat

Bu makalede, Kullanım Süresi Sonu (EOL) durumuna yakın bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Lütfen kullanımınızı göz önünde bulundurun ve uygun şekilde planlayın. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu. Azure Dosyaları, Windows'un kolay kullanılan bulut dosya sistemidir. Azure dosya paylaşımları, SMB çekirdek istemcisikullanılarak Linux dağıtımları ile bağlanabilir.

Bir Azure dosya paylaşımını Linux’a bağlamanın önerilen yolu SMB 3.1.1 kullanmaktır. Varsayılan olarak Azure Dosyaları, SMB 3.0+ tarafından desteklenen geçiş sırasında şifreleme gerektirir. Azure Dosyalar, aktarım sırasında şifrelemeyi desteklemeyen SMB 2.1'i de destekler, ancak güvenlik nedeniyle başka bir Azure bölgesinden veya şirket içinden SMB 2.1 ile Azure dosya paylaşımlarını bağlayamazsınız. Uygulamanız özellikle SMB 2.1 gerektirmiyorsa, SMB 3.1.1 kullanın.

Dağıtım SMB 3.1.1 (Önerilen) SMB 3.0
Linux çekirdek sürümü
  • Temel 3.1.1 desteği: 4.17
  • Varsayılan bağlama: 5.0
  • AES-128-GCM şifrelemesi: 5.3
  • AES-256-GCM şifrelemesi: 5.10
  • Temel 3.0 desteği: 3.12
  • AES-128-CCM şifrelemesi: 4.11
Ubuntu AES-128-GCM şifrelemesi: 18.04.5 LTS + AES-128-CCM şifrelemesi: 16.04.4 LTS+
Red Hat Enterprise Linux (RHEL)
  • Temel: 8.0+
  • Varsayılan bağlama: 8.2 +
  • AES-128-GCM şifrelemesi: 8.2+
7.5+
Debian Temel: 10+ AES-128-CCM şifrelemesi: 10+
SUSE Linux Enterprise Server AES-128-GCM şifrelemesi: 15 SP2+ AES-128-CCM şifrelemesi: 12 SP2+

Linux dağıtımı yukarıdaki tabloda listelenmiyorsa, Linux çekirdek sürümünü uname komutu ile kontrol edebilirsiniz:

uname -r

Not

Linux çekirdeği 3.7 sürümüne SMB 2.1 desteği eklendi. Linux çekirdeğinin 3.7 sürümünden sonraki bir sürümünü kullanıyorsanız SMB 2.1'i desteklemelidir.

Şunlara uygulanır

Dosya paylaşımı türü SMB NFS
Standart dosya paylaşımları (GPv2), LRS/ZRS Yes Hayır
Standart dosya paylaşımları (GPv2), GRS/GZRS Yes Hayır
Premium dosya paylaşımları (filestorage), LRS/ZRS Yes Hayır

Önkoşullar

  • cifs-utils paketinin yüklendiğinden emin olun. Cifs-utils paketi, seçtiğiniz Linux dağıtımında paket yöneticisi kullanılarak yüklenebilir.

Ubuntu ve Debian'da paket yöneticisini apt kullanın:

sudo apt update
sudo apt install cifs-utils

Diğer dağıtımlarda uygun paket yöneticisini kullanın veya kaynaktan derleyin.

  • Azure Komut Satırı Arabirimi'nin (CLI) en son sürümü. Azure CLI'yı yükleme hakkında daha fazla bilgi için bkz . Azure CLI'yi yükleme ve işletim sisteminizi seçme. Azure PowerShell modülünü PowerShell 6+'da kullanmayı tercih ederseniz; ancak, bu makaledeki yönergeler Azure CLI'ye yönelik olarak verilmiştır.

  • Bağlantı noktası 445'in açık olduğundan emin olun: SMB, TCP bağlantı noktası 445 üzerinden iletişim kurar. Güvenlik duvarınızın veya ISS'nizin istemci makineden 445 numaralı TCP bağlantı noktasını engellemediğinden emin olun. öğesini değiştirin <your-resource-group> ve <your-storage-account> ardından aşağıdaki betiği çalıştırın:

    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
    

    Bağlantı başarılı olursa aşağıdaki çıkışa benzer bir şey görmeniz gerekir:

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

    Şirket ağınızda 445 numaralı bağlantı noktasını açamıyorsanız veya bir ISS tarafından bunu yapmanız engelleniyorsa, 445 numaralı bağlantı noktasıyla çalışmak için VPN bağlantısı veya ExpressRoute kullanabilirsiniz. Daha fazla bilgi için bkz. Doğrudan Azure dosya paylaşımı erişimi için ağ konusunda dikkat edilmesi gerekenler.

İsteğe bağlı Azure dosya paylaşımını bağlama ile bağlama

Linux işletim sistemine dosya paylaşımı bağladığınızda, uzak dosya paylaşımınız yerel dosya sisteminizde bir klasör olarak temsil edilir. Dosya paylaşımlarını sisteminizdeki herhangi bir yere bağlayabilirsiniz. Aşağıdaki örnek, yolun altına /media bağlar. Değişkenini değiştirerek bunu tercih ettiğiniz yol olarak $MNT_ROOT değiştirebilirsiniz.

, <storage-account-name>ve <file-share-name> öğesini ortamınız için uygun bilgilerle değiştirin<resource-group-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

Ardından komutunu kullanarak dosya paylaşımını mount bağlayın. Aşağıdaki örnekte, komut depolama $SMB_PATH hesabının dosya uç noktası için tam etki alanı adı kullanılarak doldurulur ve $STORAGE_ACCOUNT_KEY depolama hesabı anahtarıyla doldurulur.

Not

Linux çekirdek sürümü 5.0'dan başlayarak SMB 3.1.1, varsayılan olarak anlaşmaya varılan protokoldür. Linux çekirdeğinin 5.0'dan eski bir sürümünü kullanıyorsanız bağlama seçenekleri listesinde belirtin 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 username=$STORAGE_ACCOUNT_NAME,password=$STORAGE_ACCOUNT_KEY,serverino,nosharesock,actimeo=30,mfsymlinks

İzinleri ayarlamak için veya ve komutunun bağlama seçeneklerinde mount kullanabilirsinizgid/uid.file_modedir_mode İzinleri ayarlama hakkında daha fazla bilgi için bkz . UNIX sayısal gösterimi.

İsterseniz aynı Azure dosya paylaşımını birden çok bağlama noktasına da bağlayabilirsiniz. Azure dosya paylaşımını kullanmayı bitirdiğinizde, paylaşımın bağlantısını açmak için kullanın sudo umount $mntPath .

Dosya paylaşımlarını otomatik olarak bağlama

Linux işletim sistemine dosya paylaşımı bağladığınızda, uzak dosya paylaşımınız yerel dosya sisteminizde bir klasör olarak temsil edilir. Dosya paylaşımlarını sisteminizdeki herhangi bir yere bağlayabilirsiniz. Aşağıdaki örnek, yolun altına /media bağlar. Değişkenini değiştirerek bunu tercih ettiğiniz yol olarak $MNT_ROOT değiştirebilirsiniz.

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

Linux'ta bir Azure dosya paylaşımını bağlamak için dosya paylaşımının kullanıcı adı olarak depolama hesabı adını ve parola olarak depolama hesabı anahtarını kullanın. Depolama hesabı kimlik bilgileri zaman içinde değişebileceğinden, depolama hesabının kimlik bilgilerini bağlama yapılandırmasından ayrı olarak depolamanız gerekir.

Aşağıdaki örnekte, kimlik bilgilerini depolamak için bir dosyanın nasıl oluşturulacağı gösterilmektedir. ve <storage-account-name> değerini ortamınız için uygun bilgilerle değiştirmeyi <resource-group-name> unutmayın.

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

Bir dosya paylaşımını otomatik olarak bağlamak için, yardımcı program aracılığıyla statik bağlama veya yardımcı program aracılığıyla /etc/fstabautofs dinamik bağlama kullanma arasında bir seçeneğiniz vardır.

/etc/fstab ile statik bağlama

Önceki ortamı kullanarak, bağlama klasörünüz altında depolama hesabınız/dosya paylaşımınız için bir klasör oluşturun. değerini Azure dosya paylaşımınızın uygun adıyla değiştirin <file-share-name> .

FILE_SHARE_NAME="<file-share-name>"

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

Son olarak, Azure dosya paylaşımınız için dosyada /etc/fstab bir kayıt oluşturun. Aşağıdaki komutta, varsayılan 0755 Linux dosya ve klasör izinleri kullanılır. Bu, sahip için okuma, yazma ve yürütme (dosya/dizin Linux sahibi temelinde), sahip grubundaki kullanıcılar için okuma ve yürütme ve sistemdeki diğer kullanıcılar için okuma ve yürütme anlamına gelir. Alternatif ve gid veya dir_mode ve file_mode bağlama izinlerini istediğiniz gibi ayarlamak uid isteyebilirsiniz. İzinleri ayarlama hakkında daha fazla bilgi için bkz . Wikipedia'da UNIX sayısal gösterimi .

İpucu

.NET Core uygulamalarını çalıştıran Docker kapsayıcılarının Azure dosya paylaşımına yazabilmesini istiyorsanız, sunucuya bayt aralığı kilit istekleri göndermemek için SMB bağlama seçeneklerine nobrl ekleyin.

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" | 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 may want to double check /etc/fstab to ensure the configuration is as desired."
fi

sudo mount -a

Not

Linux çekirdek sürümü 5.0'dan başlayarak SMB 3.1.1, varsayılan olarak anlaşmaya varılan protokoldür. Bağlama seçeneğini kullanarak vers alternatif protokol sürümleri belirtebilirsiniz (protokol sürümleri , 3.0ve 2.1' dır3.1.1).

Autofs ile dinamik olarak bağlama

Bir dosya paylaşımını autofs yardımcı programıyla dinamik olarak bağlamak için, seçtiğiniz Linux dağıtımında paket yöneticisini kullanarak yükleyin.

Ubuntu ve Debian dağıtımlarında paket yöneticisini apt kullanın:

sudo apt update
sudo apt install autofs

Ardından yapılandırma dosyalarını güncelleştirin autofs .

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 :$SMB_PATH" > /etc/auto.fileshares

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

Son adım hizmeti yeniden başlatmaktır autofs .

sudo systemctl restart autofs

Dosya paylaşımı anlık görüntüsünü bağlama

SMB Azure dosya paylaşımının belirli bir anlık görüntüsünü bağlamak istiyorsanız, komutun mount bir parçası olarak seçeneğini sağlamanız snapshot gerekir; burada snapshot belirli bir anlık görüntünün gibi @GMT-2023.01.05-00.08.20bir biçimde oluşturulduğu saattir. Seçenek snapshot , Sürüm 4.19'dan bu yana Linux çekirdeğinde desteklenmektedir.

Dosya paylaşımı anlık görüntüsünü oluşturduktan sonra bu yönergeleri izleyerek bağlayın.

  1. Azure portalında, anlık görüntüsünü bağlamak istediğiniz dosya paylaşımını içeren depolama hesabına gidin.

  2. Veri depolama > Dosya paylaşımları'nı ve ardından dosya paylaşımını seçin.

  3. İşlem > Anlık Görüntüleri'ni seçin ve bağlamak istediğiniz anlık görüntünün adını not alın. Anlık görüntü adı, aşağıdaki ekran görüntüsünde olduğu gibi bir GMT zaman damgası olacaktır.

    Azure portalında dosya paylaşımı anlık görüntü adını ve zaman damgasını bulmayı gösteren ekran görüntüsü.

  4. Zaman damgasını komutu tarafından mount beklenen biçime dönüştürün; bu, @GMT-year.month.day-hour.minutes.seconds şeklindedir. Bu örnekte, 2023-01-05T00:08:20.0000000Z'yi @GMT-2023.01.05-00.08.20'ye dönüştürebilirsiniz.

  5. mount Değeri belirtmek snapshot için GMT süresini kullanarak komutunu çalıştırın. , <file-share-name>ve GMT zaman damgasını değerlerinizle değiştirmeyi <storage-account-name>unutmayın. .cred dosyası, paylaşımı bağlamak için kullanılacak kimlik bilgilerini içerir (bkz. Dosya paylaşımlarını otomatik olarak bağlama).

    sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<file-share-name> /media/<file-share-name>/snapshot1 -o credentials=/etc/smbcredentials/snapshottestlinux.cred,snapshot=@GMT-2023.01.05-00.08.20
    
  6. yolunun /media/<file-share-name>/snapshot1altındaki anlık görüntüye göz atabiliyorsanız bağlama başarılı oldu.

Bağlama başarısız olursa bkz. Azure Dosyalar bağlantı ve erişim sorunlarını giderme (SMB).

Sonraki adımlar

Azure Dosyaları hakkında daha fazla bilgi edinmek için şu bağlantılara göz atın: