Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os compartilhamentos de arquivos do Azure podem ser montados em distribuições do Linux usando o cliente de kernel SMB.
Este artigo mostra como montar um compartilhamento de arquivos do Azure SMB usando a autenticação NTLMv2 (chave de conta de armazenamento). O uso da autenticação baseada em identidade é preferencial por motivos de segurança. Consulte Habilitar a autenticação do Active Directory em SMB para clientes Linux que acessam arquivos do Azure.
Aplica-se a
Modelo de gestão | Modelo de cobrança | Camada de mídia | Redundância | PME | NFS (Nota Fiscal de Serviços) |
---|---|---|---|---|---|
Microsoft.Storage | Provisionado v2 | HDD (padrão) | Local (LRS) |
![]() |
![]() |
Microsoft.Storage | Provisionado v2 | HDD (padrão) | Zona (ZRS) |
![]() |
![]() |
Microsoft.Storage | Provisionado v2 | HDD (padrão) | Localização geográfica (GRS) |
![]() |
![]() |
Microsoft.Storage | Provisionado v2 | HDD (padrão) | GeoZone (GZRS) |
![]() |
![]() |
Microsoft.Storage | Provisionado v1 | SSD (de alta qualidade) | Local (LRS) |
![]() |
![]() |
Microsoft.Storage | Provisionado v1 | SSD (de alta qualidade) | Zona (ZRS) |
![]() |
![]() |
Microsoft.Storage | Pagamento Conforme o Uso | HDD (padrão) | Local (LRS) |
![]() |
![]() |
Microsoft.Storage | Pagamento Conforme o Uso | HDD (padrão) | Zona (ZRS) |
![]() |
![]() |
Microsoft.Storage | Pagamento Conforme o Uso | HDD (padrão) | Localização geográfica (GRS) |
![]() |
![]() |
Microsoft.Storage | Pagamento Conforme o Uso | HDD (padrão) | GeoZone (GZRS) |
![]() |
![]() |
Protocolos
Por padrão, os Arquivos do Azure impõem a criptografia em trânsito. A criptografia SMB está disponível a partir do SMB 3.0. Os Arquivos do Azure também dão suporte ao SMB 2.1, que não dá suporte à criptografia SMB. Como resultado, os Arquivos do Azure não permitem que os compartilhamentos de arquivos sejam montados usando o SMB 2.1 de outra região do Azure ou local, sem configuração de rede adicional, por motivos de segurança. Você deve usar o SMB 3.1.1, a menos que seu aplicativo exija especificamente uma versão mais antiga.
Distribuição | SMB 3.1.1 (recomendado) | SMB 3.0 |
---|---|---|
Versão do kernel do Linux |
|
|
Ubuntu | Criptografia AES-128-GCM: 18.04.5 LTS+ | Criptografia AES-128-CCM: 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
7.5+ |
Debian | Básico: 10+ | Criptografia AES-128-CCM: 10+ |
SUSE Linux Enterprise Server | Criptografia AES-128-GCM: 15 SP2+ | Criptografia AES-128-CCM: 12 SP2+ |
Se a distribuição do Linux não estiver listada na tabela, você poderá verificar a versão do kernel do Linux com o uname
comando:
uname -r
Pré-requisitos
- Verifique se o pacote cifs-utils está instalado. Instale a versão mais recente do pacote cifs-utils usando o gerenciador de pacotes na distribuição do Linux de sua escolha.
No Ubuntu e noDebian, use o gerenciador de pacotes apt
:
sudo apt update
sudo apt install cifs-utils
Em outras distribuições, use o gerenciador de pacotes apropriado ou compile da origem.
Use 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 selecionar seu sistema operacional. Se preferir, você poderá usar o módulo do Azure PowerShell no PowerShell 6+. No entanto, as instruções neste artigo são para a CLI do Azure.
Verifique se a porta 445 está aberta: o SMB se comunica pela porta TCP 445 – verifique se o firewall ou o ISP não está bloqueando a porta TCP 445 do computador cliente. Substitua
<your-resource-group>
e<your-storage-account>
, em seguida, 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 for bem-sucedida, você verá algo semelhante à seguinte saída:
Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
Você pode usar uma conexão VPN ou ExpressRoute se a porta 445 estiver bloqueada em sua rede. Para obter mais informações, consulte considerações de rede para acesso direto ao compartilhamento de arquivos do Azure.
Permissões
Todos os scripts de montagem neste artigo montam os compartilhamentos de arquivos usando as permissões de arquivo e pasta padrão do Linux 0755. Isso significa fazer a leitura, gravar e executar para o proprietário do arquivo/diretório, fazer a leitura e executar para usuários no grupo de proprietários e fazer a leitura e executar para outros usuários. Dependendo das políticas de segurança da sua organização, talvez você queira definir opções alternativas uid
/gid
ou dir_mode
e file_mode
de permissões nas opções de montagem. Para obter mais informações sobre como definir permissões, consulte a notação simbólica do Unix. Consulte as opções de montagem para obter uma lista de opções de montagem.
Suporte a permissões de estilo unix
Você também pode obter suporte a permissões no estilo Unix para compartilhamentos de arquivos do Azure SMB usando o controle de acesso imposto pelo cliente e adicionando modefromsid,idsfromsid
opções de montagem ao seu comando de montagem. Para que isso funcione:
- Todos os clientes que acessam o compartilhamento precisam montar usando
modefromsid,idsfromsid
- Os UIDs/GIDs devem ser uniformes em todos os clientes
- Os clientes devem estar executando uma das seguintes distribuições do Linux com suporte: Ubuntu 20.04+, SLES 15 SP3+
Montar o compartilhamento de arquivos do Azure sob demanda com montar
Quando você monta um compartilhamento de arquivos em um sistema operacional Linux, o compartilhamento de arquivos remoto é representado como uma pasta em seu sistema de arquivos local. Você pode montar compartilhamentos de arquivos em qualquer lugar do sistema. O exemplo a seguir é montado sob o caminho /media
. Você pode alterá-lo para o caminho da sua preferência modificando a variável $MNT_ROOT
.
Lembre-se de substituir <resource-group-name>
, <storage-account-name>
e <file-share-name>
pelas 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, inicialize o arquivo de credenciais executando o script a seguir.
# 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
Agora você pode montar o compartilhamento de arquivos com o comando mount
que usa o arquivo de credenciais. No exemplo a seguir, o comando $SMB_PATH
é preenchido usando o nome de domínio totalmente qualificado para o ponto de extremidade de arquivo da conta de armazenamento. Consulte as opções de montagem para obter uma lista de opções de montagem SMB.
Observação
A partir do kernel Linux versão 5.0, o SMB 3.1.1 é o protocolo negociado padrão. Se você estiver usando uma versão kernel do 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 credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks
Você também pode montar o mesmo compartilhamento de arquivos do Azure em vários pontos de montagem, se desejar.
Ao terminar de usar o compartilhamento de arquivo do Azure, use sudo umount $mntPath
para desmontar o compartilhamento.
Monta automaticamente os compartilhamentos de arquivos
Quando você monta um compartilhamento de arquivos em um sistema operacional Linux, o compartilhamento de arquivos remoto é representado como uma pasta em seu sistema de arquivos local. Você pode montar compartilhamentos de arquivos em qualquer lugar do sistema. O exemplo a seguir é montado sob o caminho /media
. Você pode alterá-lo para o caminho da sua preferência modificando a variável $MNT_ROOT
.
MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT
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 essas credenciais 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>
pelas 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ê tem a opção de usar uma montagem estática por meio do utilitário /etc/fstab
ou usando uma montagem dinâmica por meio do utilitário autofs
.
Montagem estática com /etc/fstab
Usando o ambiente anterior, crie uma pasta para a sua conta de armazenamento/compartilhamento de arquivos sob a 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 arquivo /etc/fstab
para o compartilhamento de arquivos do Azure. No comando a seguir, as permissões de arquivo e pasta padrão 0755 do Linux são usadas, o que significa leitura, gravação e execução para o proprietário (com base no arquivo/diretório do proprietário do Linux), leitura e execução para usuários no grupo proprietário e leitura e execução para outras pessoas no sistema. Pode ser desejável definir permissões alternativas de uid
e gid
ou dir_mode
e file_mode
no processo de montagem, conforme desejado. Para obter mais informações sobre como definir permissões, consulte notação numérica UNIX. Consulte as opções de montagem para obter uma lista de opções de montagem SMB.
Dica
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,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
Observação
A partir do kernel Linux versão 5.0, o SMB 3.1.1 é o protocolo negociado padrão. Você pode especificar versões alternativas de protocolo usando a opção de montagem vers
(as versões de protocolo são 3.1.1
, 3.0
e 2.1
).
Montar dinamicamente com o autofs
Para montar dinamicamente um compartilhamento de arquivos com o utilitário autofs
, instale-o usando o gerenciador de pacotes na distribuição do Linux de sua escolha.
Em distribuições Ubuntu e Debian, use o gerenciador de pacotes apt
:
sudo apt update
sudo apt install autofs
Em seguida, atualize os arquivos de configuração autofs
. Consulte as opções de montagem para obter uma lista de opções de montagem 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
A etapa final é reiniciar o serviço autofs
.
sudo systemctl restart autofs
Opções de montagem
Você pode usar as seguintes opções de montagem ao montar compartilhamentos de arquivos SMB do Azure no Linux.
Opção de montagem | Valor recomendado | Descrição |
---|---|---|
username= |
Nome da conta de armazenamento | Obrigatório para a autenticação NTLMv2. |
password= |
Chave primária da conta de armazenamento | Obrigatório para a autenticação NTLMv2. |
password2= |
Chave secundária da conta de armazenamento | Recomendado quando a rotação de chaves sem interrupção é desejável. |
mfsymlinks |
Não disponível | Recomendado. Força a montagem a dar suporte a links simbólicos, permitindo que aplicativos como o Git clonem repositórios com symlinks. |
actimeo= |
30 a 60 | Recomendado. O tempo (em segundos) em que o cliente CIFS armazena em cache atributos de um arquivo ou diretório antes de solicitar informações de atributo de um servidor. Usar um valor inferior a 30 segundos pode causar degradação do desempenho porque os caches de atributo para arquivos e diretórios expiram muito rapidamente. É recomendável definir actimeo entre 30 e 60 segundos. |
nosharesock |
Não disponível | Opcional. Força o cliente a sempre fazer uma nova conexão com o servidor mesmo que ele tenha uma conexão existente com a montagem SMB. Isso pode melhorar o desempenho, pois cada ponto de montagem usa um soquete TCP diferente. Em alguns casos, nosharesock pode degradar o desempenho devido à não utilização de cache para o mesmo arquivo quando aberto a partir de duas montagens do mesmo cliente. |
max_channels= |
4 | Recomendado ao usar o SMB Multichannel. Especifica o número máximo de canais (conexões de rede) para o compartilhamento de arquivos. O uso do SMB Multichannel com mais de quatro canais resulta em um desempenho ruim. |
remount |
Não disponível | Remonta o compartilhamento de arquivos e altera as opções de montagem, se especificado. Use com a opção password2 nos casos em que você deseja especificar uma senha alternativa para corrigir uma senha expirada após a montagem original. |
nobrl |
Não disponível | Recomendado em cenários de cliente único quando forem necessários bloqueios de aviso. Os Arquivos do Azure não dão suporte a bloqueios de aviso e essa configuração impede o envio de solicitações de bloqueio de intervalo de bytes para o servidor. |
snapshot= |
tempo | Monte um instantâneo específico do compartilhamento de arquivos. O tempo deve ser um inteiro positivo que identifique o instantâneo solicitado (em unidades de 100 nanossegundos que passaram desde 1º de janeiro de 1601, ou alternativamente, pode ser especificado no formato GMT, por exemplo, @GMT-2024.03.27-20.52.19). |
closetimeo= |
5 | Configura o tempo limite de fechamento adiado (cache de identificador) em segundos ou o desabilita definindo como 0. O padrão é 5 segundos. |
nostrictsync |
Não disponível | Não peça ao servidor para liberar no fsync(). Alguns servidores realizam gravações não armazenadas em buffer por padrão, caso em que a liberação é redundante. Essa opção pode melhorar o desempenho para cargas de trabalho em que um cliente está realizando muitas combinações de gravação pequena + fsync e nas quais a latência da rede é muito maior do que a latência do servidor. |
multiuser |
Não disponível | Mapeie os acessos do usuário a credenciais individuais ao acessar o servidor. Por padrão, as montagens CIFS usam apenas um único conjunto de credenciais do usuário (as credenciais de montagem) ao acessar um compartilhamento. Com essa opção, o cliente cria uma nova sessão com o servidor usando as credenciais do usuário sempre que um novo usuário acessa a montagem. Outros acessos desse usuário também usam essas credenciais. Como o kernel não pode solicitar senhas, as montagens multiusuário são limitadas a montagens que utilizam opções sec= que não requerem senhas. |
cifsacl |
Não disponível | Essa opção é usada para mapear ACLs CIFS/NTFS para/de bits de permissão do Linux, mapear SIDs para/de UIDs e GIDs, e obter e definir descritores de segurança. Só há suporte para autenticação NTLMv2. |
idsfromsid,modefromsid |
Não disponível | Recomendado quando o cliente precisa realizar a autorização imposta pelo cliente. Habilita permissões no estilo Unix. Só funciona quando os UIDs/GIDs são consistentes em todos os clientes. Só há suporte para autenticação NTLMv2. |
cruid= |
uid ou nome de usuário | Opcional. Define a uid do proprietário do cache de credenciais. Isso é útil principalmente com sec=krb5 . O padrão é a uid real do processo que executa a montagem. Recomendamos definir esse parâmetro para o uid ou nome de usuário do usuário que tem os tíquetes Kerberos necessários no arquivo de cache de credenciais padrão. Isso direciona a chamada para procurar um cache de credenciais de propriedade desse usuário. |
sec= |
krb5 | Necessário para autenticação Kerberos. Para habilitar o modo de segurança Kerberos, defina sec=krb5 . Exemplo: sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks . Você deve omitir o nome de usuário e a senha ao usar essa opção. O cliente Linux deve estar conectado ao domínio. Consulte Habilitar a autenticação do Active Directory em SMB para clientes Linux. |
uid= |
0 | Opcional. Define a uid que possui todos os arquivos ou diretórios no sistema de arquivos montado quando o servidor não fornece informações de propriedade. Ele pode ser especificado como um nome de usuário ou uma UID numérica. Quando não especificado, o padrão é 0. |
gid= |
0 | Opcional. Define o gid que possui todos os arquivos ou diretórios no sistema de arquivos montado quando o servidor não fornece informações de propriedade. Ele pode ser especificado como um nome de grupo ou um GID numérico. Quando não especificado, o padrão é 0. |
file_mode= |
Não disponível | Opcional. Se o servidor não der suporte às extensões Unix do CIFS, isso substitui o modo de arquivo padrão. |
dir_mode= |
Não disponível | Opcional. Se o servidor não der suporte às extensões Unix do CIFS, isso substitui o modo padrão para diretórios. |
handletimeout= |
Não disponível | Opcional. O tempo (em milissegundos) para o qual o servidor deve reservar o identificador de arquivo após um failover, aguardando que o cliente se reconecte. |
Próxima etapa
Para obter mais informações sobre como usar compartilhamentos de arquivos SMB do Azure com o Linux, consulte: