Sdílet prostřednictvím


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
  • Základní podpora 3.1.1: 4.17
  • Výchozí připojení: 5.0
  • Šifrování AES-128-GCM: 5.3
  • Šifrování AES-256-GCM: 5.10
  • Základní podpora 3.0: 3.12
  • Šifrování AES-128-CCM: 4.11
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)
  • Základní: 8.0 nebo novější
  • Výchozí připojení: 8.2 nebo novější
  • Šifrování AES-128-GCM: 8.2 nebo novější
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. Seznam možností připojení najdete v části Možnosti připojení.

Platí pro

Typ sdílené složky SMB NFS
Sdílené složky úrovně Standard (GPv2), LRS/ZRS Yes No
Sdílené složky úrovně Standard (GPv2), GRS/GZRS Yes No
Sdílené složky úrovně Premium (FileStorage), LRS/ZRS Yes No

Požadavky

  • Ujistěte se, že je nainstalovaný balíček cifs-utils. Nainstalujte nejnovější verzi balíčku 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 složku připojit pomocí mount 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ě. Seznam možností připojení SMB najdete v části Možnosti připojení protokolu SMB.

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. Seznam možností připojení SMB najdete v části Možnosti připojení protokolu SMB.

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.0a 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. Seznam možností připojení SMB najdete v části Možnosti připojení protokolu 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

Posledním krokem je restartování autofs služby.

sudo systemctl restart autofs

Možnosti připojení

Při připojování sdílených složek Azure SMB v Linuxu můžete použít následující možnosti připojení.

Možnost připojení Doporučená hodnota Popis
username= Název účtu úložiště Povinné pro ověřování NTLMv2.
password= Primární klíč účtu úložiště Povinné pro ověřování NTLMv2.
password2= Sekundární klíč účtu úložiště Doporučuje se v případě, že není žádoucí obměně klíčů bez výpadků.
mfsymlinks Není k dispozici Doporučený způsob: Přinutí připojení podporovat symbolické odkazy, což umožňuje aplikacím, jako je Git, klonovat úložiště pomocí symlinků.
actimeo= 30-60 Doporučený způsob: Určení actimeo všech hodnot acregmin, , acregmaxacdirmina acdirmax na stejnou hodnotu. Použití hodnoty nižší než 30 sekund může způsobit snížení výkonu, protože mezipaměti atributů pro soubory a adresáře vyprší příliš rychle. Doporučujeme nastavit actimeo 30 až 60 sekund.
nosharesock Není k dispozici Nepovinné. Vynutí, aby klient vždy vytvořil nové připojení k serveru, i když má existující připojení k připojení SMB. To může zvýšit výkon, protože každý přípojný bod bude používat jiný soket TCP. V některých případech může dojít ke snížení výkonu kvůli tomu, nosharesock že při otevření ze dvou připojení ze stejného klienta neuložíte stejný soubor do mezipaměti.
max_channels= 4 Doporučuje se při použití smb Multichannel. Určuje maximální počet kanálů (síťových připojení) ke sdílené složce. Pokud používáte SMB Multichannel a počet kanálů překračuje čtyři, bude to mít za následek nízký výkon.
remount Není k dispozici Při zadání znovu připojí sdílenou složku a změní možnosti připojení. password2 Tuto možnost použijte v případech, kdy chcete zadat alternativní heslo k opravě hesla s vypršenou platností po původním připojení.
nobrl Není k dispozici Doporučení se doporučuje ve scénářích s jedním klientem, pokud jsou vyžadovány zámky poradce. Služba Azure Files nepodporuje zámky poradce a toto nastavení brání odesílání žádostí o uzamčení rozsahu bajtů na server.
snapshot= čas Připojte konkrétní snímek sdílené složky. Čas musí být kladné celé číslo identifikující požadovaný snímek (v 100 nanosekundových jednotkách, které uplynuly od 1. ledna 1601, nebo případně je možné ho zadat ve formátu GMT, například @GMT-2024.03.27-20.52.19).
closetimeo= 5 Nakonfiguruje odložený časový limit ukončení (zpracování mezipaměti) v sekundách nebo ho zakáže nastavením na 0. Výchozí hodnota je 5 sekund.
nostrictsync Není k dispozici Nepožádejte serveru, aby vyprázdnil fsync(). Některé servery ve výchozím nastavení provádějí neprázdné zápisy do vyrovnávací paměti, v takovém případě je vyprazdňování redundantní. Tato možnost může zvýšit výkon úloh, kdy klient provádí velké množství malých kombinací zápisu + fsync a kde latence sítě je mnohem vyšší než latence serveru.
multiuser Není k dispozici Mapování přístupu uživatelů k jednotlivým přihlašovacím údajům při přístupu k serveru Připojení CIFS ve výchozím nastavení používají při přístupu ke sdílené složce jenom jednu sadu přihlašovacích údajů uživatele (přihlašovací údaje pro připojení). S touto možností místo toho klient vytvoří novou relaci se serverem pomocí přihlašovacích údajů uživatele, kdykoli k připojení přistupuje nový uživatel. Tyto přihlašovací údaje budou používat i další přístupy tohoto uživatele. Vzhledem k tomu, že jádro nemůže zobrazit výzvu k zadání hesel, připojení s více uživateli jsou omezená na připojení pomocí sec= možností, které nevyžadují hesla.
cifsacl Není k dispozici Tato možnost se používá k mapování seznamů ACL CIFS/NTFS do a z linuxových bitů oprávnění, mapování IDENTIFIKÁTORů SID na/z identifikátorů UID a IDENTIFIKÁTORů GID a získání a nastavení popisovačů zabezpečení. Podporuje se pouze pro ověřování NTLMv2.
idsfromsid,modefromsid Není k dispozici Doporučuje se, když klient potřebuje provést autorizaci vynucenou klientem. Povolí oprávnění ve stylu Unixu. Funguje jenom v případech, kdy jsou identifikátory UID/GID jednotné pro všechny klienty. Podporuje se pouze pro ověřování NTLMv2.
sec= krb5 Vyžaduje se pro ověřování protokolem Kerberos. Chcete-li povolit režim zabezpečení protokolu Kerberos, nastavte sec=krb5. Při použití této možnosti musíte vynechat uživatelské jméno a heslo. Klient Linuxu musí být připojený k doméně. Viz Povolení ověřování Active Directory přes protokol SMB pro klienty s Linuxem.
uid= 0 Nepovinné. Nastaví identifikátor uid, který bude vlastnit všechny soubory nebo adresáře v připojeném systému souborů, pokud server neposkytuje informace o vlastnictví. Dá se zadat jako uživatelské jméno nebo číselné uid. Pokud není zadáno, výchozí hodnota je 0.
gid= 0 Nepovinné. Nastaví gid, který bude vlastnit všechny soubory nebo adresáře v připojeném systému souborů, když server neposkytuje informace o vlastnictví. Dá se zadat jako název skupiny nebo číselný gid. Pokud není zadáno, výchozí hodnota je 0.
file_mode= Není k dispozici Nepovinné. Pokud server nepodporuje rozšíření CIFS Unix, přepíše se výchozí režim souborů.
dir_mode= Není k dispozici Nepovinné. Pokud server nepodporuje rozšíření CIFS Unix, přepíše se výchozí režim adresářů.
handletimeout= Není k dispozici Nepovinné. Doba (v milisekundách), pro kterou by měl server rezervovat popisovač souboru po převzetí služeb při selhání čekající na opětovné připojení klienta.

Další kroky

Další informace o používání sdílených složek Azure SMB s Linuxem najdete tady: