Montera en SMB Azure-filresurs i Linux

Varning

Den här artikeln refererar till CentOS, en Linux-distribution som närmar sig EOL-status (End Of Life). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen. Azure Files är Microsofts lättanvända filsystem i molnet. Azure-filresurser kan monteras i Linux-distributioner med hjälp av SMB-kernelklienten.

Det rekommenderade sättet att montera en Azure-filresurs i Linux är med SMB 3.1.1. Som standard kräver Azure Files kryptering under överföring, vilket stöds i SMB 3.0+. Azure Files stöder även SMB 2.1, som inte stöder kryptering under överföring, men du kan inte montera Azure-filresurser med SMB 2.1 från en annan Azure-region eller lokalt av säkerhetsskäl. Använd SMB 3.1.1 om inte appen särskilt behöver SMB 2.1.

Distribution SMB 3.1.1 (rekommenderas) SMB 3.0
Linux-kernelversion
  • Grundläggande 3.1.1-stöd: 4.17
  • Standardmontering: 5.0
  • AES-128-GCM-kryptering: 5.3
  • AES-256-GCM-kryptering: 5.10
  • Grundläggande 3.0-stöd: 3.12
  • AES-128-CCM-kryptering: 4.11
Ubuntu Kryptering med AES-128-GCM: 18.04.5 LTS+ Kryptering med AES-128-CCM: 16.04.4 LTS+
Red Hat Enterprise Linux (RHEL)
  • Grundläggande: 8.0+
  • Standardmontering: 8.2+
  • Kryptering med AES-128-GCM: 8.2+
7.5+
Debian Grundläggande: 10+ Kryptering med AES-128-CCM: 10+
SUSE Linux Enterprise Server Kryptering med AES-128-GCM: 15 SP2+ Kryptering med AES-128-CCM: 12 SP2+

Om din Linux-distribution inte visas i tabellen ovan kan du kontrollera din Linux-kernelversion med kommandot uname:

uname -r

Kommentar

Stöd för SMB 2.1 lades till i version 3.7 av Linux-kärnan. Om du använder en version av Linux-kerneln efter 3.7 bör den ha stöd för SMB 2.1.

Gäller för

Typ av filresurs SMB NFS
Standardfilresurser (GPv2), LRS/ZRS Ja Inga
Standardfilresurser (GPv2), GRS/GZRS Ja Inga
Premiumfilresurser (FileStorage), LRS/ZRS Ja Inga

Förutsättningar

  • Kontrollera att cifs-utils-paketet är installerat. Cifs-utils-paketet kan installeras med hjälp av pakethanteraren på valfri Linux-distribution.

På Ubuntu och Debian använder du apt pakethanteraren:

sudo apt update
sudo apt install cifs-utils

På andra distributioner använder du lämplig pakethanterare eller kompilerar från källan.

  • Den senaste versionen av Azures kommandoradsgränssnitt (CLI). Mer information om hur du installerar Azure CLI finns i Installera Azure CLI och välj ditt operativsystem. Om du föredrar att använda Azure PowerShell-modulen i PowerShell 6+, kan du; Instruktionerna i den här artikeln gäller dock för Azure CLI.

  • Kontrollera att port 445 är öppen: SMB kommunicerar via TCP-port 445 – kontrollera att brandväggen eller ISP inte blockerar TCP-port 445 från klientdatorn. Ersätt <your-resource-group> och <your-storage-account> kör sedan följande skript:

    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
    

    Om anslutningen lyckades bör du se något som liknar följande utdata:

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

    Om du inte kan öppna port 445 i företagets nätverk eller blockeras från att göra det av en Internetleverantör kan du använda en VPN-anslutning eller ExpressRoute för att arbeta runt port 445. Mer information finns i Nätverksöverväganden för direktåtkomst till Azure-filresurser.

Montera Azure-filresursen på begäran med montering

När du monterar en filresurs på ett Linux-operativsystem representeras fjärrfilresursen som en mapp i det lokala filsystemet. Du kan montera filresurser var som helst i systemet. Följande exempel monteras under /media sökvägen. Du kan ändra detta till önskad sökväg genom att ändra variabeln $MNT_ROOT .

Ersätt <resource-group-name>, <storage-account-name>och <file-share-name> med lämplig information för din miljö:

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

Montera sedan filresursen mount med kommandot . I följande exempel $SMB_PATH fylls kommandot i med det fullständigt kvalificerade domännamnet för lagringskontots filslutpunkt och $STORAGE_ACCOUNT_KEY fylls i med lagringskontonyckeln.

Kommentar

Från och med Linux kernel version 5.0 är SMB 3.1.1 standardprotokollet som förhandlats. Om du använder en version av Linux-kerneln som är äldre än 5.0 anger du vers=3.1.1 i listan med monteringsalternativ.

# 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

Du kan använda uid/gid eller dir_mode och file_mode i monteringsalternativen mount för kommandot för att ange behörigheter. Mer information om hur du anger behörigheter finns i UNIX numerisk notation.

Du kan också montera samma Azure-filresurs på flera monteringspunkter om du vill. När du är klar med att använda Azure-filresursen använder sudo umount $mntPath du för att demontera resursen.

Montera filresurser automatiskt

När du monterar en filresurs på ett Linux-operativsystem representeras fjärrfilresursen som en mapp i det lokala filsystemet. Du kan montera filresurser var som helst i systemet. Följande exempel monteras under /media sökvägen. Du kan ändra detta till önskad sökväg genom att ändra variabeln $MNT_ROOT .

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

Om du vill montera en Azure-filresurs i Linux använder du lagringskontonamnet som användarnamn för filresursen och lagringskontonyckeln som lösenord. Eftersom autentiseringsuppgifterna för lagringskontot kan ändras med tiden bör du lagra autentiseringsuppgifterna för lagringskontot separat från monteringskonfigurationen.

I följande exempel visas hur du skapar en fil för att lagra autentiseringsuppgifterna. Kom ihåg att ersätta <resource-group-name> och <storage-account-name> med lämplig information för din miljö.

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

Om du vill montera en filresurs automatiskt kan du välja mellan att använda en statisk montering via /etc/fstab verktyget eller att använda en dynamisk montering via autofs verktyget.

Statisk montering med /etc/fstab

Använd den tidigare miljön och skapa en mapp för ditt lagringskonto/din filresurs under monteringsmappen. Ersätt <file-share-name> med lämpligt namn på din Azure-filresurs.

FILE_SHARE_NAME="<file-share-name>"

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

Skapa slutligen en post i /etc/fstab filen för din Azure-filresurs. I kommandot nedan används standardbehörigheterna för 0755 Linux-filer och -mappar, vilket innebär att läsa, skriva och köra för ägaren (baserat på fil-/katalog-Linux-ägaren), läsa och köra för användare i ägargruppen och läsa och köra för andra i systemet. Du kanske vill ange alternativa uid och gid eller dir_mode och file_mode behörigheter för montering efter behov. Mer information om hur du anger behörigheter finns i UNIX numerisk notation på Wikipedia.

Dricks

Om du vill att Docker-containrar som kör .NET Core-program ska kunna skriva till Azure-filresursen ska du inkludera nobrl i SMB-monteringsalternativen för att undvika att skicka byteintervalllåsbegäranden till servern.

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

Kommentar

Från och med Linux kernel version 5.0 är SMB 3.1.1 standardprotokollet som förhandlats. Du kan ange alternativa protokollversioner med monteringsalternativet vers (protokollversioner är 3.1.1, 3.0och 2.1).

Montera dynamiskt med autofs

Om du vill montera en filresurs dynamiskt med autofs verktyget installerar du den med hjälp av pakethanteraren på valfri Linux-distribution.

På Ubuntu- och Debiandistributioner använder du apt pakethanteraren:

sudo apt update
sudo apt install autofs

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

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

Det sista steget är att starta om autofs tjänsten.

sudo systemctl restart autofs

Montera en ögonblicksbild av en filresurs

Om du vill montera en specifik ögonblicksbild av en SMB Azure-filresurs måste du ange snapshot alternativet som en del av mount kommandot, där snapshot är den tid då den specifika ögonblicksbilden skapades i ett format som @GMT-2023.01.05-00.08.20. Alternativet snapshot har stöd för Linux-kerneln sedan version 4.19.

När du har skapat ögonblicksbilden av filresursen följer du de här anvisningarna för att montera den.

  1. I Azure-portalen går du till lagringskontot som innehåller den filresurs som du vill montera en ögonblicksbild av.

  2. Välj Datalagring > Filresurser och välj filresursen.

  3. Välj Driftögonblicksbilder > och anteckna namnet på den ögonblicksbild som du vill montera. Namnet på ögonblicksbilden är en GMT-tidsstämpel, till exempel i skärmbilden nedan.

    Skärmbild som visar hur du hittar ett filresursögonblicksbildnamn och tidsstämpel i Azure-portalen.

  4. Konvertera tidsstämpeln till det format som förväntas av mount kommandot, vilket är @GMT-year.month.day-hour.minutes.seconds. I det här exemplet konverterar du 2023-01-05T00:08:20.0000000Z till @GMT-2023.01.05-00.08.20.

  5. mount Kör kommandot med gmt-tiden för att ange värdetsnapshot. Se till att ersätta <storage-account-name>, <file-share-name>och GMT-tidsstämpeln med dina värden. .cred-filen innehåller de autentiseringsuppgifter som ska användas för att montera resursen (se Montera filresurser automatiskt).

    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. Om du kan bläddra i ögonblicksbilden under sökvägen /media/<file-share-name>/snapshot1lyckades monteringen.

Om monteringen misslyckas kan du läsa Felsöka anslutning och åtkomstproblem för Azure Files (SMB)..

Nästa steg

Mer information om Azure Files finns på följande länkar: