Připojení sdílených složek Azure SMB v klientech Linuxu
Sdílené složky Azure je možné připojit v distribucích Linuxu pomocí klienta jádra SMB.
Doporučeným způsobem připojení sdílené složky Azure v Linuxu je použít protokol SMB 3.1.1. Služba Azure Files ve výchozím nastavení vyžaduje šifrování během přenosu, které podporuje protokol SMB 3.0 nebo novější. Služba Azure Files také podporuje protokol SMB 2.1, který nepodporuje šifrování během přenosu, ale z bezpečnostních důvodů nemůžete připojit sdílené složky Azure s protokolem SMB 2.1 z jiné oblasti Azure nebo místně. Pokud vaše aplikace výslovně nevyžaduje protokol SMB 2.1, použijte protokol SMB 3.1.1. Podpora protokolu SMB 2.1 byla přidána do jádra Linuxu verze 3.7, takže pokud používáte verzi jádra Linuxu po verzi 3.7, měla by podporovat protokol SMB 2.1.
Distribuce | SMB 3.1.1 (doporučeno) | SMB 3.0 |
---|---|---|
Verze jádra Linuxu |
|
|
Ubuntu | Šifrování AES-128-GCM: 18.04.5 LTS nebo novější | Šifrování AES-128-CCM: 16.04.4 LTS nebo novější |
Red Hat Enterprise Linux (RHEL) |
|
7.5 nebo novější |
Debian | Základní: 10 nebo novější | Šifrování AES-128-CCM: 10 nebo novější |
SUSE Linux Enterprise Server | Šifrování AES-128-GCM: 15 SP2 nebo novější | Šifrování AES-128-CCM: 12 SP2 nebo novější |
Pokud vaše distribuce Linuxu není uvedená v tabulce výše, můžete verzi jádra Linuxu zjistit pomocí příkazu uname
:
uname -r
Poznámka:
Všechny připojovací skripty v tomto článku připojí sdílené složky SMB pomocí výchozích oprávnění k souborům a složkám Linuxu 0755. To znamená čtení, zápis a spouštění pro vlastníka souboru nebo adresáře, čtení a spouštění pro uživatele ve skupině vlastníka a čtení a spouštění pro ostatní uživatele. V závislosti na zásadách zabezpečení vaší organizace můžete chtít v možnostech připojení nastavit alternativní uid
/gid
nastavení nebo dir_mode
oprávnění.file_mode
Další informace o tom, jak nastavit oprávnění, naleznete v tématu číselný zápis systému UNIX.
Platí pro
Typ sdílené složky | SMB | NFS |
---|---|---|
Sdílené složky úrovně Standard (GPv2), LRS/ZRS | ||
Sdílené složky úrovně Standard (GPv2), GRS/GZRS | ||
Sdílené složky úrovně Premium (FileStorage), LRS/ZRS |
Požadavky
- Ujistěte se, že je nainstalovaný balíček cifs-utils. Nainstalujte balíček cifs-utils pomocí správce balíčků v distribuci Linuxu podle vašeho výběru.
V Ubuntu a Debianu apt
použijte správce balíčků:
sudo apt update
sudo apt install cifs-utils
V jiných distribucích použijte odpovídajícího správce balíčků nebo zkompilujte ze zdroje.
Nejnovější verze rozhraní příkazového řádku Azure (CLI). Další informace o tom, jak nainstalovat Azure CLI, najdete v tématu Instalace Azure CLI a výběr operačního systému. Pokud dáváte přednost použití modulu Azure PowerShellu v PowerShellu 6 nebo novějším, můžete; pokyny v tomto článku jsou však určené pro Azure CLI.
Ujistěte se, že je otevřený port 445: Protokol SMB komunikuje přes port TCP 445 – ujistěte se, že brána firewall nebo isP neblokují port TCP 445 z klientského počítače. Nahraďte
<your-resource-group>
a<your-storage-account>
spusťte následující skript: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
Pokud bylo připojení úspěšné, měl by se zobrazit podobný následujícímu výstupu:
Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
Pokud v podnikové síti nemůžete otevřít port 445 nebo ho neblokuje isP, můžete k práci s portem 445 použít připojení VPN nebo ExpressRoute. Další informace najdete v tématu Důležité informace o sítích pro přímý přístup ke sdílené složce Azure.
Připojení sdílené složky Azure na vyžádání s připojením
Když připojíte sdílenou složku v operačním systému Linux, bude vzdálená sdílená složka reprezentována jako složka v místním systému souborů. Sdílené složky můžete připojit k libovolnému umístění v systému. Následující příklad připojí pod /media
cestu. Můžete to změnit na upřednostňovanou cestu, kterou chcete změnit úpravou $MNT_ROOT
proměnné.
Nahraďte a <storage-account-name>
<file-share-name>
nahraďte <resource-group-name>
odpovídajícími informacemi pro vaše prostředí:
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
Potom inicializujete soubor přihlašovacích údajů spuštěním následujícího skriptu.
# 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
Teď můžete sdílenou mount
složku připojit pomocí příkazu pomocí souboru přihlašovacích údajů. V následujícím příkladu $SMB_PATH
se příkaz vyplní pomocí plně kvalifikovaného názvu domény pro koncový bod souboru účtu úložiště.
Poznámka:
Od jádra Linuxu verze 5.0 je výchozí vyjednaný protokol SMB 3.1.1. Pokud používáte verzi jádra Linuxu starší než 5.0, zadejte vers=3.1.1
v seznamu možností připojení.
# 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
V případě potřeby můžete také připojit stejnou sdílenou složku Azure k více přípojným bodům. Až budete hotovi se sdílenou složkou Azure, použijte sudo umount $mntPath
ji k odpojení sdílené složky.
Automatické připojení sdílených složek
Když připojíte sdílenou složku v operačním systému Linux, bude vzdálená sdílená složka reprezentována jako složka v místním systému souborů. Sdílené složky můžete připojit k libovolnému umístění v systému. Následující příklad připojí pod /media
cestu. Můžete to změnit na upřednostňovanou cestu, kterou chcete změnit úpravou $MNT_ROOT
proměnné.
MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT
Pokud chcete připojit sdílenou složku Azure v Linuxu, použijte název účtu úložiště jako uživatelské jméno sdílené složky a klíč účtu úložiště jako heslo. Vzhledem k tomu, že se přihlašovací údaje účtu úložiště můžou v průběhu času měnit, měli byste přihlašovací údaje pro účet úložiště uložit odděleně od konfigurace připojení.
Následující příklad ukazuje, jak vytvořit soubor pro uložení přihlašovacích údajů. Nezapomeňte nahradit <resource-group-name>
a <storage-account-name>
nahradit odpovídajícími informacemi pro vaše prostředí.
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
Pokud chcete sdílenou složku automaticky připojit, máte možnost mezi použitím statického připojení přes /etc/fstab
nástroj nebo pomocí dynamického připojení přes autofs
nástroj.
Statické připojení pomocí /etc/fstab
Ve starším prostředí vytvořte složku pro účet úložiště nebo sdílenou složku v rámci připojené složky. Nahraďte <file-share-name>
odpovídajícím názvem sdílené složky Azure.
FILE_SHARE_NAME="<file-share-name>"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH
Nakonec v souboru pro sdílenou složku Azure vytvořte záznam /etc/fstab
. V následujícím příkazu se používají výchozí oprávnění k souborům a složce Linuxu 0755, což znamená čtení, zápis a spouštění pro vlastníka (na základě vlastníka souboru nebo adresáře Linux), čtení a spouštění pro uživatele ve skupině vlastníka a čtení a spouštění pro ostatní uživatele v systému. Podle potřeby můžete chtít nastavit alternativní uid
připojení nebo dir_mode
gid
oprávnění.file_mode
Další informace o tom, jak nastavit oprávnění, naleznete v tématu číselný zápis systému UNIX.
Tip
Pokud chcete, aby kontejnery Dockeru, na kterých běží aplikace .NET Core, mohly zapisovat do sdílené složky Azure, zahrňte do možností připojení SMB nobrl , aby se zabránilo odesílání požadavků na uzamčení rozsahu bajtů na server.
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
Poznámka:
Od jádra Linuxu verze 5.0 je výchozí vyjednaný protokol SMB 3.1.1. Alternativní verze protokolu můžete zadat pomocí vers
možnosti připojení (verze protokolu jsou 3.1.1
, 3.0
a 2.1
).
Dynamické připojení s automatickými soubory
Pokud chcete dynamicky připojit sdílenou složku s autofs
nástrojem, nainstalujte ji pomocí správce balíčků do distribuce Linuxu podle vašeho výběru.
V distribucích Ubuntu a Debian použijte apt
správce balíčků:
sudo apt update
sudo apt install autofs
Dále aktualizujte autofs
konfigurační soubory.
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
Posledním krokem je restartování autofs
služby.
sudo systemctl restart autofs
Další kroky
Další informace o službě Soubory Azure najdete na těchto odkazech: