Usar o Arquivos do Azure com o LinuxUse Azure Files with Linux

Arquivos do Azure é o sistema de arquivos de nuvem de fácil acesso da Microsoft.Azure Files is Microsoft's easy to use cloud file system. Os compartilhamentos de arquivos do Azure podem ser montados em distribuições do Linux usando o cliente de kernel SMB.Azure file shares can be mounted in Linux distributions using the SMB kernel client. Este artigo mostra duas maneiras de montar um compartilhamento de arquivos do Azure: sob demanda com o comando mount e na inicialização criando uma entrada em /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.

A maneira recomendada para montar um compartilhamento de arquivos do Azure no Linux é usando SMB 3,0.The recommended way to mount an Azure file share on Linux is using SMB 3.0. Por padrão, os arquivos do Azure exigem criptografia em trânsito, que tem suporte apenas no SMB 3,0.By default, Azure Files requires encryption in transit, which is only supported by SMB 3.0. Os arquivos do Azure também dão suporte ao SMB 2,1, que não dá suporte à criptografia em trânsito, mas você não pode montar compartilhamentos de arquivos do Azure com o SMB 2,1 de outra região do Azure ou local por motivos de segurança.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 seu aplicativo exija especificamente o SMB 2,1, há pouco motivo para usá-lo desde que as distribuições do Linux mais populares, lançadas recentemente, dão suporte ao 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:

Distribuição do LinuxLinux distribution SMB 2.1SMB 2.1
(Montagens em VMs na mesma região do Azure)(Mounts on VMs within same Azure region)
SMB 3.0SMB 3.0
(Montagens de região cruzada e locais)(Mounts from on premises and cross-region)
UbuntuUbuntu 14.04+14.04+ 16.04+16.04+
Red Hat Enterprise Linux (RHEL)Red Hat Enterprise Linux (RHEL) 7+7+ 7.5+7.5+
CentOSCentOS 7+7+ 7.5+7.5+
DebianDebian Mais de 88+ Mais de 1010+
openSUSEopenSUSE 13.2+13.2+ 42.3+42.3+
SUSE Linux Enterprise ServerSUSE Linux Enterprise Server 12+12+ 12 SP2+12 SP2+

Se você estiver usando uma distribuição do Linux não listada na tabela acima, poderá verificar se sua distribuição do Linux dá suporte ao SMB 3,0 com criptografia verificando a versão do kernel do 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. O SMB 3,0 com criptografia foi adicionado ao kernel do Linux versão 4,11.SMB 3.0 with encryption was added to Linux kernel version 4.11. O uname comando retornará a versão do kernel do Linux em uso:The uname command will return the version of the Linux kernel in use:

uname -r

Pré-requisitosPrerequisites

  • Verifique se o pacote CIFS-utils está instalado.Ensure the cifs-utils package is installed.
    O pacote cifs-utils pode ser instalado usando o gerenciador de pacotes na distribuição do Linux escolhida.The cifs-utils package can be installed using the package manager on the Linux distribution of your choice.

    Em distribuições Ubuntu e Debian, use o gerenciador de pacotes do apt:On Ubuntu and Debian-based distributions, use the apt package manager:

    sudo apt update
    sudo apt install cifs-utils
    

    Em Fedora, Red Hat Enterprise Linux 8 + e CentOS 8 +, use o dnf Gerenciador de pacotes:On Fedora, Red Hat Enterprise Linux 8+, and CentOS 8 +, use the dnf package manager:

    sudo dnf install cifs-utils
    

    Em versões mais antigas do Red Hat Enterprise Linux e do CentOS, use o yum Gerenciador de pacotes:On older versions of Red Hat Enterprise Linux and CentOS, use the yum package manager:

    sudo yum install cifs-utils 
    

    No openSUSE, use o gerenciador de pacotes do zypper:On openSUSE, use the zypper package manager:

    sudo zypper install cifs-utils
    

    Em outras distribuições, use o gerenciador de pacotes apropriado ou compile do código-fonteOn other distributions, use the appropriate package manager or compile from source

  • A versão mais recente da CLI (interface de linha de comando) do Azure.The most recent version of the Azure Command Line Interface (CLI). Para obter mais informações sobre como instalar o CLI do Azure, consulte instalar o CLI do Azure e selecionar o sistema operacional.For more information on how to install the Azure CLI, see Install the Azure CLI and select your operating system. Se preferir usar o módulo Azure PowerShell no PowerShell 6 +, você pode, no entanto, as instruções a seguir são apresentadas para o CLI do 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.

  • Verifique se a porta 445 está aberta: o SMB se comunica pela porta TCP 445, por isso confira se o firewall não está bloqueando as portas TCP 445 do computador 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. Substitua de grupo de recursos e Replace and

    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
    

    Se a conexão tiver sido bem-sucedida, você verá algo semelhante à seguinte saída: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!
    

    Se não for possível abrir a porta 445 em sua rede corporativa ou se estiver impedido de fazer isso por um ISP, você poderá usar uma conexão VPN ou o ExpressRoute para contornar a porta 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 obter mais informações, consulte considerações de rede para acesso direto ao compartilhamento de arquivos do Azure.For more information, see Networking considerations for direct Azure file share access..

