Monter des partages de fichiers SMB Azure sur des clients Linux
Les partages de fichiers Azure peuvent être montés dans des distributions Linux à l’aide du client SMB en mode noyau.
La méthode recommandée pour monter un partage de fichiers Azure sur Linux est d’utiliser SMB 3.1.1. Par défaut, Azure Files exige un chiffrement en transit, que SMB 3.0+ prend en charge. Azure Files prend aussi en charge SMB 2.1, qui ne prend pas en charge le chiffrement en transit, mais des impératifs de sécurité peuvent vous interdire de monter des partages de fichiers Azure avec SMB 2.1 à partir d’une autre région Azure ou de votre environnement local. À moins que votre application nécessite spécifiquement SMB 2.1, utilisez SMB 3.1.1. La prise en charge de SMB 2.1 a été ajoutée au noyau Linux version 3.7. Par conséquent, si vous utilisez une version du noyau Linux après la version 3.7, elle doit prendre en charge SMB 2.1.
Distribution | SMB 3.1.1 (recommandé) | SMB 3.0 |
---|---|---|
Version de noyau Linux |
|
|
Ubuntu | Chiffrement AES-128-GCM : 18.04.5 LTS+ | Chiffrement AES-128-CCM : 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
7.5+ |
Debian | De base : 10+ | Chiffrement AES-128-CCM : 10+ |
SUSE Linux Enterprise Server | Chiffrement AES-128-GCM : 15 SP2+ | Chiffrement AES-128-CCM : 12 SP2+ |
Si votre distribution Linux n’est pas indiquée dans le tableau ci-dessus, vous pouvez vérifier la version du noyau Linux à l’aide de la commande uname
:
uname -r
Remarque
Tous les scripts de montage de cet article montent des partages de fichiers SMB à l’aide des autorisations de fichier et de dossier Linux 0755 par défaut. Cela signifie que la lecture, l’écriture et l’exécution pour le propriétaire du fichier/répertoire, lisent et exécutent pour les utilisateurs du groupe propriétaire, et lisent et exécutent pour d’autres utilisateurs. Selon les stratégies de sécurité de votre organisation, vous pouvez définir d’autres autorisations uid
/gid
ou dir_mode
et file_mode
dans les options de montage. Pour plus d’informations sur la façon de définir les autorisations, consultez la notation numérique UNIX. Consultez Options de montage pour obtenir la liste des options de montage.
S’applique à
Type de partage de fichiers | SMB | NFS |
---|---|---|
Partages de fichiers Standard (GPv2), LRS/ZRS | ||
Partages de fichiers Standard (GPv2), GRS/GZRS | ||
Partages de fichiers Premium (FileStorage), LRS/ZRS |
Prérequis
- Vérifiez que le package cifs-utils est installé. Installez la version la plus récente du package cifs-utils en utilisant le gestionnaire de package sur la distribution Linux de votre choix.
Sur Ubuntu et Debian, utilisez le gestionnaire de packages apt
:
sudo apt update
sudo apt install cifs-utils
Sur les autres distributions, utilisez le gestionnaire de packages approprié ou effectuez une compilation à partir de la source.
La dernière version de l’interface de ligne de commande Azure (CLI). Pour plus d'informations sur l'installation d’Azure CLI, consultez Installer l’interface de ligne de commande Microsoft Azure et sélectionnez votre système d’exploitation. Si vous préférez utiliser le module Azure PowerShell dans PowerShell 6+, rien ne vous en empêche. Sachez cependant que les instructions de cet article s’appliquent à Azure CLI.
Vérifiez que le port 445 est ouvert : SMB communique sur le port TCP 445. Vérifiez que votre pare-feu ou fournisseur de services Internet ne bloque pas le port TCP 445 de la machine cliente. Remplacez
<your-resource-group>
et<your-storage-account>
, puis exécutez le script suivant :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
Si la connexion a été établie, vous devez obtenir une sortie semblable à la suivante :
Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
Si vous ne parvenez pas à ouvrir le port 445 sur votre réseau d’entreprise ou que vous n’y êtes pas autorisé par un fournisseur de services Internet, vous pouvez utiliser une connexion VPN ou ExpressRoute pour contourner le port 445. Pour plus d’informations, consultez Considérations relatives à la mise en réseau pour un accès direct à un partage de fichiers Azure.
Montage du partage de fichiers Azure à la demande avec mount
Lorsque vous montez un partage de fichiers sur un système d’exploitation Linux, votre partage de fichiers distant est représenté sous la forme d’un dossier dans votre système de fichiers local. Vous pouvez monter des partages de fichiers sur n’importe quel emplacement de votre système. L’exemple suivant monte sous le chemin d’accès /media
. Vous pouvez remplacer cela par le chemin d’accès par défaut que vous souhaitez en modifiant la variable $MNT_ROOT
.
Remplacez <resource-group-name>
, <storage-account-name>
et <file-share-name>
par les informations correspondant à votre environnement :
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
Ensuite, initialisez le fichier d’informations d’identification en exécutant le script suivant.
# 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
Vous pouvez maintenant monter le partage de fichiers avec la commande mount
en utilisant le fichier d’informations d’identification. Dans l’exemple suivant, la commande $SMB_PATH
est remplie à l’aide du nom de domaine complet du point de terminaison de fichier du compte de stockage. Consultez Options de montage pour obtenir la liste des options de montage SMB.
Notes
À partir de la version 5.0 du noyau Linux, SMB 3.1.1 est le protocole négocié par défaut. Si vous utilisez une version du noyau Linux antérieure à 5.0, spécifiez vers=3.1.1
dans la liste d’options de montage.
# 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
Vous pouvez également monter le même partage de fichiers Azure sur plusieurs points de montage, si vous le souhaitez.
Quand vous avez terminé d’utiliser le partage de fichiers Azure, utilisez sudo umount $mntPath
pour démonter le partage.
Monter automatiquement les partages de fichiers
Lorsque vous montez un partage de fichiers sur un système d’exploitation Linux, votre partage de fichiers distant est représenté sous la forme d’un dossier dans votre système de fichiers local. Vous pouvez monter des partages de fichiers sur n’importe quel emplacement de votre système. L’exemple suivant monte sous le chemin d’accès /media
. Vous pouvez remplacer cela par le chemin d’accès par défaut que vous souhaitez en modifiant la variable $MNT_ROOT
.
MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT
Pour monter un partage de fichiers Azure sur Linux, utilisez le nom du compte de stockage comme nom d’utilisateur du partage de fichiers et la clé du compte de stockage comme mot de passe. Puisque les informations d’identification du compte de stockage peuvent changer au fil du temps, vous devez stocker les informations d’identification du compte de stockage séparément de la configuration de montage.
L’exemple suivant montre comment créer un fichier pour stocker les informations d’identification. N’oubliez pas de remplacer <resource-group-name>
et <storage-account-name>
par les informations correspondant à votre environnement.
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
Pour monter automatiquement un partage de fichiers, vous avez le choix entre l’utilisation d’un montage statique via l’utilitaire /etc/fstab
ou l’utilisation d’un montage dynamique via l’utilitaire autofs
.
Montage statique avec /etc/fstab
À l’aide de l’environnement précédent, créez un dossier pour votre compte de stockage/partage de fichiers dans votre dossier de montage. Remplacez <file-share-name>
par le nom approprié de votre partage de fichiers Azure.
FILE_SHARE_NAME="<file-share-name>"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH
Enfin, créez un enregistrement dans le fichier /etc/fstab
de votre partage de fichiers Azure. Dans la commande ci-dessous, le fichier Linux 0755 et les autorisations de dossier par défaut sont utilisés, ce qui signifie lecture, écriture et exécution pour le propriétaire (en fonction du propriétaire Linux des fichiers/répertoires), lecture et exécution pour les utilisateurs du groupe propriétaire, et lecture et exécution pour les autres utilisateurs du système. Vous pouvez définir d’autres autorisations uid
et gid
ou dir_mode
et file_mode
sur le montage comme vous le souhaitez. Pour plus d’informations sur la façon de définir les autorisations, consultez la notation numérique UNIX. Consultez Options de montage pour obtenir la liste des options de montage SMB.
Conseil
Si vous souhaitez que les conteneurs Docker exécutant des applications .NET Core puissent écrire dans le partage de fichiers Azure, incluez nobrl dans les options de montage SMB pour éviter d’envoyer des demandes de verrouillage de plage d’octets au serveur.
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
Notes
À partir de la version 5.0 du noyau Linux, SMB 3.1.1 est le protocole négocié par défaut. Vous pouvez spécifier d’autres versions de protocole à l’aide de l’option de montage vers
(les versions de protocole sont 3.1.1
, 3.0
et 2.1
).
Montage dynamique avec autofs
Pour monter un partage de fichiers de manière dynamique avec l’utilitaire autofs
, installez-le à l’aide du gestionnaire de package sur la distribution Linux de votre choix.
Sur les distributions Ubuntu et Debian, utilisez le gestionnaire de packages apt
:
sudo apt update
sudo apt install autofs
Ensuite, mettez à jour les fichiers de configuration autofs
. Consultez Options de montage pour obtenir la liste des options de montage 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
La dernière étape consiste à redémarrer le service autofs
.
sudo systemctl restart autofs
Options de montage
Vous pouvez utiliser les options de montage suivantes lors du montage de partages de fichiers Azure SMB sur Linux.
Option de montage | Valeur recommandée | Description |
---|---|---|
username= |
Nom du compte de stockage | Obligatoire pour l’authentification NTLMv2. |
password= |
Clé principale du compte de stockage | Obligatoire pour l’authentification NTLMv2. |
password2= |
Clé secondaire du compte de stockage | Recommandé dans le cas où la rotation des clés sans temps d’arrêt est souhaitable. |
mfsymlinks |
n/a | Recommandé. Force le montage à prendre en charge les liens symboliques, ce qui permet aux applications comme git de cloner des référentiels avec des liens symboliques. |
actimeo= |
30-60 | Recommandé. La spécification de actimeo définit tous les paramètres acregmin , acregmax , acdirmin et acdirmax sur la même valeur. L’utilisation d’une valeur inférieure à 30 secondes peut entraîner une dégradation du niveau de performance, car les caches d’attributs des fichiers et des répertoires expirent trop rapidement. Nous vous recommandons de définir actimeo entre 30 et 60 secondes. |
nosharesock |
n/a | facultatif. Force le client à toujours établir une nouvelle connexion au serveur même s’il dispose d’une connexion existante au montage SMB. Cela peut améliorer les performances, car chaque point de montage utilise un socket TCP différent. Dans certains cas, nosharesock peut dégrader les performances en raison de la non-mise en cache du même fichier quand il est ouvert sur deux montages depuis le même client. |
max_channels= |
4 | Recommandé lors de l’utilisation de SMB Multichannel. Spécifie le nombre maximal de canaux (connexions réseau) vers le partage de fichiers. Si vous utilisez SMB Multichannel et que le nombre de canaux est supérieur à 4, ceci va entraîner une dégradation des performances. |
remount |
n/a | Remonte le partage de fichiers et change les options de montage si elles sont spécifiées. Utilisez l’option password2 dans les cas où vous voulez spécifier un mot de passe alternatif pour corriger un mot de passe expiré après le montage d’origine. |
nobrl |
n/a | Recommandé dans les scénarios avec un seul client quand des verrous conseillés sont requis. Azure Files ne prend pas en charge les verrous conseillés, et ce paramètre empêche l’envoi au serveur de demandes de verrou de plage d’octets. |
snapshot= |
time | Monter un instantané spécifique du partage de fichiers. La date/heure doit être un entier positif identifiant l’instantané demandé (spécifié en unités de 100 nanosecondes écoulées depuis le 1er janvier 1601, ou spécifié au format GMT, par exemple @GMT-2024.03.27-20.52.19)). |
closetimeo= |
5 | Configure le délai d’expiration de fermeture différée (cache des descripteurs) en secondes ou le désactive s’il est défini sur 0. La valeur par défaut est de 5 secondes. |
nostrictsync |
n/a | Ne pas demander pas au serveur d’effectuer un vidage sur fsync(). Certains serveurs effectuent par défaut des écritures non mises en mémoire tampon, auquel cas le vidage est redondant. Cette option peut améliorer les performances des charges de travail où un client effectue un grand nombre de petites combinaisons d’opérations écrire (write) + fsync, et où la latence réseau est beaucoup plus élevée que la latence du serveur. |
multiuser |
n/a | Mapper les accès utilisateur à des informations d’identification individuelles lors de l’accès au serveur. Par défaut, les montages CIFS n’utilisent qu’un seul ensemble d’informations d’identification utilisateur (les informations d’identification du montage) lors de l’accès à un partage. Avec cette option, au lieu de cela, le client crée une nouvelle session avec le serveur en utilisant les informations d’identification de l’utilisateur chaque fois qu’un nouvel utilisateur accède au montage. Les accès ultérieurs effectués par cet utilisateur vont également utiliser ces informations d’identification. Comme le noyau ne peut pas demander de mots de passe, les montages multi-utilisateurs sont limités aux montages utilisant des options sec= qui ne nécessitent pas de mots de passe. |
cifsacl |
n/a | Cette option est utilisée pour mapper des listes de contrôle d’accès CIFS/NTFS vers/depuis des bits d’autorisation Linux, mapper des SID vers/depuis des UID et des GID, et obtenir et définir des descripteurs de sécurité. Pris en charge seulement pour l’authentification NTLMv2. |
idsfromsid,modefromsid |
n/a | Recommandé quand le client doit effectuer une autorisation appliquée par le client. Active les autorisations de style UNIX. Fonctionne seulement quand les UID/GID sont uniformes sur tous les clients. Pris en charge seulement pour l’authentification NTLMv2. |
sec= |
krb5 | Obligatoire pour l’authentification Kerberos. Pour activer le mode de sécurité Kerberos, définissez sec=krb5 . Vous devez omettre le nom d’utilisateur et le mot de passe quand vous utilisez cette option. Le client Linux doit être joint à un domaine. Consultez Activer l’authentification Active Directory sur SMB pour des clients Linux. |
uid= |
0 | facultatif. Définit l’UID qui est propriétaire de tous les fichiers ou répertoires sur le système de fichiers monté quand le serveur ne fournit pas d’informations de propriété. Il peut être spécifié sous la forme d’un nom d’utilisateur ou d’un UID numérique. S’il n’est pas spécifié, la valeur par défaut est 0. |
gid= |
0 | facultatif. Définit le GID qui est propriétaire de tous les fichiers ou répertoires sur le système de fichiers monté quand le serveur ne fournit pas d’informations de propriété. Il peut être spécifié sous la forme d’un nom de groupe ou d’un GID numérique. S’il n’est pas spécifié, la valeur par défaut est 0. |
file_mode= |
n/a | facultatif. Si le serveur ne prend pas en charge les extensions Unix CIFS, ceci remplace le mode de fichier par défaut. |
dir_mode= |
n/a | facultatif. Si le serveur ne prend pas en charge les extensions Unix CIFS, ceci remplace le mode par défaut pour les répertoires. |
handletimeout= |
n/a | facultatif. La durée (en millisecondes) pendant laquelle le serveur doit réserver le descripteur de fichier après un basculement en attendant que le client se reconnecte. |
Étapes suivantes
Pour plus d’informations sur l’utilisation de partages de fichiers Azure SMB avec Linux, consultez :