Uso de Azure Files con LinuxUse Azure Files with Linux

Azure Files es el sencillo sistema de archivos en la nube de Microsoft.Azure Files is Microsoft's easy to use cloud file system. Los recursos compartidos de archivos de Azure se pueden montar en distribuciones de Linux mediante el cliente kernel de SMB.Azure file shares can be mounted in Linux distributions using the SMB kernel client. En este artículo se muestran dos maneras de montar un recurso compartido de archivos de Azure: a petición, con el comando mount y al inicio, mediante la creación de una entrada en /etc/fstab.This article shows two ways to mount an Azure file share: on-demand with the mount command and on-boot by creating an entry in /etc/fstab.

El método recomendado para montar un recurso compartido de archivos de Azure en Linux es usar SMB 3.0.The recommended way to mount an Azure file share on Linux is using SMB 3.0. De forma predeterminada, Azure Files requiere cifrado en tránsito, que solo es compatible con SMB 3.0.By default, Azure Files requires encryption in transit, which is only supported by SMB 3.0. Azure Files también admite SMB 2.1, que no admite el cifrado en tránsito, pero no puede montar recursos compartidos de archivos de Azure con SMB 2.1 desde otra región de Azure o de forma local por motivos de seguridad.Azure Files also supports SMB 2.1, which does not support encryption in transit, but you may not mount Azure file shares with SMB 2.1 from another Azure region or on-premises for security reasons. A menos que la aplicación requiera específicamente SMB 2.1, hay pocas razones para usarlo, ya que las distribuciones de Linux más populares publicadas recientemente admiten SMB 3.0:Unless your application specifically requires SMB 2.1, there is little reason to use it since most popular, recently released Linux distributions support SMB 3.0:

Distribución de LinuxLinux distribution SMB 2.1SMB 2.1
(Puede montar en máquinas virtuales dentro de la misma región de Azure)(Mounts on VMs within same Azure region)
SMB 3.0SMB 3.0
(Puede montar desde el nivel local a entre regiones)(Mounts from on premises and cross-region)
UbuntuUbuntu 14.04+14.04+ 16.04 (o posterior)16.04+
Red Hat Enterprise Linux (RHEL)Red Hat Enterprise Linux (RHEL) 7 (o posterior)7+ 7.5 (o posterior)7.5+
CentOSCentOS 7 (o posterior)7+ 7.5 (o posterior)7.5+
DebianDebian 8 (o posterior)8+ 10+10+
openSUSEopenSUSE 13.2 (o posterior)13.2+ 42.3+42.3+
SUSE Linux Enterprise ServerSUSE Linux Enterprise Server 12+12+ 12 SP2+12 SP2+

Si usa una distribución de Linux que no aparece en la tabla anterior, puede comprobar si la distribución de Linux admite SMB 3.0 con cifrado comprobando la versión de kernel de Linux.If you're using a Linux distribution not listed in the above table, you can check to see if your Linux distribution supports SMB 3.0 with encryption by checking the Linux kernel version. SMB 3.0 con cifrado se ha agregado a la versión 4.11 de kernel de Linux.SMB 3.0 with encryption was added to Linux kernel version 4.11. El comando uname devolverá la versión de kernel de Linux en uso:The uname command will return the version of the Linux kernel in use:

uname -r

PrerrequisitosPrerequisites

  • Asegúrese de que el paquete cifs-utils está instalado.Ensure the cifs-utils package is installed.
    El paquete cifs-utils se puede instalar con el administrador de paquetes en la distribución de Linux de su elección.The cifs-utils package can be installed using the package manager on the Linux distribution of your choice.

    En distribuciones de Ubuntu y Debian, use el administrador de paquetes apt:On Ubuntu and Debian-based distributions, use the apt package manager:

    sudo apt update
    sudo apt install cifs-utils
    

    En Fedora, Red Hat Enterprise Linux 8 +, y CentOS 8 +, use el administrador de paquetes dnf:On Fedora, Red Hat Enterprise Linux 8+, and CentOS 8 +, use the dnf package manager:

    sudo dnf install cifs-utils
    

    En las versiones anteriores de Red Hat Enterprise Linux y CentOS, use el administrador de paquetes yum:On older versions of Red Hat Enterprise Linux and CentOS, use the yum package manager:

    sudo yum install cifs-utils 
    

    En openSUSE, use el administrador de paquetes zypper:On openSUSE, use the zypper package manager:

    sudo zypper install cifs-utils
    

    En otras distribuciones, use el administrador de paquetes apropiado o compile desde el origenOn other distributions, use the appropriate package manager or compile from source

  • La versión más reciente de la interfaz de la línea de comandos (CLI).The most recent version of the Azure Command Line Interface (CLI). Para más información sobre cómo instalar la CLI de Azure, consulte Instalación de la CLI de Azure y seleccione el sistema operativo.For more information on how to install the Azure CLI, see Install the Azure CLI and select your operating system. Si prefiere usar el módulo de Azure PowerShell en PowerShell 6+, puede hacerlo. Sin embargo, las instrucciones siguientes son para la CLI de Azure.If you prefer to use the Azure PowerShell module in PowerShell 6+, you may, however the instructions below are presented for the Azure CLI.

  • Asegurarse de que el puerto 445 está abierto: SMB se comunica a través del puerto TCP 445, así que compruebe que el firewall no bloquea el puerto TCP 445 en la máquina cliente.Ensure port 445 is open: SMB communicates over TCP port 445 - check to see if your firewall is not blocking TCP ports 445 from client machine. Reemplace <your-resource-group> y <your-storage-account> y luego ejecute el siguiente script:Replace <your-resource-group> and <your-storage-account> then run the following script:

    resourceGroupName="<your-resource-group>"
    storageAccountName="<your-storage-account>"
    
    # This command assumes you have logged in with az login
    httpEndpoint=$(az storage account show \
        --resource-group $resourceGroupName \
        --name $storageAccountName \
        --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))
    fileHost=$(echo $smbPath | tr -d "/")
    
    nc -zvw3 $fileHost 445
    

    Si la conexión se realizó correctamente, verá algo parecido a la siguiente salida:If the connection was successful, you should see something similar to the following output:

    Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
    

    Si no puede abrir el puerto 445 en su red corporativa o si un ISP le impide hacerlo, puede utilizar una conexión VPN o ExpressRoute para solucionar el puerto 445.If you are unable to open up port 445 on your corporate network or are blocked from doing so by an ISP, you may use a VPN connection or ExpressRoute to work around port 445. Para más información, consulte Consideraciones de red para el acceso directo a los recursos compartidos de archivos de Azure.For more information, see Networking considerations for direct Azure file share access..

Montando el recurso compartido de archivos de AzureMounting Azure file share

Para usar un recurso compartido de archivos de Azure con la distribución de Linux, debe crear un directorio para que sirva como punto de montaje para el recurso compartido de archivos de Azure.To use an Azure file share with your Linux distribution, you must create a directory to serve as the mount point for the Azure file share. El punto de montaje se puede crear en cualquier parte del sistema de Linux, pero es habitual crearlo en /mount.A mount point can be created anywhere on your Linux system, but it's common convention to create this under /mount. Después del punto de montaje, use el comando mount para tener acceso al recurso compartido de archivos de Azure.After the mount point, you use the mount command to access the Azure file share.

Si lo desea, puede montar el mismo recurso compartido de archivos de Azure en varios puntos de montaje.You can mount the same Azure file share to multiple mount points if desired.

Montaje del recurso compartido de archivos de Azure a petición con mountMount the Azure file share on-demand with mount

  1. Cree una carpeta para un punto de montaje: Reemplace <your-resource-group>, <your-storage-account> y <your-file-share> por la información correcta para su entorno:Create a folder for the mount point: Replace <your-resource-group>, <your-storage-account>, and <your-file-share> with the appropriate information for your environment:

    resourceGroupName="<your-resource-group>"
    storageAccountName="<your-storage-account>"
    fileShareName="<your-file-share>"
    
    mntPath="/mount/$storageAccountName/$fileShareName"
    
    sudo mkdir -p $mntPath
    
  2. Use el comando siguiente para montar el recurso compartido de archivos de Azure.Use the mount command to mount the Azure file share. En el ejemplo siguiente, el valor predeterminado de los permisos de archivo y carpeta de Linux es 0755, que significa lectura, escritura y ejecución para el propietario (según el propietario de Linux de archivo o directorio), lectura y ejecución para los usuarios en el grupo de propietarios y lectura y ejecución para otros en el sistema.In the example below, the local Linux file and folder permissions default 0755, which means read, write, and execute for the owner (based on the file/directory Linux owner), read and execute for users in owner group, and read and execute for others on the system. Puede usar las opciones de montaje uid y gid para establecer el identificador de usuario y el identificador de grupo para el montaje.You can use the uid and gid mount options to set the user ID and group ID for the mount. También puede usar dir_mode y file_mode para establecer permisos personalizados según sea necesario.You can also use dir_mode and file_mode to set custom permissions as desired. Para obtener más información sobre cómo establecer permisos, consulte notación numérica de UNIX en Wikipedia.For more information on how to set permissions, see UNIX numeric notation on Wikipedia.

    # This command assumes you have logged in with az login
    httpEndpoint=$(az storage account show \
        --resource-group $resourceGroupName \
        --name $storageAccountName \
        --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName
    
    storageAccountKey=$(az storage account keys list \
        --resource-group $resourceGroupName \
        --account-name $storageAccountName \
        --query "[0].value" | tr -d '"')
    
    sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino
    

    Nota

    El comando de montaje anterior se monta con SMB 3.0.The above mount command mounts with SMB 3.0. Si la distribución de Linux no admite SMB 3.0 con cifrado o si solo admite SMB 2.1, solo puede montar desde una máquina virtual de Azure dentro de la misma región que la cuenta de almacenamiento.If your Linux distribution does not support SMB 3.0 with encryption or if it only supports SMB 2.1, you may only mount from an Azure VM within the same region as the storage account. Para montar el recurso compartido de archivos de Azure en una distribución de Linux que no admita SMB 3.0 con cifrado, necesitará deshabilitar el cifrado en tránsito para la cuenta de almacenamiento.To mount your Azure file share on a Linux distribution that does not support SMB 3.0 with encryption, you will need to disable encryption in transit for the storage account.

Cuando haya terminado de usar el recurso compartido de archivos de Azure, puede usar sudo umount $mntPath para desmontarlo.When you are done using the Azure file share, you may use sudo umount $mntPath to unmount the share.

Creación de un punto de montaje persistente para el recurso compartido de archivos de Azure con /etc/fstabCreate a persistent mount point for the Azure file share with /etc/fstab

  1. Cree una carpeta para un punto de montaje: la carpeta para el punto de montaje se puede crear en cualquier parte del sistema de archivos, pero es habitual crearla en la carpeta /mount.Create a folder for the mount point: A folder for a mount point can be created anywhere on the file system, but it's common convention to create this under /mount. Por ejemplo, con el siguiente comando se crea un directorio; reemplace <your-resource-group>, <your-storage-account> y <your-file-share> por la información de su entorno correspondiente:For example, the following command creates a new directory, replace <your-resource-group>, <your-storage-account>, and <your-file-share> with the appropriate information for your environment:

    resourceGroupName="<your-resource-group>"
    storageAccountName="<your-storage-account>"
    fileShareName="<your-file-share>"
    
    mntPath="/mount/$storageAccountName/$fileShareName"
    
    sudo mkdir -p $mntPath
    
  2. Cree un archivo de credenciales para almacenar el nombre de usuario (el nombre de cuenta de almacenamiento) y la contraseña (la clave de cuenta de almacenamiento) para el recurso compartido de archivos.Create a credential file to store the username (the storage account name) and password (the storage account key) for the file share.

    if [ ! -d "/etc/smbcredentials" ]; then
        sudo mkdir "/etc/smbcredentials"
    fi
    
    storageAccountKey=$(az storage account keys list \
        --resource-group $resourceGroupName \
        --account-name $storageAccountName \
        --query "[0].value" | tr -d '"')
    
    smbCredentialFile="/etc/smbcredentials/$storageAccountName.cred"
    if [ ! -f $smbCredentialFile ]; then
        echo "username=$storageAccountName" | sudo tee $smbCredentialFile > /dev/null
        echo "password=$storageAccountKey" | sudo tee -a $smbCredentialFile > /dev/null
    else 
        echo "The credential file $smbCredentialFile already exists, and was not modified."
    fi
    
  3. Cambie los permisos en el archivo de credenciales para que solo la raíz pueda leer o modificar el archivo de contraseña.Change permissions on the credential file so only root can read or modify the password file. Puesto que la clave de la cuenta de almacenamiento es básicamente una contraseña de superadministrador para la cuenta de almacenamiento, el establecimiento de los permisos en el archivo de forma que solo la raíz pueda acceder a ella es importante para que los usuarios con privilegios reducidos no puedan recuperarla.Since the storage account key is essentially a super-administrator password for the storage account, setting the permissions on the file such that only root can access is important so that lower privilege users cannot retrieve the storage account key.

    sudo chmod 600 $smbCredentialFile
    
  4. Use el siguiente comando para anexar la siguiente línea a /etc/fstab : En el ejemplo siguiente, el valor predeterminado de los permisos de archivo y carpeta de Linux es 0755, que significa lectura, escritura y ejecución para el propietario (según el propietario de Linux de archivo o directorio), lectura y ejecución para los usuarios en el grupo de propietarios y lectura y ejecución para otros en el sistema.Use the following command to append the following line to /etc/fstab: In the example below, the local Linux file and folder permissions default 0755, which means read, write, and execute for the owner (based on the file/directory Linux owner), read and execute for users in owner group, and read and execute for others on the system. Puede usar las opciones de montaje uid y gid para establecer el identificador de usuario y el identificador de grupo para el montaje.You can use the uid and gid mount options to set the user ID and group ID for the mount. También puede usar dir_mode y file_mode para establecer permisos personalizados según sea necesario.You can also use dir_mode and file_mode to set custom permissions as desired. Para obtener más información sobre cómo establecer permisos, consulte notación numérica de UNIX en Wikipedia.For more information on how to set permissions, see UNIX numeric notation on Wikipedia.

    # This command assumes you have logged in with az login
    httpEndpoint=$(az storage account show \
        --resource-group $resourceGroupName \
        --name $storageAccountName \
        --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName
    
    if [ -z "$(grep $smbPath\ $mntPath /etc/fstab)" ]; then
        echo "$smbPath $mntPath cifs nofail,vers=3.0,credentials=$smbCredentialFile,serverino" | 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 may want to double check /etc/fstab to ensure the configuration is as desired."
    fi
    
    sudo mount -a
    

    Nota

    El comando de montaje anterior se monta con SMB 3.0.The above mount command mounts with SMB 3.0. Si la distribución de Linux no admite SMB 3.0 con cifrado o si solo admite SMB 2.1, solo puede montar desde una máquina virtual de Azure dentro de la misma región que la cuenta de almacenamiento.If your Linux distribution does not support SMB 3.0 with encryption or if it only supports SMB 2.1, you may only mount from an Azure VM within the same region as the storage account. Para montar el recurso compartido de archivos de Azure en una distribución de Linux que no admita SMB 3.0 con cifrado, necesitará deshabilitar el cifrado en tránsito para la cuenta de almacenamiento.To mount your Azure file share on a Linux distribution that does not support SMB 3.0 with encryption, you will need to disable encryption in transit for the storage account.

Uso de autofs para montar automáticamente los recursos compartidos de archivos de AzureUsing autofs to automatically mount the Azure file share(s)

  1. Asegúrese de que el paquete autofs está instalado.Ensure the autofs package is installed.

    El paquete autofs se puede instalar con el administrador de paquetes en la distribución de Linux de su elección.The autofs package can be installed using the package manager on the Linux distribution of your choice.

    En distribuciones de Ubuntu y Debian, use el administrador de paquetes apt:On Ubuntu and Debian-based distributions, use the apt package manager:

    sudo apt update
    sudo apt install autofs
    

    En Fedora, Red Hat Enterprise Linux 8 +, y CentOS 8 +, use el administrador de paquetes dnf:On Fedora, Red Hat Enterprise Linux 8+, and CentOS 8 +, use the dnf package manager:

    sudo dnf install autofs
    

    En las versiones anteriores de Red Hat Enterprise Linux y CentOS, use el administrador de paquetes yum:On older versions of Red Hat Enterprise Linux and CentOS, use the yum package manager:

    sudo yum install autofs 
    

    En openSUSE, use el administrador de paquetes zypper:On openSUSE, use the zypper package manager:

    sudo zypper install autofs
    
  2. Cree un punto de montaje para los recursos compartidos:Create a mount point for the share(s):

     sudo mkdir /fileshares
    
  3. Cree un archivo de configuración de autofs personalizado.Crete a new custom autofs configuration file

    sudo vi /etc/auto.fileshares
    
  4. Agregue las siguientes entradas a /etc/auto.fileshares.Add the following entries to /etc/auto.fileshares

    echo "$fileShareName -fstype=cifs,credentials=$smbCredentialFile :$smbPath"" > /etc/auto.fileshares
    
  5. Agregue la siguiente entrada a /etc/auto.master.Add the following entry to /etc/auto.master

    /fileshares /etc/auto.fileshares --timeout=60
    
  6. Reinicie autofs.Restart autofs

    sudo systemctl restart autofs
    
  7. Acceda a la carpeta designada para el recurso compartido.Access the folder designated for the share

    cd /fileshares/$filesharename
    

Protección de LinuxSecuring Linux

Para montar un recurso compartido de archivos de Azure en Linux, el puerto 445 debe estar accesible.In order to mount an Azure file share on Linux, port 445 must be accessible. Muchas organizaciones bloquean este puerto debido a los riesgos de seguridad inherentes a SMB 1.Many organizations block port 445 because of the security risks inherent with SMB 1. SMB 1, también conocido como CIFS (Sistema de archivos de Internet común), es un protocolo de sistema de archivos heredado que se incluye en muchas distribuciones de Linux.SMB 1, also known as CIFS (Common Internet File System), is a legacy file system protocol included with many Linux distributions. SMB 1 es un protocolo obsoleto, ineficaz y, lo más importante, no seguro.SMB 1 is an outdated, inefficient, and most importantly insecure protocol. La buena noticia es que Azure Files no es compatible con SMB 1 y, a partir de la versión 4.18 del kernel de Linux, Linux hace posible deshabilitar SMB 1.The good news is that Azure Files does not support SMB 1, and starting with Linux kernel version 4.18, Linux makes it possible to disable SMB 1. Siempre recomendamos encarecidamente deshabilitar SMB 1 en los clientes Linux antes de usar recursos compartidos de archivos SMB en producción.We always strongly recommend disabling the SMB 1 on your Linux clients before using SMB file shares in production.

A partir del kernel de Linux 4.18, el módulo de kernel de SMB, denominado cifs por motivos de herencia, expone un nuevo parámetro de módulo (a menudo conocido como parm en diversos documentos externos), denominado disable_legacy_dialects.Starting with Linux kernel 4.18, the SMB kernel module, called cifs for legacy reasons, exposes a new module parameter (often referred to as parm by various external documentations), called disable_legacy_dialects. Aunque se presentó en el kernel de Linux 4.18, algunos proveedores han trasladado este cambio a los kernels más antiguos que admiten.Although introduced in Linux kernel 4.18, some vendors have backported this change to older kernels that they support. Para mayor comodidad, en la tabla siguiente se detalla la disponibilidad de este parámetro de módulo en distribuciones de Linux comunes.For convenience, the following table details the availability of this module parameter on common Linux distributions.

DistribuciónDistribution Puede deshabilitar SMB 1Can disable SMB 1
Ubuntu 14.04-16.04Ubuntu 14.04-16.04 NoNo
Ubuntu 18.04Ubuntu 18.04 Yes
Ubuntu 19.04+Ubuntu 19.04+ Yes
Debian 8-9Debian 8-9 NoNo
Debian 10+Debian 10+ Yes
Fedora 29+Fedora 29+ Yes
CentOS 7CentOS 7 NoNo
CentOS 8+CentOS 8+ Yes
Red Hat Enterprise Linux 6.x-7.xRed Hat Enterprise Linux 6.x-7.x NoNo
Red Hat Enterprise Linux 8+Red Hat Enterprise Linux 8+ Yes
openSUSE Leap 15.0openSUSE Leap 15.0 NoNo
openSUSE Leap 15.1+openSUSE Leap 15.1+ Yes
openSUSE TumbleweedopenSUSE Tumbleweed Yes
SUSE Linux Enterprise 11.x-12.xSUSE Linux Enterprise 11.x-12.x NoNo
SUSE Linux Enterprise 15SUSE Linux Enterprise 15 NoNo
SUSE Linux Enterprise 15.1SUSE Linux Enterprise 15.1 NoNo

Puede comprobar si la distribución de Linux es compatible con el parámetro del módulo disable_legacy_dialects a través del comando siguiente.You can check to see if your Linux distribution supports the disable_legacy_dialects module parameter via the following command.

sudo modinfo -p cifs | grep disable_legacy_dialects

Este comando debe generar el siguiente mensaje:This command should output the following message:

disable_legacy_dialects: To improve security it may be helpful to restrict the ability to override the default dialects (SMB2.1, SMB3 and SMB3.02) on mount with old dialects (CIFS/SMB1 and SMB2) since vers=1.0 (CIFS/SMB1) and vers=2.0 are weaker and less secure. Default: n/N/0 (bool)

Antes de deshabilitar SMB 1, debe comprobar para asegurarse de que el módulo SMB no está cargado actualmente en el sistema (esto sucede automáticamente si ha montado un recurso compartido de SMB).Before disabling SMB 1, you must check to make sure that the SMB module is not currently loaded on your system (this happens automatically if you have mounted an SMB share). Puede hacerlo con el siguiente comando, que no debe generar nada si no se carga SMB:You can do this with the following command, which should output nothing if SMB is not loaded:

lsmod | grep cifs

Para descargar el módulo, desmonte primero todos los recursos compartidos de SMB (con el comando umount como se describió anteriormente).To unload the module, first unmount all SMB shares (using the umount command as described above). Puede identificar todos los recursos compartidos de SMB montados en el sistema con el siguiente comando:You can identify all the mounted SMB shares on your system with the following command:

mount | grep cifs

Una vez que haya desmontado todos los recursos compartidos de archivos SMB, es seguro descargar el módulo.Once you have unmounted all SMB file shares, it's safe to unload the module. Para ello, puede usar el comando modprobe :You can do this with the modprobe command:

sudo modprobe -r cifs

Puede cargar manualmente el módulo con SMB 1 descargado mediante el comando modprobe:You can manually load the module with SMB 1 unloaded using the modprobe command:

sudo modprobe cifs disable_legacy_dialects=Y

Por último, puede comprobar que el módulo SMB se ha cargado con el parámetro, para ello, examine los parámetros cargados en /sys/module/cifs/parameters:Finally, you can check the SMB module has been loaded with the parameter by looking at the loaded parameters in /sys/module/cifs/parameters:

cat /sys/module/cifs/parameters/disable_legacy_dialects

Para deshabilitar de forma persistente SMB 1 en las distribuciones basadas en Ubuntu y Debian, debe crear un nuevo archivo (si aún no tiene opciones personalizadas para otros módulos) denominado /etc/modprobe.d/local.conf con la configuración.To persistently disable SMB 1 on Ubuntu and Debian-based distributions, you must create a new file (if you don't already have custom options for other modules) called /etc/modprobe.d/local.conf with the setting. Para ello, use el siguiente comando:You can do this with the following command:

echo "options cifs disable_legacy_dialects=Y" | sudo tee -a /etc/modprobe.d/local.conf > /dev/null

Para comprobar que esto ha funcionado, cargue el módulo SMB:You can verify that this has worked by loading the SMB module:

sudo modprobe cifs
cat /sys/module/cifs/parameters/disable_legacy_dialects

Pasos siguientesNext steps

Consulte los vínculos siguientes para más información sobre Azure Files:See these links for more information about Azure Files: