Dela via


Montera SMB Azure-filresurser på Linux-klienter

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. SMB 2.1-stöd lades till i Linux kernel version 3.7, så om du använder en version av Linux-kerneln efter 3.7 bör den ha stöd för 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

Alla monteringsskript i den här artikeln monterar SMB-filresurser med standardbehörigheterna 0755 Linux-fil och -mappar. Det innebär att läsa, skriva och köra för fil-/katalogägaren, läsa och köra för användare i ägargruppen och läsa och köra för andra användare. Beroende på organisationens säkerhetsprinciper kanske du vill ange alternativa uid/gid eller dir_mode och file_mode behörigheter i monteringsalternativen. Mer information om hur du anger behörigheter finns i UNIX numerisk notation.

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. Installera cifs-utils-paketet 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

Initiera sedan autentiseringsfilen genom att köra följande skript.

# 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

Nu kan du montera filresursen mount med kommandot med hjälp av autentiseringsfilen. I följande exempel $SMB_PATH fylls kommandot i med det fullständigt kvalificerade domännamnet för lagringskontots filslutpunkt.

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 credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks

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.

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

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,serverino,nosharesock,actimeo=30,mfsymlinks :$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

Nästa steg

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