Aracılığıyla paylaş


Linux istemcilerine SMB Azure dosya paylaşımlarını bağlama

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. Linux çekirdek sürümü 3.7'ye SMB 2.1 desteği eklendi, bu nedenle Linux çekirdeğinin 3.7 sürümünden sonraki bir sürümünü kullanıyorsanız SMB 2.1'i desteklemelidir.

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

Bu makaledeki tüm bağlama betikleri, varsayılan 0755 Linux dosya ve klasör izinlerini kullanarak SMB dosya paylaşımlarını bağlar. Bu, dosya/dizin sahibi için okuma, yazma ve yürütme, sahip grubundaki kullanıcılar için okuma ve yürütme ve diğer kullanıcılar için okuma ve yürütme anlamına gelir. Kuruluşunuzun güvenlik ilkelerine bağlı olarak, bağlama seçeneklerinde alternatif uid/gid veya dir_mode ve file_mode izinleri ayarlamak isteyebilirsiniz. İzinleri ayarlama hakkında daha fazla bilgi için bkz . UNIX sayısal gösterimi.

Ş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. Seçtiğiniz Linux dağıtımında paket yöneticisini kullanarak cifs-utils paketini yükleyin.

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, aşağıdaki betiği çalıştırarak kimlik bilgisi dosyasını başlatın.

# 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

Artık kimlik bilgisi dosyasını kullanarak komutunu kullanarak mount dosya paylaşımını bağlayabilirsiniz. Aşağıdaki örnekte, komut depolama $SMB_PATH hesabının dosya uç noktası için tam etki alanı adı kullanılarak 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 credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks

İ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/fstab autofs 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 . 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,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

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,serverino,nosharesock,actimeo=30,mfsymlinks :$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

Sonraki adımlar

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