Montar partilha de ficheiros do Azure SMB no Linux

Atenção

Este artigo faz referência ao CentOS, uma distribuição Linux que está se aproximando do status de Fim da Vida Útil (EOL). Por favor, considere o seu uso e planeje de acordo. Para obter mais informações, consulte as diretrizes de Fim da Vida Útil do CentOS. Ficheiros do Azure é o sistema de ficheiros na cloud fácil de utilizar da Microsoft. As partilhas de ficheiros do Azure podem ser montadas em distribuições do Linux com o cliente do kernel do SMB.

A forma recomendada de montar uma partilha de ficheiros do Azure no Linux é utilizar o SMB 3.1.1. Por predefinição, os Ficheiros do Azure requerem encriptação em trânsito, que é suportada pelo SMB 3.0 e superior. Os Arquivos do Azure também dão suporte ao SMB 2.1, que não oferece 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. A menos que a aplicação exija especificamente o SMB 2.1, utilize o SMB 3.1.1.

Distribuição SMB 3.1.1 (Recomendado) SMB 3.0
Versão de kernel do Linux
  • Suporte básico 3.1.1: 4.17
  • Montagem padrão: 5.0
  • Encriptação AES-128-GCM: 5.3
  • Encriptação AES-256-GCM: 5.10
  • Suporte básico 3.0: 3.12
  • Encriptação AES-128-CCM: 4.11
Ubuntu Encriptação AES-128-GCM: 18.04.5 LTS e posterior Encriptação AES-128-CCM: 16.04.4 LTS e posterior
Red Hat Enterprise Linux (RHEL)
  • Básico: 8.0 e posterior
  • Montagem predefinida: 8.2 e posterior
  • Encriptação AES-128-GCM: 8.2 e posterior
7.5 e posterior
Debian Básico: 10 e posterior Encriptação AES-128-CCM: 10 e posterior
SUSE Linux Enterprise Server Encriptação AES-128-GCM: 15 SP2 e posterior Encriptação AES-128-CCM: 12 SP2 e posterior

Se a distribuição do Linux não estiver listada na tabela acima, poderá verificar a versão do kernel do Linux com o comando uname:

uname -r

Nota

O suporte do SMB 2.1 foi adicionado à versão 3.7 do kernel do Linux. Se você estiver usando uma versão do kernel Linux após a 3.7, ela deve suportar SMB 2.1.

Aplica-se a

Tipo de partilhas de ficheiros SMB NFS
Partilhas de ficheiros Standard (GPv2), LRS/ZRS Yes No
Partilhas de ficheiros Standard (GPv2), GRS/GZRS Yes No
Partilhas de ficheiros Premium (FileStorage), LRS/ZRS Yes No

Pré-requisitos

  • Verifique se o pacote cifs-utils está instalado. O pacote cifs-utils pode ser instalado usando o gerenciador de pacotes na distribuição Linux de sua escolha.

No Ubuntu e Debian, use o gerenciador de apt pacotes:

sudo apt update
sudo apt install cifs-utils

Em outras distribuições, use o gerenciador de pacotes apropriado ou compile a partir do código-fonte.

  • A versão mais recente da CLI (Interface de Linha de Comando) do Azure. Para obter mais informações sobre como instalar a CLI do Azure, consulte Instalar a CLI do Azure e selecione seu sistema operacional. Se preferir usar o módulo do Azure PowerShell no PowerShell 6+, você pode; no entanto, as instruções neste artigo são para a CLI do Azure.

  • Certifique-se de que a porta 445 está aberta: o SMB comunica através da porta TCP 445 - certifique-se de que a sua firewall ou ISP não está a bloquear a porta TCP 445 do computador cliente. Substitua <your-resource-group> e <your-storage-account> execute o seguinte script:

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

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

    Se não conseguir abrir a porta 445 na sua rede empresarial ou se estiver impedido de o fazer por um ISP, pode utilizar uma ligação VPN ou a Rota Expressa para contornar a porta 445. Para obter mais informações, consulte Considerações sobre a rede para acesso direto à partilha de ficheiros do Azure.

Monte o compartilhamento de arquivos do Azure sob demanda com mount

Quando você monta um compartilhamento de arquivos em um sistema operacional Linux, seu compartilhamento de arquivos remoto é representado como uma pasta em seu sistema de arquivos local. Você pode montar compartilhamentos de arquivos em qualquer lugar do seu sistema. O exemplo a seguir é montado sob o /media caminho. Você pode alterar isso para o caminho desejado modificando a $MNT_ROOT variável.

Substitua <resource-group-name>, <storage-account-name>e <file-share-name> com as informações apropriadas para o seu 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

Em seguida, monte o compartilhamento de arquivos usando o mount comando. No exemplo a seguir, o $SMB_PATH comando é preenchido usando o nome de domínio totalmente qualificado para o ponto de extremidade de arquivo da conta de armazenamento e $STORAGE_ACCOUNT_KEY é preenchido com a chave da conta de armazenamento.

Nota

A partir da versão 5.0 do kernel Linux, o SMB 3.1.1 é o protocolo negociado padrão. Se você estiver usando uma versão do kernel Linux anterior à 5.0, especifique vers=3.1.1 na lista de opções de montagem.

# 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 username=$STORAGE_ACCOUNT_NAME,password=$STORAGE_ACCOUNT_KEY,serverino,nosharesock,actimeo=30,mfsymlinks

Você pode usar uid/gid ou dir_mode e file_mode nas opções de montagem para o comando para definir mount permissões. Para obter mais informações sobre como definir permissões, consulte Notação numérica UNIX.

Você também pode montar o mesmo compartilhamento de arquivos do Azure em vários pontos de montagem, se desejar. Quando terminar de usar o compartilhamento de arquivos do Azure, use sudo umount $mntPath para desmontar o compartilhamento.

Monte compartilhamentos de arquivos automaticamente

Quando você monta um compartilhamento de arquivos em um sistema operacional Linux, seu compartilhamento de arquivos remoto é representado como uma pasta em seu sistema de arquivos local. Você pode montar compartilhamentos de arquivos em qualquer lugar do seu sistema. O exemplo a seguir é montado sob o /media caminho. Você pode alterar isso para o caminho desejado modificando a $MNT_ROOT variável.

MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT

Para montar um compartilhamento de arquivos do Azure no Linux, use o nome da conta de armazenamento como o nome de usuário do compartilhamento de arquivos e a chave da conta de armazenamento como a senha. Como as credenciais da conta de armazenamento podem mudar ao longo do tempo, você deve armazenar as credenciais da conta de armazenamento separadamente da configuração de montagem.

O exemplo a seguir mostra como criar um arquivo para armazenar as credenciais. Lembre-se de substituir <resource-group-name> e <storage-account-name> com as informações apropriadas para o seu 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

Para montar automaticamente um compartilhamento de arquivos, você pode escolher entre usar uma montagem estática através do /etc/fstab utilitário ou usar uma montagem dinâmica através do autofs utilitário.

Suporte estático com /etc/fstab

Usando o ambiente anterior, crie uma pasta para sua conta de armazenamento/compartilhamento de arquivos em sua pasta de montagem. Substitua <file-share-name> pelo nome apropriado do seu compartilhamento de arquivos do Azure.

FILE_SHARE_NAME="<file-share-name>"

MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH

Por fim, crie um registro no /etc/fstab arquivo para seu compartilhamento de arquivos do Azure. No comando abaixo, as permissões padrão de arquivo e pasta do Linux 0755 são usadas, o que significa ler, gravar e executar para o proprietário (com base no proprietário do arquivo/diretório Linux), ler e executar para usuários no grupo de proprietários e ler e executar para outros no sistema. Você pode querer definir permissões alternativas uid e gid /ou dir_mode e file_mode na montagem, conforme desejado. Para obter mais informações sobre como definir permissões, consulte Notação numérica UNIX na Wikipedia.

Gorjeta

Se você quiser que os contêineres do Docker que executam aplicativos .NET Core possam gravar no compartilhamento de arquivos do Azure, inclua nobrl nas opções de montagem SMB para evitar o envio de solicitações de bloqueio de intervalo de bytes para o servidor.

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" | 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

A partir da versão 5.0 do kernel Linux, o SMB 3.1.1 é o protocolo negociado padrão. Você pode especificar versões alternativas de protocolo usando a opção mount (versões de vers protocolo são 3.1.1, 3.0e 2.1).

Montagem dinâmica com autofs

Para montar dinamicamente um compartilhamento de arquivos com o autofs utilitário, instale-o usando o gerenciador de pacotes na distribuição Linux de sua escolha.

Nas distribuições Ubuntu e Debian, use o gerenciador de apt pacotes:

sudo apt update
sudo apt install autofs

Em seguida, atualize os arquivos de autofs configuração.

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 :$SMB_PATH" > /etc/auto.fileshares

echo "/fileshares /etc/auto.fileshares --timeout=60" > /etc/auto.master

A etapa final é reiniciar o autofs serviço.

sudo systemctl restart autofs

Montar um instantâneo de compartilhamento de arquivos

Se quiser montar um instantâneo específico de um compartilhamento de arquivos SMB Azure, você deve fornecer a snapshot opção como parte do mount comando, onde snapshot é a hora em que o instantâneo específico foi criado em um formato como @GMT-2023.01.05-00.08.20. A snapshot opção é suportada no kernel Linux desde a versão 4.19.

Depois de criar o instantâneo de compartilhamento de arquivos, siga estas instruções para montá-lo.

  1. No portal do Azure, navegue até a conta de armazenamento que contém o compartilhamento de arquivos do qual você deseja montar um instantâneo.

  2. Selecione Armazenamento de > dados Compartilhamentos de arquivos e selecione o compartilhamento de arquivos.

  3. Selecione Instantâneos de Operações > e anote o nome do instantâneo que deseja montar. O nome do instantâneo será um carimbo de data/hora GMT, como na captura de tela abaixo.

    Captura de ecrã a mostrar como localizar um nome de instantâneo de partilha de ficheiros e um carimbo de data/hora no portal do Azure.

  4. Converta o carimbo de data/hora para o formato esperado pelo mount comando, que é @GMT-year.month.day-hour.minutes.seconds. Neste exemplo, você converteria 2023-01-05T00:08:20.0000000Z para @GMT-2023.01.05-00.08.20.

  5. Execute o mount comando usando a hora GMT para especificar o snapshot valor. Certifique-se de substituir <storage-account-name>, <file-share-name>e o carimbo de data/hora GMT pelos seus valores. O arquivo .cred contém as credenciais a serem usadas para montar o compartilhamento (consulte Montar compartilhamentos de arquivos automaticamente).

    sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<file-share-name> /media/<file-share-name>/snapshot1 -o credentials=/etc/smbcredentials/snapshottestlinux.cred,snapshot=@GMT-2023.01.05-00.08.20
    
  6. Se você conseguir navegar pelo snapshot sob o caminho /media/<file-share-name>/snapshot1, a montagem foi bem-sucedida.

Se a montagem falhar, consulte Solucionar problemas de conectividade e acesso (SMB) dos Arquivos do Azure.

Próximos passos

Veja estas ligações para obter mais informações sobre os Ficheiros do Azure: