Dela via


Montera SMB Azure-filresurser på Linux-klienter

Azure-fildelningar kan monteras i Linux-distributioner med hjälp av SMB-kärnklienten.

Den här artikeln visar hur du monterar en SMB Azure-fildelning med NTLMv2-autentisering (lagringskontonyckel). Att använda identitetsbaserad autentisering är att föredra av säkerhetsskäl. Se Aktivera Active Directory-autentisering via SMB för Linux-klienter som har åtkomst till Azure Files.

Gäller för

Hanteringsmodell Faktureringsmodell Medieklass Redundans små och medelstora företag NFS (Network File System)
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) Lokalt (LRS) Ja Inga
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) Zon (ZRS) Ja Inga
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) Geo (GRS) Ja Inga
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) GeoZone (GZRS) Ja Inga
Microsoft.Storage, lagringstjänster Tillhandahållen v1 SSD (hög kvalitet) Lokalt (LRS) Ja Inga
Microsoft.Storage, lagringstjänster Tillhandahållen v1 SSD (hög kvalitet) Zon (ZRS) Ja Inga
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) Lokalt (LRS) Ja Inga
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) Zon (ZRS) Ja Inga
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) Geo (GRS) Ja Inga
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) GeoZone (GZRS) Ja Inga

Protokoll

Som standard tillämpar Azure Files kryptering under överföring. SMB-kryptering är tillgängligt från och med SMB 3.0. Azure Files stöder även SMB 2.1, som inte stöder SMB-kryptering. Därför tillåter inte Azure Files att fildelningar monteras med SMB 2.1 från en annan Azure-region eller en lokal miljö, utan att ha ytterligare nätverkskonfiguration av säkerhetsskäl. Du bör använda SMB 3.1.1 om inte programmet specifikt kräver en äldre version.

Fördelning SMB 3.1.1 (rekommenderas) SMB 3.0
Linux-kernelversionen
  • 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 linux-distributionen inte visas i tabellen kan du kontrollera Linux-kernelversionen med uname kommandot :

uname -r

Förutsättningar

  • Kontrollera att cifs-utils-paketet är installerat. Installera den senaste versionen av 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!
    

    Du kan använda en VPN-anslutning eller ExpressRoute om port 445 blockeras i nätverket. Mer information finns i Nätverksöverväganden för direktåtkomst till Azure-filresurser.

Behörigheter

Alla monteringsskript i den här artikeln monterar filresurserna med standardbehörigheterna 0755 för Linux-filer 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 symbolisk notation. Se monteringsalternativ för en lista över monteringsalternativ.

Stöd för Unix-liknande behörigheter

Du kan också få stöd för Unix-behörigheter för SMB Azure-fildelningar genom att använda klient-enforcerad åtkomstkontroll och lägga till modefromsid,idsfromsid monteringsalternativ till ditt monteringskommando. För att detta ska fungera:

  • Alla klienter som har åtkomst till resursen måste använda modefromsid,idsfromsid för att montera den.
  • Användar-ID:erna och grupp-ID:erna måste vara enhetliga för alla klienter
  • Klienter måste köra någon av följande Linux-distributioner som stöds: Ubuntu 20.04+, SLES 15 SP3+

Montera Azure-fildelningen på begäran

När du monterar en filresurs på ett Linux-operativsystem representeras fjärrfilresursen som en mapp i det lokala filsystemet. Du kan montera fildelningar var som helst på ditt system. 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 med kommandot mount 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. Se monteringsalternativ för en lista över SMB-monteringsalternativ.

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å ansluta samma Azure fildelning till flera monteringspunkter om du vill.

När du är klar med att använda Azure-filresurs, använd sudo umount $mntPath för att demontera resursen.

Anslut fildelningar automatiskt

När du monterar en filresurs på ett Linux-operativsystem representeras fjärrfilresursen som en mapp i det lokala filsystemet. Du kan montera fildelningar var som helst på ditt system. 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

Använd 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 verktyget /etc/fstab eller en dynamisk montering via verktyget autofs.

Statisk montering med /etc/fstab

Använd den tidigare miljön och skapa en mapp för ditt lagringskonto/din fildelning i din monteringsmapp. 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-fildelning. 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. Se monteringsalternativ för en lista över SMB-monteringsalternativ.

Tips

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

För att dynamiskt montera en filresurs med autofs-verktyget, installera det 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 . Se monteringsalternativ för en lista över SMB-monteringsalternativ.

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

Monteringsalternativ

Du kan använda följande monteringsalternativ när du monterar SMB Azure-filresurser i Linux.

Monteringsalternativ Rekommenderat värde Beskrivning
username= Lagringskontonamn Obligatoriskt för NTLMv2-autentisering.
password= Primärnyckel för lagringskonto Obligatoriskt för NTLMv2-autentisering.
password2= Sekundär nyckel för lagringskonto Rekommenderas om nyckelrotation utan stilleståndstid är önskvärt.
mfsymlinks saknas Rekommenderas. Tvingar monteringen att stödja symboliska länkar, så att program som git kan klona lagringsplatser med symboliska länkar.
actimeo= 30-60 Rekommenderas. Den tid (i sekunder) som CIFS-klienten cachelagrar attribut för en fil eller katalog innan den begär attributinformation från en server. Om du använder ett värde som är lägre än 30 sekunder kan prestanda försämras eftersom attributcacheminnen för filer och kataloger upphör att gälla för snabbt. Vi rekommenderar att du ställer in actimeo mellan 30 och 60 sekunder.
nosharesock saknas Valfritt. Tvingar klienten att alltid upprätta en ny anslutning till servern även om den har en befintlig anslutning till SMB-monteringen. Detta kan förbättra prestanda eftersom varje monteringspunkt använder en annan TCP-socket. nosharesock kan i vissa fall försämra prestanda eftersom samma fil inte cachas när den öppnas från två enheter hos samma klient.
max_channels= 4 Rekommenderas när du använder SMB Multichannel. Anger det maximala antalet kanaler (nätverksanslutningar) till delad fil. Om du använder SMB Multichannel med fler än fyra kanaler resulterar det i dåliga prestanda.
remount saknas Monterar om fildelningen och ändrar monteringsalternativen om de anges. Använd med alternativet password2 om du vill ange ett alternativt lösenord för att åtgärda ett utgånget lösenord efter den ursprungliga monteringen.
nobrl saknas Rekommenderas i scenarier med en klient när rådgivande lås krävs. Azure Files stöder inte rådgivningslås och den här inställningen förhindrar att byteintervalllåsbegäranden skickas till servern.
snapshot= tid Montera en specifik ögonblicksbild av fildelningen. Tiden måste vara ett positivt heltal som identifierar den begärda ögonblicksbilden (i enheter med 100 nanosekunder som har förflutit sedan den 1 januari 1601, eller alternativt kan den anges i GMT-format, t.ex. @GMT-2024.03.27-20.52.19).
closetimeo= 5 Konfigurerar tidsgränsen för uppskjuten stängning (hantera cacheminnet) i sekunder eller inaktiverar den genom att ange 0. Standardvärdet är 5 sekunder.
nostrictsync saknas Begär inte att servern ska rensa vid fsync(). Vissa servrar utför icke-buffrade skrivningar som standard, i vilket fall tömningen är redundant. Det här alternativet kan förbättra prestanda för arbetsbelastningar där en klient utför många små kombinationer av skrivningar + fsync och där nätverksfördröjningen är mycket högre än serverns svarstid.
multiuser saknas Mappa användares åtkomst till enskilda autentiseringsuppgifter vid åtkomst till servern. Som standard använder CIFS-monteringar endast en enda uppsättning användarautentiseringsuppgifter (autentiseringsuppgifterna för montering) vid åtkomst till en resurs. Med det här alternativet skapar klienten i stället en ny session med servern med användarens autentiseringsuppgifter när en ny användare kommer åt monteringen. Ytterligare åtkomst av användaren använder även dessa autentiseringsuppgifter. Eftersom kerneln inte kan fråga efter lösenord är fleranvändarmonteringar begränsade till monteringar med hjälp av sec= alternativ som inte kräver lösenord.
cifsacl saknas Det här alternativet används för att mappa CIFS/NTFS-ACL:er till/från Linux-behörighetsbitar, mappa SID:er till/från användargränssnitt och GID:er och hämta och ange säkerhetsbeskrivningar. Stöds endast för NTLMv2-autentisering.
idsfromsid,modefromsid saknas Rekommenderas när klienten behöver utföra klientstyrd auktorisering. Aktiverar unix-behörigheter. Fungerar bara när UID/GID-nummer är samma för alla klienter. Stöds endast för NTLMv2-autentisering.
cruid= UID eller användarnamn Valfritt. Anger uid för ägaren av cacheminnet för autentiseringsuppgifter. Detta är främst användbart med sec=krb5. Standardvärdet är det verkliga användargränssnittet för processen som utför monteringen. Vi rekommenderar att du ställer in den här parametern på uid eller användarnamnet för den användare som har de nödvändiga Kerberos-biljetterna i cachefilen för standardautentiseringsuppgifter. Detta dirigerar uppanropet till att leta efter en cache för autentiseringsuppgifter som ägs av den användaren.
sec= krb5 Krävs för Kerberos-autentisering. Om du vill aktivera Kerberos-säkerhetsläge anger du sec=krb5. Exempel: sudo mount -t cifs $SMB_PATH $MNT_PATH -o sec=krb5,cruid=$UID,serverino,nosharesock,actimeo=30,mfsymlinks. Du måste utelämna användarnamn och lösenord när du använder det här alternativet. Linux-klienten måste vara domänansluten. Se Aktivera Active Directory-autentisering via SMB för Linux-klienter.
uid= 0 Valfritt. Anger det uid som äger alla filer eller kataloger i det monterade filsystemet när servern inte tillhandahåller ägarskapsinformation. Det kan anges som antingen ett användarnamn eller ett numeriskt uid. När det inte anges är standardvärdet 0.
gid= 0 Valfritt. Anger den gid som äger alla filer eller kataloger i det monterade filsystemet när servern inte tillhandahåller ägarskapsinformation. Det kan anges som antingen ett gruppnamn eller en numerisk gid. När det inte anges är standardvärdet 0.
file_mode= saknas Valfritt. Om servern inte stöder CIFS Unix-tillägg åsidosätter detta standardfilläget.
dir_mode= saknas Valfritt. Om servern inte stöder CIFS Unix-tillägg åsidosätter detta standardläget för kataloger.
handletimeout= saknas Valfritt. Den tid (i millisekunder) som servern ska reservera filhandtaget efter en överlämning medan den väntar på att klienten ska återansluta.

Nästa steg

Mer information om hur du använder SMB Azure-filresurser med Linux finns i: