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ü |
|
|
Ubuntu | AES-128-GCM şifrelemesi: 18.04.5 LTS + | AES-128-CCM şifrelemesi: 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
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 | ||
Standart dosya paylaşımları (GPv2), GRS/GZRS | ||
Premium dosya paylaşımları (filestorage), LRS/ZRS |
Ö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.0
ve 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: