Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Sdílené složky Azure je možné připojit v distribucích Linuxu pomocí klienta jádra SMB.
Tento článek ukazuje, jak připojit sdílenou složku Azure SMB pomocí ověřování NTLMv2 (klíč účtu úložiště). Použití ověřování založeného na identitě je upřednostňované z bezpečnostních důvodů. Viz Povolení ověřování Active Directory přes protokol SMB pro klienty s Linuxem, kteří přistupují ke službě Azure Files.
Platí pro
Model správy | Model fakturace | Mediální vrstva | Přebytečnost | Malé a střední podniky (MSP) | Síťový souborový systém (NFS) |
---|---|---|---|---|---|
Microsoft.Storage | Zprovozněno v2 | HDD (standard) | Místní (LRS) |
![]() |
![]() |
Microsoft.Storage | Zprovozněno v2 | HDD (standard) | Zóna (ZRS) |
![]() |
![]() |
Microsoft.Storage | Zprovozněno v2 | HDD (standard) | Geografie (GRS) |
![]() |
![]() |
Microsoft.Storage | Zprovozněno v2 | HDD (standard) | GeoZone (GZRS) |
![]() |
![]() |
Microsoft.Storage | Poskytnuto v1 | SSD (Premium) | Místní (LRS) |
![]() |
![]() |
Microsoft.Storage | Poskytnuto v1 | SSD (Premium) | Zóna (ZRS) |
![]() |
![]() |
Microsoft.Storage | Platba dle skutečné spotřeby | HDD (standard) | Místní (LRS) |
![]() |
![]() |
Microsoft.Storage | Platba dle skutečné spotřeby | HDD (standard) | Zóna (ZRS) |
![]() |
![]() |
Microsoft.Storage | Platba dle skutečné spotřeby | HDD (standard) | Geografie (GRS) |
![]() |
![]() |
Microsoft.Storage | Platba dle skutečné spotřeby | HDD (standard) | GeoZone (GZRS) |
![]() |
![]() |
Protokoly
Služba Azure Files ve výchozím nastavení vynucuje šifrování během přenosu. Šifrování SMB je k dispozici od protokolu SMB 3.0. Azure Files také podporuje protokol SMB 2.1, který nepodporuje šifrování SMB. Díky tomu služba Azure Files neumožňuje připojení sdílených složek pomocí protokolu SMB 2.1 z jiné oblasti Azure nebo místního prostředí bez další konfigurace sítě z bezpečnostních důvodů. Protokol SMB 3.1.1 byste měli použít, pokud vaše aplikace výslovně nevyžaduje starší verzi.
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+ | Š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, můžete pomocí příkazu zkontrolovat verzi jádra Linuxu uname
:
uname -r
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 firewall nebo ISP neblokují port TCP 445 směrem k klientskému počítači. 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 výstup podobný následujícímu.
Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
Pokud je ve vaší síti blokovaný port 445, můžete 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.
Oprávnění
Všechny připojovací skripty v tomto článku připojují sdílené složky 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
nebo dir_mode
a file_mode
oprávnění. Další informace o tom, jak nastavit oprávnění, naleznete v části symbolická notace Unix. Seznam možností připojení najdete v části Možnosti připojení.
Podpora oprávnění ve stylu Unixu
Pomocí řízení přístupu vynuceného klientem a přidáním parametrů připojení modefromsid,idsfromsid
do příkazu mount můžete také získat podporu oprávnění ve stylu Unixu pro sdílené soubory SMB Azure. Aby to fungovalo:
- Všichni klienti, kteří přistupují ke sdílené složce, se musí připojit pomocí
modefromsid,idsfromsid
- Identifikátory UID/GID musí být jednotné pro všechny klienty.
- Klienti musí používat jednu z následujících podporovaných distribucí Linuxu: Ubuntu 20.04+, SLES 15 SP3+
Připojte sdílenou složku Azure na vyžádání pomocí mount
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 cestu /media
. Můžete to změnit na upřednostňovanou cestu, kterou chcete změnit úpravou $MNT_ROOT
proměnné.
Nahraďte <resource-group-name>
, <storage-account-name>
a <file-share-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 připojit sdílenou složku pomocí příkazu mount
a souboru přihlašovacích údajů. V následujícím příkladu je příkaz $SMB_PATH
vyplněn 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 s využitím sdílené složky Azure, použijte sudo umount $mntPath
k jejímu odpojení.
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 cestu /media
. 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
Jako uživatelské jméno sdílené složky použijte název účtu úložiště 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
V předchozím prostředí vytvořte složku pro účet úložiště nebo sdílení souborů v rámci připojené složce. 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 vytvořte záznam v souboru /etc/fstab
pro vaši sdílenou složku Azure. 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í oprávnění uid
a gid
nebo dir_mode
a file_mode
při připojení. 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.
Doporučení
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í pomocí autofs
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žnosti 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ě, kdy je žádoucí obměna klíčů bez výpadků. |
mfsymlinks |
Není k dispozici | Doporučeno. 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čeno. Doba (v sekundách), kterou klient CIFS ukládá do mezipaměti atributů souboru nebo adresáře předtím, než požádá o informace o atributu ze serveru. 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í spojení k SMB přípojkám. To může zvýšit výkon, protože každý přípojný bod používá jiný soket TCP. V některých případech může nosharesock snížit výkon kvůli neukládání stejného souboru do mezipaměti, když je otevřen ze dvou bodů připojení ze stejného klienta. |
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. Použití funkce SMB Multichannel s více než čtyřmi kanály vede k nízkému výkonu. |
remount |
Není k dispozici | Pokud jsou uvedeny, znovu připojí sdílenou složku a změní nastavení 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čuje se ve scénářích s jedním klientem, když jsou vyžadovány informační zámky. Služba Azure Files nepodporuje poradní zámky a toto nastavení zabraňuje odesílání žádostí na server o uzamčení rozsahů bajtů. |
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í (mezipaměť úchytů) v sekundách nebo ho zakáže nastavením na 0. Výchozí hodnota je 5 sekund. |
nostrictsync |
Není k dispozici | Nežádejte server, aby provedl flush při fsync(). Některé servery ve výchozím nastavení provádějí nezapouzdřené zápisy, 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 také používají 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 pro 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. |
cruid= |
uid nebo uživatelské jméno | Nepovinné. Nastaví identifikátor uid vlastníka mezipaměti přihlašovacích údajů. To je primárně užitečné s sec=krb5 . Výchozí hodnotou je skutečný identifikátor procesu, který provádí připojení. Tento parametr doporučujeme nastavit na uid nebo uživatelské jméno uživatele, který má ve svém výchozím souboru mezipaměti přihlašovacích údajů potřebné lístky Kerberos. Tím se upcall přesměruje na vyhledání mezipaměti přihlašovacích údajů vlastněných tímto uživatelem. |
sec= |
krb5 | Vyžaduje se pro ověřování protokolem Kerberos. Chcete-li povolit režim zabezpečení protokolu Kerberos, nastavte sec=krb5 . Příklad: sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks . 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ý vlastní 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ý vlastní 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í Unix pro CIFS, přepíše se tím výchozí nastavení režimu souborů. |
dir_mode= |
Není k dispozici | Nepovinné. Pokud server nepodporuje rozšíření CIFS Unix, přepíše výchozí režim adresářů. |
handletimeout= |
Není k dispozici | Nepovinné. Doba (v milisekundách), po kterou by měl server rezervovat popisovač souboru po převzetí služeb při selhání, během čekání na opětovné připojení klienta. |
Další krok
Další informace o používání sdílených složek Azure SMB s Linuxem najdete tady: