Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le condivisioni file di Azure possono essere montate nelle distribuzioni Linux usando il client del kernel SMB.
Questo articolo illustra come montare una condivisione file di Azure SMB usando l'autenticazione NTLMv2 (chiave dell'account di archiviazione). L'uso dell'autenticazione basata su identità è preferibile per motivi di sicurezza. Vedere Abilitare l'autenticazione di Active Directory tramite SMB per i client Linux che accedono a File di Azure.
Si applica a
Modello di gestione | Modello di fatturazione | Livello supporti | Ridondanza | SMB | NFS |
---|---|---|---|---|---|
Microsoft.Storage | Con provisioning v2 | HDD (standard) | Locale | ![]() |
![]() |
Microsoft.Storage | Con provisioning v2 | HDD (standard) | Della zona | ![]() |
![]() |
Microsoft.Storage | Con provisioning v2 | HDD (standard) | Geografica | ![]() |
![]() |
Microsoft.Storage | Con provisioning v2 | HDD (standard) | GeoZone (GZRS) | ![]() |
![]() |
Microsoft.Storage | Con provisioning v1 | SSD (Premium) | Locale | ![]() |
![]() |
Microsoft.Storage | Con provisioning v1 | SSD (Premium) | Della zona | ![]() |
![]() |
Microsoft.Storage | Pagamento in base al consumo | HDD (standard) | Locale | ![]() |
![]() |
Microsoft.Storage | Pagamento in base al consumo | HDD (standard) | Della zona | ![]() |
![]() |
Microsoft.Storage | Pagamento in base al consumo | HDD (standard) | Geografica | ![]() |
![]() |
Microsoft.Storage | Pagamento in base al consumo | HDD (standard) | GeoZone (GZRS) | ![]() |
![]() |
Protocolli
Per impostazione predefinita, File di Azure applica la crittografia in transito. La crittografia SMB è disponibile a partire da SMB 3.0. File di Azure supporta anche SMB 2.1, che non supporta la crittografia SMB. Di conseguenza, per motivi di sicurezza, File di Azure non consente il montaggio di condivisioni file usando SMB 2.1 da un'altra area di Azure o in locale, senza configurazione di rete aggiuntiva. È consigliabile usare SMB 3.1.1, a meno che l'applicazione non richieda in modo specifico una versione precedente.
Distribuzione | SMB 3.1.1 (scelta consigliata) | SMB 3.0 |
---|---|---|
Versione del kernel Linux |
|
|
Ubuntu | Crittografia AES-128-GCM: 18.04.5 LTS+ | Crittografia AES-128-CCM: 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
7.5+ |
Debian | Basic: 10+ | Crittografia AES-128-GCM: 10+ |
SUSE Linux Enterprise Server | Crittografia AES-128-GCM: 15 SP2+ | Crittografia AES-128-CCM: 12 SP2+ |
Se la distribuzione di Linux non è elencata nella tabella, è possibile controllare la versione del kernel Linux con il uname
comando :
uname -r
Prerequisiti
- Verificare che il pacchetto cifs-utils sia installato. Installare la versione più recente del pacchetto cifs-utils usando la gestione pacchetti nella distribuzione Linux di propria scelta.
In Ubuntu e Debian usare il sistema di gestione pacchetti apt
:
sudo apt update
sudo apt install cifs-utils
In altre distribuzioni usare l'utilità di gestione dei pacchetti appropriata o compilare il codice sorgente.
La versione più recente dell'interfaccia della riga di comando di Azure. Per altre informazioni su come installare l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure e selezionare il sistema operativo in uso. Se si preferisce, è anche possibile usare il modulo Azure PowerShell in PowerShell 6+, ma le istruzioni riportate in questo articolo fanno riferimento all'interfaccia della riga di comando di Azure.
Assicurarsi che la porta 445 sia aperta: SMB comunica tramite la porta TCP 445. Verificare che il firewall o il provider di servizi internet non blocchi la porta TCP 445 del computer client. Sostituire
<your-resource-group>
e<your-storage-account>
, quindi eseguire lo script seguente: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
Se la connessione ha avuto esito positivo, verrà visualizzato un risultato simile all'output seguente:
Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
È possibile usare una connessione VPN o ExpressRoute se la porta 445 è bloccata nella rete. Per maggiori informazioni, consultare la sezione Considerazioni sulla rete per l'accesso diretto alla condivisione file di Azure.
Autorizzazioni
Tutti gli script di montaggio in questo articolo montano le condivisioni file usando le autorizzazioni predefinite per file e cartelle linux 0755. ovvero lettura, scrittura ed esecuzione per il proprietario di file/directory, lettura ed esecuzione per gli utenti del gruppo proprietario e lettura ed esecuzione per gli altri utenti. In base ai criteri di sicurezza dell'organizzazione, è possibile impostare autorizzazioni uid
/gid
alternative o dir_mode
e file_mode
nelle opzioni di montaggio. Per altre informazioni su come impostare le autorizzazioni, vedere Notazione simbolica Unix. Per un elenco delle opzioni di montaggio, vedere Opzioni di montaggio.
Supporto delle autorizzazioni in stile Unix
È anche possibile ottenere il supporto delle autorizzazioni in stile Unix per le condivisioni dei file di Azure SMB usando il controllo di accesso forzato dal client e aggiungendo le opzioni di montaggio modefromsid,idsfromsid
al comando di montaggio. Per consentire il funzionamento di questo metodo:
- Tutti i client che accedono alla condivisione devono essere montati utilizzando
modefromsid,idsfromsid
- Gli UID/GID devono essere uniformi in tutti i client
- I client devono eseguire una delle distribuzioni Linux supportate seguenti: Ubuntu 20.04+, SLES 15 SP3+
Montare la condivisione file di Azure su richiesta con il comando mount
Quando si monta una condivisione file in un sistema operativo Linux, la condivisione file remota viene rappresentata come una cartella nel file system locale. È possibile montare condivisioni file in qualsiasi punto del sistema. Nell'esempio seguente il montaggio avviene sotto il percorso /media
. È possibile passare al percorso preferito modificando la variabile $MNT_ROOT
.
Sostituire <resource-group-name>
, <storage-account-name>
e <file-share-name>
con le informazioni appropriate per l'ambiente:
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
Inizializzare quindi il file delle credenziali eseguendo lo script seguente.
# 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
È ora possibile montare la condivisione file con il mount
comando usando il file delle credenziali. Nell'esempio seguente il comando $SMB_PATH
viene popolato usando il nome di dominio completo per l'endpoint file dell'account di archiviazione. Per un elenco delle opzioni di montaggio SMB, vedere Opzioni di montaggio.
Nota
A partire dal kernel Linux versione 5.0, SMB 3.1.1 è il protocollo negoziato predefinito. Se si usa una versione del kernel Linux precedente alla 5.0, specificare vers=3.1.1
nell'elenco delle opzioni di montaggio.
# 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
È anche possibile montare la stessa condivisione file di Azure in più punti di montaggio, se necessario.
Dopo aver usato la condivisione file di Azure, è possibile usare sudo umount $mntPath
per smontarla.
Montare automaticamente le condivisioni di file
Quando si monta una condivisione file in un sistema operativo Linux, la condivisione file remota viene rappresentata come una cartella nel file system locale. È possibile montare condivisioni file in qualsiasi punto del sistema. Nell'esempio seguente il montaggio viene eseguito nel percorso /media
. È possibile passare al percorso preferito modificando la variabile $MNT_ROOT
.
MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT
Usare il nome dell'account di archiviazione come nome utente della condivisione file e la chiave dell'account di archiviazione come password. Poiché le credenziali dell'account di archiviazione potrebbero cambiare nel tempo, è necessario archiviare le credenziali per l'account di archiviazione separatamente dalla configurazione di montaggio.
Nell'esempio seguente viene illustrato come creare un file per archiviare le credenziali. Ricordare di sostituire <resource-group-name>
e <storage-account-name>
con le informazioni appropriate per l'ambiente.
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
Per montare automaticamente una condivisione file, è possibile scegliere tra l'uso di un montaggio statico tramite l'utilità /etc/fstab
o l'uso di un montaggio dinamico tramite l'utilità autofs
.
Montaggio statico con /etc/fstab
Usando l'ambiente precedente, creare una cartella per l'account di archiviazione o la condivisione file nella cartella di montaggio. Sostituire <file-share-name>
con il nome appropriato della condivisione file di Azure.
FILE_SHARE_NAME="<file-share-name>"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH
Infine, creare un record nel file /etc/fstab
per la condivisione file di Azure. Nel comando seguente vengono usate le autorizzazioni predefinite per file e cartelle Linux 0755, ovvero lettura, scrittura ed esecuzione per il proprietario (in base al proprietario di file/directory Linux), lettura ed esecuzione per gli utenti nel gruppo proprietario e lettura ed esecuzione per altri utenti del sistema. È possibile impostare autorizzazioni uid
e gid
o dir_mode
e file_mode
alternative per il montaggio in base alle esigenze. Per altre informazioni su come impostare le autorizzazioni, vedere Notazione numerica UNIX. Per un elenco delle opzioni di montaggio SMB, vedere Opzioni di montaggio.
Suggerimento
Se si vuole che i contenitori Docker che eseguono applicazioni .NET Core possano scrivere nella condivisione file di Azure, includere nobrl nelle opzioni di montaggio SMB per evitare l'invio di richieste di blocco dell'intervallo di byte al 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
Nota
A partire dal kernel Linux versione 5.0, SMB 3.1.1 è il protocollo negoziato predefinito. È possibile specificare versioni di protocollo alternative usando l'opzione di montaggio vers
(le versioni del protocollo sono 3.1.1
, 3.0
e 2.1
).
Eseguire il montaggio dinamico con autofs
Per montare dinamicamente una condivisione file con l'utilità autofs
, installarla usando la gestione pacchetti nella distribuzione Linux di propria scelta.
Nelle distribuzioni basate su Ubuntu e Debian usare il sistema di gestione pacchetti apt
:
sudo apt update
sudo apt install autofs
Aggiornare quindi i file di configurazione autofs
. Per un elenco delle opzioni di montaggio SMB, vedere Opzioni di montaggio.
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
Il passaggio finale consiste nel riavvio del servizio autofs
.
sudo systemctl restart autofs
Opzioni di montaggio
È possibile usare le opzioni di montaggio seguenti durante il montaggio di condivisioni file di Azure SMB in Linux.
Opzione di montaggio | Valore consigliato | Descrizione |
---|---|---|
username= |
Nome dell'account di archiviazione | Obbligatorio per l'autenticazione NTLMv2. |
password= |
Chiave primaria dell'account di archiviazione | Obbligatorio per l'autenticazione NTLMv2. |
password2= |
Chiave secondaria dell'account di archiviazione | Consigliato nel caso in cui si desideri una rotazione delle chiavi senza tempi di inattività. |
mfsymlinks |
non applicabile | Consigliato. Obbliga il montaggio a supportare i collegamenti simbolici, permettendo ad applicazioni come Git di clonare repository con collegamenti simbolici. |
actimeo= |
30-60 | Consigliato. Tempo in secondi in cui il client CIFS memorizza nella cache gli attributi di un file o di una directory prima che richieda informazioni sugli attributi da un server. L'uso di un valore inferiore a 30 secondi può causare una riduzione delle prestazioni perché le cache degli attributi per i file e le directory scadono troppo rapidamente. È consigliabile impostare actimeo tra 30 e 60 secondi. |
nosharesock |
n/d | Facoltativo. Forza il client a stabilire sempre una nuova connessione al server anche se dispone di una connessione esistente al montaggio SMB. Ciò può migliorare le prestazioni, poiché ogni punto di montaggio usa un socket TCP diverso. In alcuni casi, nosharesock può ridurre le prestazioni a causa della mancata memorizzazione nella cache dello stesso file quando viene aperto da due punti di montaggio dallo stesso client. |
max_channels= |
4 | Consigliato quando si usa SMB multicanale. Specifica il numero massimo di canali (connessioni di rete) alla condivisione file. L'uso di SMB multicanale con più di quattro canali comporta prestazioni scarse. |
remount |
n/d | Rimonta la condivisione file e modifica le opzioni di montaggio se queste sono specificate. Usare con l'opzione password2 nei casi in cui si vuole specificare una password alternativa per correggere una password scaduta dopo il montaggio originale. |
nobrl |
n/d | Consigliato in scenari a client singolo quando sono necessari blocchi di avviso. I File di Azure non supportano i blocchi consultivi, e questa impostazione impedisce l'invio di richieste di blocco dell'intervallo di byte al server. |
snapshot= |
time | Montare uno snapshot specifico della condivisione file. L'ora deve essere un numero intero positivo che identifica lo snapshot richiesto (in unità di 100 nanosecondi trascorsi dal 1° gennaio 1601 oppure in alternativa può essere specificato in formato GMT, ad esempio @GMT-2024.03.27-20.52.19). |
closetimeo= |
5 | Configura il timeout di chiusura posticipato (handle cache) in secondi o lo disabilita impostando su 0. Il valore predefinito è 5 secondi. |
nostrictsync |
n/d | Non chiedere al server di sincronizzare i dati con fsync(). Alcuni server eseguono scritture non memorizzate nel buffer per impostazione predefinita, nel qual caso lo scaricamento è ridondante. Questa opzione può migliorare le prestazioni per i carichi di lavoro in cui un client esegue numerose combinazioni di scrittura e fsync di piccole dimensioni e la latenza di rete è molto superiore alla latenza del server. |
multiuser |
n/d | Mappa gli accessi degli utenti alle singole credenziali quando si accede al server. Per impostazione predefinita, i montaggi CIFS usano solo un singolo set di credenziali utente (le credenziali di montaggio) quando accedono a una condivisione. Con questa opzione, il client crea invece una nuova sessione con il server usando le credenziali dell'utente ogni volta che un nuovo utente accede al montaggio. Altri accessi da parte dell'utente usano anche tali credenziali. Poiché il kernel non può richiedere password, i montaggi multiutente sono limitati ai montaggi usando sec= opzioni che non richiedono password. |
cifsacl |
n/d | Questa opzione viene utilizzata per mappare gli ACL CIFS/NTFS sui/da bit di autorizzazione Linux, mappare gli SID sui/da UID e GID e ottenere e impostare i descrittori di sicurezza. Supportato solo per l'autenticazione NTLMv2. |
idsfromsid,modefromsid |
n/d | Consigliato quando il client deve eseguire l'autorizzazione applicata dal client. Abilita le autorizzazioni di tipo Unix. Funziona solo quando gli UID/GID sono uniformi in tutti i client. Supportato solo per l'autenticazione NTLMv2. |
sec= |
krb5 | Obbligatorio per l'autenticazione Kerberos. Per abilitare la modalità di sicurezza Kerberos, impostare sec=krb5 . Quando si usa questa opzione, è necessario omettere nome utente e password. Il client Linux deve essere aggiunto a un dominio. Vedere Abilitare l'autenticazione di Active Directory tramite SMB per i client Linux. |
uid= |
0 | Facoltativo. Imposta l'uid proprietario di tutti i file o le directory nel file system montato quando il server non fornisce informazioni sulla proprietà. Può essere specificato come nome utente o come uid numerico. Se non specificato, il valore predefinito è 0. |
gid= |
0 | Facoltativo. Imposta il gid proprietario di tutti i file o le directory nel file system montato quando il server non fornisce informazioni sulla proprietà. Può essere specificato come nomegruppo o gid numerico. Se non specificato, il valore predefinito è 0. |
file_mode= |
n/d | Facoltativo. Se il server non supporta le estensioni CIFS Unix, viene ignorata la modalità file predefinita. |
dir_mode= |
n/d | Facoltativo. Se il server non supporta le estensioni CIFS Unix, viene ignorata la modalità predefinita per le directory. |
handletimeout= |
n/d | Facoltativo. Tempo in millisecondi per il quale il server deve riservare l'handle di file dopo un failover in attesa della riconnessione del client. |
Passaggio successivo
Per altre informazioni sull'uso di condivisioni file di Azure SMB con Linux, vedere: