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.
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 le package cifs-utils à l’aide du 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 à l’aide de la commande mount
à l’aide du 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.
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.
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
.
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
Étapes suivantes
Consultez ces liens pour en savoir plus sur Azure Files :