Montando o compartilhamento de arquivos do AzureMounting Azure file share

Para usar um compartilhamento de arquivos do Azure com sua distribuição do Linux, você deve criar um diretório para servir como o ponto de montagem para o compartilhamento de arquivos do 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. Um ponto de montagem pode ser criado em qualquer lugar no seu sistema Linux, mas é uma convenção comum criar isso em/mnt.A mount point can be created anywhere on your Linux system, but it's common convention to create this under /mnt. Após o ponto de montagem, use o mount comando para acessar o compartilhamento de arquivos do Azure.After the mount point, you use the mount command to access the Azure file share.

Você pode montar o mesmo compartilhamento de arquivos do Azure para vários pontos de montagem, se desejar.You can mount the same Azure file share to multiple mount points if desired.

Montar o compartilhamento de arquivos do Azure sob demanda com mountMount the Azure file share on-demand with mount

  1. Crie uma pasta para o ponto de montagem: substitua <your-resource-group> , <your-storage-account> e <your-file-share> com as informações apropriadas para seu ambiente: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="/mnt/$storageAccountName/$fileShareName"
    
    sudo mkdir -p $mntPath
    
  2. Use o comando mount para montar o compartilhamento de arquivos do Azure.Use the mount command to mount the Azure file share. No exemplo abaixo, as permissões locais do arquivo e da pasta do Linux padrão são 0755, o que significa ler, gravar e executar para o proprietário (com base no proprietário do Linux de arquivo/diretório), ler e executar para usuários no grupo proprietário e ler e executar para outras pessoas no 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. Você pode usar as uid gid Opções de montagem e para definir a ID de usuário e a ID de grupo para a montagem.You can use the uid and gid mount options to set the user ID and group ID for the mount. Você também pode usar dir_mode e file_mode para definir permissões personalizadas conforme desejado.You can also use dir_mode and file_mode to set custom permissions as desired. Para obter mais informações sobre como definir permissões, consulte notação numérica do UNIX na Wikipédia.For more information on how to set permissions, see UNIX numeric notation on Wikipedia.

    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
    

    Observação

    O comando de montagem acima é montado com SMB 3,0.The above mount command mounts with SMB 3.0. Se sua distribuição do Linux não oferecer suporte a SMB 3,0 com criptografia ou se ela der suporte apenas ao SMB 2,1, você só poderá montar de uma VM do Azure na mesma região que a conta de armazenamento.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 o compartilhamento de arquivos do Azure em uma distribuição do Linux que não dá suporte a SMB 3,0 com criptografia, você precisará desabilitar a criptografia em trânsito para a conta de armazenamento.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.

Quando tiver terminado de usar o compartilhamento de arquivos do Azure, você pode usar sudo umount $mntPath para desmontar o compartilhamento.When you are done using the Azure file share, you may use sudo umount $mntPath to unmount the share.

Criar um ponto de montagem persistente para o compartilhamento de arquivos do Azure com /etc/fstabCreate a persistent mount point for the Azure file share with /etc/fstab

  1. Criar uma pasta para o ponto de montagem: uma pasta para um ponto de montagem pode ser criada em qualquer lugar no sistema de arquivos, mas é uma convenção comum criá-la em/mnt.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 /mnt. Por exemplo, o comando a seguir cria um novo diretório, substitui <your-resource-group> , <your-storage-account> e <your-file-share> com as informações apropriadas para seu ambiente: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="/mnt/$storageAccountName/$fileShareName"
    
    sudo mkdir -p $mntPath
    
  2. Crie um arquivo de credencial para armazenar o nome de usuário (o nome de conta de armazenamento) e a senha (a chave de conta de armazenamento) para o compartilhamento de arquivos.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. Alterar as permissões no arquivo de credenciais para que raiz possa ler ou modificar o arquivo de senha.Change permissions on the credential file so only root can read or modify the password file. Como a chave da conta de armazenamento é essencialmente uma senha de super administrador para a conta de armazenamento, é importante definir as permissões no arquivo de modo que somente o usuário root possa acessar, para que usuários com privilégios mais baixos não possam recuperar a chave da conta de armazenamento.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 o comando a seguir para acrescentar a seguinte linha /etc/fstab a **: no exemplo abaixo, as permissões de pasta e arquivo Linux local padrão 0755, que significa leitura, gravação e execução para o proprietário (com base no proprietário do Linux de arquivo/diretório), leitura e execução para usuários no grupo proprietário e leitura e execução para outras pessoas no 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. Você pode usar as uid gid Opções de montagem e para definir a ID de usuário e a ID de grupo para a montagem.You can use the uid and gid mount options to set the user ID and group ID for the mount. Você também pode usar dir_mode e file_mode para definir permissões personalizadas conforme desejado.You can also use dir_mode and file_mode to set custom permissions as desired. Para obter mais informações sobre como definir permissões, consulte notação numérica do UNIX na Wikipédia.For more information on how to set permissions, see UNIX numeric notation on Wikipedia.

    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
    

    Observação

    O comando de montagem acima é montado com SMB 3,0.The above mount command mounts with SMB 3.0. Se sua distribuição do Linux não oferecer suporte a SMB 3,0 com criptografia ou se ela der suporte apenas ao SMB 2,1, você só poderá montar de uma VM do Azure na mesma região que a conta de armazenamento.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 o compartilhamento de arquivos do Azure em uma distribuição do Linux que não dá suporte a SMB 3,0 com criptografia, você precisará desabilitar a criptografia em trânsito para a conta de armazenamento.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.

Usando o autofs para montar automaticamente os compartilhamento (s) de arquivos do AzureUsing autofs to automatically mount the Azure file share(s)

  1. Verifique se o pacote do autofs está instalado.Ensure the autofs package is installed.

    O pacote do autofs pode ser instalado usando o Gerenciador de pacotes na distribuição do Linux de sua escolha.The autofs package can be installed using the package manager on the Linux distribution of your choice.

    Em distribuições Ubuntu e Debian, use o gerenciador de pacotes do apt:On Ubuntu and Debian-based distributions, use the apt package manager:

    sudo apt update
    sudo apt install autofs
    

    Em Fedora, Red Hat Enterprise Linux 8 + e CentOS 8 +, use o dnf Gerenciador de pacotes:On Fedora, Red Hat Enterprise Linux 8+, and CentOS 8 +, use the dnf package manager:

    sudo dnf install autofs
    

    Em versões mais antigas do Red Hat Enterprise Linux e do CentOS, use o yum Gerenciador de pacotes:On older versions of Red Hat Enterprise Linux and CentOS, use the yum package manager:

    sudo yum install autofs 
    

    No openSUSE, use o gerenciador de pacotes do zypper:On openSUSE, use the zypper package manager:

    sudo zypper install autofs
    
  2. Crie um ponto de montagem para os compartilhamentos:Create a mount point for the share(s):

     sudo mkdir /fileshares
    
  3. Criar um novo arquivo de configuração do autofs personalizadoCrete a new custom autofs configuration file

    sudo vi /etc/auto.fileshares
    
  4. Adicione as seguintes entradas a/etc/auto.filesharesAdd the following entries to /etc/auto.fileshares

    echo "$fileShareName -fstype=cifs,credentials=$smbCredentialFile :$smbPath"" > /etc/auto.fileshares
    
  5. Adicione a seguinte entrada a/etc/auto.MasterAdd the following entry to /etc/auto.master

    /fileshares /etc/auto.fileshares --timeout=60
    
  6. Reiniciar o autofsRestart autofs

    sudo systemctl restart autofs
    
  7. Acessar a pasta designada para o compartilhamentoAccess the folder designated for the share

    cd /fileshares/$filesharename
    

Como proteger o LinuxSecuring Linux

Para montar um compartilhamento de arquivos do Azure no Linux, a porta 445 deve estar acessível.In order to mount an Azure file share on Linux, port 445 must be accessible. Muitas organizações bloqueiam a porta 445 devido aos riscos de segurança inerentes ao protocolo SMB 1.Many organizations block port 445 because of the security risks inherent with SMB 1. O SMB 1, também conhecido como CIFS (Common Internet File System), é um protocolo de sistema de arquivos herdado incluído com muitas distribuições do Linux.SMB 1, also known as CIFS (Common Internet File System), is a legacy file system protocol included with many Linux distributions. O SMB 1 é um protocolo desatualizado, ineficiente e, o mais importante, não seguro.SMB 1 is an outdated, inefficient, and most importantly insecure protocol. A boa notícia é que os arquivos do Azure não oferecem suporte a SMB 1 e, a partir do Linux kernel versão 4,18, o Linux possibilita a desabilitação do 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. Sempre é altamente recomendável desabilitar o SMB 1 em seus clientes Linux antes de usar compartilhamentos de arquivos SMB em produção.We always strongly recommend disabling the SMB 1 on your Linux clients before using SMB file shares in production.

A partir do kernel do Linux 4,18, o módulo kernel SMB, chamado cifs por motivos herdados, expõe um novo parâmetro de módulo (muitas vezes conhecido como Parm por várias documentações externas), chamado 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. Embora introduzido no kernel do Linux 4,18, alguns fornecedores têm reportado essa alteração para os kernels mais antigos aos quais dão suporte.Although introduced in Linux kernel 4.18, some vendors have backported this change to older kernels that they support. Para sua conveniência, a tabela a seguir detalha a disponibilidade desse parâmetro de módulo em distribuições comuns do Linux.For convenience, the following table details the availability of this module parameter on common Linux distributions.

DistribuiçãoDistribution Pode desabilitar o SMB 1Can disable SMB 1
Ubuntu 14.04 – 16.04Ubuntu 14.04-16.04 NãoNo
Ubuntu 18.04Ubuntu 18.04 SimYes
Ubuntu 19.04 +Ubuntu 19.04+ SimYes
Debian 8-9Debian 8-9 NãoNo
Debian 10 +Debian 10+ SimYes
Fedora 29 +Fedora 29+ SimYes
CentOS 7CentOS 7 NãoNo
CentOS 8 +CentOS 8+ SimYes
Red Hat Enterprise Linux 6. x-7. xRed Hat Enterprise Linux 6.x-7.x NãoNo
Red Hat Enterprise Linux 8 +Red Hat Enterprise Linux 8+ SimYes
openSUSE Leap 15,0openSUSE Leap 15.0 NãoNo
openSUSE Leap 15.1 +openSUSE Leap 15.1+ SimYes
openSUSE TumbleweedopenSUSE Tumbleweed SimYes
SUSE Linux Enterprise 11. x-12. xSUSE Linux Enterprise 11.x-12.x NãoNo
SUSE Linux Enterprise 15SUSE Linux Enterprise 15 NãoNo
SUSE Linux Enterprise 15,1SUSE Linux Enterprise 15.1 NãoNo

Você pode verificar se sua distribuição do Linux dá suporte ao disable_legacy_dialects parâmetro de módulo por meio do comando a seguir.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

Esse comando deve gerar a seguinte mensagem: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 desabilitar o SMB 1, você deve verificar se o módulo SMB não está carregado atualmente no seu sistema (isso ocorre automaticamente se você tiver montado um compartilhamento 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). Você pode fazer isso com o comando a seguir, que não deverá gerar nada se o SMB não for carregado:You can do this with the following command, which should output nothing if SMB is not loaded:

lsmod | grep cifs

Para descarregar o módulo, primeiro Desmonte todos os compartilhamentos SMB (usando o umount comando, conforme descrito acima).To unload the module, first unmount all SMB shares (using the umount command as described above). Você pode identificar todos os compartilhamentos SMB montados em seu sistema com o seguinte comando:You can identify all the mounted SMB shares on your system with the following command:

mount | grep cifs

Depois de desmontar todos os compartilhamentos de arquivos SMB, é seguro descarregar o módulo.Once you have unmounted all SMB file shares, it's safe to unload the module. Você pode fazer isso com o comando modprobe :You can do this with the modprobe command:

sudo modprobe -r cifs

Você pode carregar manualmente o módulo com o SMB 1 descarregado usando o modprobe comando:You can manually load the module with SMB 1 unloaded using the modprobe command:

sudo modprobe cifs disable_legacy_dialects=Y

Por fim, você pode verificar se o módulo SMB foi carregado com o parâmetro examinando os parâmetros carregados em /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 desabilitar o SMB 1 de forma persistente em distribuições baseadas em Ubuntu e Debian, você deve criar um novo arquivo (se você ainda não tiver opções personalizadas para outros módulos) chamado /etc/modprobe.d/local.conf com a configuração.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. Você pode fazer isso com o seguinte 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

Você pode verificar se isso funcionou carregando o 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

Próximas etapasNext steps

Veja estes links para obter mais informações sobre o Arquivos do Azure:See these links for more information about Azure Files: